[
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Describe the bug**\nA clear and concise description of what the bug is.\n\n**To Reproduce**\nSteps to reproduce the behavior:\n1. Go to '...'\n2. Click on '....'\n3. Scroll down to '....'\n4. See error\n\n**Expected behavior**\nA clear and concise description of what you expected to happen.\n\n**Screenshots**\nIf applicable, add screenshots to help explain your problem.\n\n**Desktop (please complete the following information):**\n - OS: [e.g. iOS]\n - Browser [e.g. chrome, safari]\n - Version [e.g. 22]\n\n**Smartphone (please complete the following information):**\n - Device: [e.g. iPhone6]\n - OS: [e.g. iOS8.1]\n - Browser [e.g. stock browser, safari]\n - Version [e.g. 22]\n\n**Additional context**\nAdd any other context about the problem here.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "content": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Is your feature request related to a problem? Please describe.**\nA clear and concise description of what the problem is. Ex. I'm always frustrated when [...]\n\n**Describe the solution you'd like**\nA clear and concise description of what you want to happen.\n\n**Describe alternatives you've considered**\nA clear and concise description of any alternative solutions or features you've considered.\n\n**Additional context**\nAdd any other context or screenshots about the feature request here.\n"
  },
  {
    "path": ".github/workflows/lint.yml",
    "content": "name: Lint\n\non:\n  pull_request:\n  push:\n\njobs:\n  quick-checks:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Fetch CosyVoice\n        uses: actions/checkout@v1\n      - name: Checkout PR tip\n        run: |\n          set -eux\n          if [[ \"${{ github.event_name }}\" == \"pull_request\" ]]; then\n            # We are on a PR, so actions/checkout leaves us on a merge commit.\n            # Check out the actual tip of the branch.\n            git checkout ${{ github.event.pull_request.head.sha }}\n          fi\n          echo ::set-output name=commit_sha::$(git rev-parse HEAD)\n        id: get_pr_tip\n      - name: Ensure no tabs\n        run: |\n          (! git grep -I -l $'\\t' -- . ':(exclude)*.txt' ':(exclude)*.svg' ':(exclude)**Makefile' ':(exclude)**/contrib/**' ':(exclude)third_party' ':(exclude).gitattributes' ':(exclude).gitmodules' || (echo \"The above files have tabs; please convert them to spaces\"; false))\n      - name: Ensure no trailing whitespace\n        run: |\n          (! git grep -I -n $' $' -- . ':(exclude)*.txt' ':(exclude)third_party' ':(exclude).gitattributes' ':(exclude).gitmodules' || (echo \"The above files have trailing whitespace; please remove them\"; false))\n\n  flake8-py3:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Setup Python\n        uses: actions/setup-python@v1\n        with:\n          python-version: 3.9\n          architecture: x64\n      - name: Fetch CosyVoice\n        uses: actions/checkout@v1\n      - name: Checkout PR tip\n        run: |\n          set -eux\n          if [[ \"${{ github.event_name }}\" == \"pull_request\" ]]; then\n            # We are on a PR, so actions/checkout leaves us on a merge commit.\n            # Check out the actual tip of the branch.\n            git checkout ${{ github.event.pull_request.head.sha }}\n          fi\n          echo ::set-output name=commit_sha::$(git rev-parse HEAD)\n        id: get_pr_tip\n      - name: Run flake8\n        run: |\n          set -eux\n          pip install flake8==3.8.2 flake8-bugbear flake8-comprehensions flake8-executable flake8-pyi==20.5.0 mccabe pycodestyle==2.6.0 pyflakes==2.2.0\n          flake8 --version\n          flake8 --max-line-length 180 --ignore B006,B008,B905,C408,E402,E731,E741,W503,W504,F401,F403,F405,F722,F841 --exclude ./third_party/,./runtime/python/grpc/cosyvoice_pb2*py\n          if [ $? != 0 ]; then exit 1; fi"
  },
  {
    "path": ".github/workflows/stale-issues.yml",
    "content": "name: Close inactive issues\non:\n  schedule:\n    - cron: \"30 1 * * *\"\n\njobs:\n  close-issues:\n    runs-on: ubuntu-latest\n    permissions:\n      issues: write\n      pull-requests: write\n    steps:\n      - uses: actions/stale@v5\n        with:\n          days-before-issue-stale: 30\n          days-before-issue-close: 14\n          stale-issue-label: \"stale\"\n          stale-issue-message: \"This issue is stale because it has been open for 30 days with no activity.\"\n          close-issue-message: \"This issue was closed because it has been inactive for 14 days since being marked as stale.\"\n          days-before-pr-stale: -1\n          days-before-pr-close: -1\n          repo-token: ${{ secrets.GITHUB_TOKEN }}\n"
  },
  {
    "path": ".gitignore",
    "content": "# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# Visual Studio Code files\n.vscode\n.vs\n\n# PyCharm files\n.idea\n\n# Eclipse Project settings\n*.*project\n.settings\n\n# Sublime Text settings\n*.sublime-workspace\n*.sublime-project\n\n# Editor temporaries\n*.swn\n*.swo\n*.swp\n*.swm\n*~\n\n# IPython notebook checkpoints\n.ipynb_checkpoints\n\n# macOS dir files\n.DS_Store\n\nexp\ndata\nraw_wav\ntensorboard\n**/*build*\n\n# Clangd files\n.cache\ncompile_commands.json\n\n# train/inference files\n*.wav\n*.m4a\n*.aac\n*.pt\npretrained_models/*\n*_pb2_grpc.py\n*_pb2.py\n*.tar"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"third_party/Matcha-TTS\"]\n\tpath = third_party/Matcha-TTS\n\turl = https://github.com/shivammehta25/Matcha-TTS.git\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as\ncontributors and maintainers pledge to making participation in our project and\nour community a harassment-free experience for everyone, regardless of age, body\nsize, disability, ethnicity, sex characteristics, gender identity and expression,\nlevel of experience, education, socio-economic status, nationality, personal\nappearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment\ninclude:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or\n advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic\n address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a\n professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable\nbehavior and are expected to take appropriate and fair corrective action in\nresponse to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or\nreject comments, commits, code, wiki edits, issues, and other contributions\nthat are not aligned to this Code of Conduct, or to ban temporarily or\npermanently any contributor for other behaviors that they deem inappropriate,\nthreatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces\nwhen an individual is representing the project or its community. Examples of\nrepresenting a project or community include using an official project e-mail\naddress, posting via an official social media account, or acting as an appointed\nrepresentative at an online or offline event. Representation of a project may be\nfurther defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be\nreported by contacting the project team at mikelei@mobvoi.com. All\ncomplaints will be reviewed and investigated and will result in a response that\nis deemed necessary and appropriate to the circumstances. The project team is\nobligated to maintain confidentiality with regard to the reporter of an incident.\nFurther details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good\nfaith may face temporary or permanent repercussions as determined by other\nmembers of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,\navailable at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html\n\n[homepage]: https://www.contributor-covenant.org\n\nFor answers to common questions about this code of conduct, see\nhttps://www.contributor-covenant.org/faq\n"
  },
  {
    "path": "FAQ.md",
    "content": "## ModuleNotFoundError: No module named 'matcha'\n\nMatcha-TTS is a third_party module. Please check `third_party` directory. If there is no `Matcha-TTS`, execute `git submodule update --init --recursive`.\n\nrun `export PYTHONPATH=third_party/Matcha-TTS` if you want to use `from cosyvoice.cli.cosyvoice import CosyVoice` in python script.\n\n## cannot find resource.zip or cannot unzip resource.zip\n\nPlease make sure you have git-lfs installed. Execute\n\n```sh\ngit clone https://www.modelscope.cn/iic/CosyVoice-ttsfrd.git pretrained_models/CosyVoice-ttsfrd\ncd pretrained_models/CosyVoice-ttsfrd/\nunzip resource.zip -d .\npip install ttsfrd-0.3.6-cp38-cp38-linux_x86_64.whl\n```\n"
  },
  {
    "path": "LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\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"
  },
  {
    "path": "README.md",
    "content": "![SVG Banners](https://svg-banners.vercel.app/api?type=origin&text1=CosyVoice🤠&text2=Text-to-Speech%20💖%20Large%20Language%20Model&width=800&height=210)\n\n## 👉🏻 CosyVoice 👈🏻\n\n**Fun-CosyVoice 3.0**: [Demos](https://funaudiollm.github.io/cosyvoice3/); [Paper](https://arxiv.org/pdf/2505.17589); [Modelscope](https://www.modelscope.cn/models/FunAudioLLM/Fun-CosyVoice3-0.5B-2512); [Huggingface](https://huggingface.co/FunAudioLLM/Fun-CosyVoice3-0.5B-2512); [CV3-Eval](https://github.com/FunAudioLLM/CV3-Eval)\n\n**CosyVoice 2.0**: [Demos](https://funaudiollm.github.io/cosyvoice2/); [Paper](https://arxiv.org/pdf/2412.10117); [Modelscope](https://www.modelscope.cn/models/iic/CosyVoice2-0.5B); [HuggingFace](https://huggingface.co/FunAudioLLM/CosyVoice2-0.5B)\n\n**CosyVoice 1.0**: [Demos](https://fun-audio-llm.github.io); [Paper](https://funaudiollm.github.io/pdf/CosyVoice_v1.pdf); [Modelscope](https://www.modelscope.cn/models/iic/CosyVoice-300M); [HuggingFace](https://huggingface.co/FunAudioLLM/CosyVoice-300M)\n\n## Highlight🔥\n\n**Fun-CosyVoice 3.0** is an advanced text-to-speech (TTS) system based on large language models (LLM), surpassing its predecessor (CosyVoice 2.0) in content consistency, speaker similarity, and prosody naturalness. It is designed for zero-shot multilingual speech synthesis in the wild.\n### Key Features\n- **Language Coverage**: Covers 9 common languages (Chinese, English, Japanese, Korean, German, Spanish, French, Italian, Russian), 18+ Chinese dialects/accents (Guangdong, Minnan, Sichuan, Dongbei, Shan3xi, Shan1xi, Shanghai, Tianjin, Shandong, Ningxia, Gansu, etc.) and meanwhile supports both multi-lingual/cross-lingual zero-shot voice cloning.\n- **Content Consistency & Naturalness**: Achieves state-of-the-art performance in content consistency, speaker similarity, and prosody naturalness.\n- **Pronunciation Inpainting**: Supports pronunciation inpainting of Chinese Pinyin and English CMU phonemes, providing more controllability and thus suitable for production use.\n- **Text Normalization**: Supports reading of numbers, special symbols and various text formats without a traditional frontend module.\n- **Bi-Streaming**: Support both text-in streaming and audio-out streaming, and achieves latency as low as 150ms while maintaining high-quality audio output.\n- **Instruct Support**: Supports various instructions such as languages, dialects, emotions, speed, volume, etc.\n\n\n## Roadmap\n\n- [x] 2025/12\n\n    - [x] release Fun-CosyVoice3-0.5B-2512 base model, rl model and its training/inference script\n    - [x] release Fun-CosyVoice3-0.5B modelscope gradio space\n\n- [x] 2025/08\n\n    - [x] Thanks to the contribution from NVIDIA Yuekai Zhang, add triton trtllm runtime support and cosyvoice2 grpo training support\n\n- [x] 2025/07\n\n    - [x] release Fun-CosyVoice 3.0 eval set\n\n- [x] 2025/05\n\n    - [x] add CosyVoice2-0.5B vllm support\n\n- [x] 2024/12\n\n    - [x] 25hz CosyVoice2-0.5B released\n\n- [x] 2024/09\n\n    - [x] 25hz CosyVoice-300M base model\n    - [x] 25hz CosyVoice-300M voice conversion function\n\n- [x] 2024/08\n\n    - [x] Repetition Aware Sampling(RAS) inference for llm stability\n    - [x] Streaming inference mode support, including kv cache and sdpa for rtf optimization\n\n- [x] 2024/07\n\n    - [x] Flow matching training support\n    - [x] WeTextProcessing support when ttsfrd is not available\n    - [x] Fastapi server and client\n\n## Evaluation\n\n| Model | Open-Source | Model Size | test-zh<br>CER (%) ↓ | test-zh<br>SS (%) ↑ | test-en<br>WER (%) ↓ | test-en<br>SS (%) ↑ | test-hard<br>CER (%) ↓ | test-hard<br>SS (%) ↑ |\n| :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |\n| Human | - | - | 1.26 | 75.5 | 2.14 | 73.4 | - | - |\n| Seed-TTS | ❌ | - | 1.12 | 79.6 | 2.25 | 76.2 | 7.59 | 77.6 |\n| MiniMax-Speech | ❌ | - | 0.83 | 78.3 | 1.65 | 69.2 | - | - |\n| F5-TTS | ✅ | 0.3B | 1.52 | 74.1 | 2.00 | 64.7 | 8.67 | 71.3 |\n| Spark TTS | ✅ | 0.5B | 1.2 | 66.0 | 1.98 | 57.3 | - | - |\n| CosyVoice2 | ✅ | 0.5B | 1.45 | 75.7 | 2.57 | 65.9 | 6.83 | 72.4 |\n| FireRedTTS2 | ✅ | 1.5B | 1.14 | 73.2 | 1.95 | 66.5 | - | - |\n| Index-TTS2 | ✅ | 1.5B | 1.03 | 76.5 | 2.23 | 70.6 | 7.12 | 75.5 |\n| VibeVoice-1.5B | ✅ | 1.5B | 1.16 | 74.4 | 3.04 | 68.9 | - | - |\n| VibeVoice-Realtime | ✅ | 0.5B | - | - | 2.05 | 63.3 | - | - |\n| HiggsAudio-v2 | ✅ | 3B | 1.50 | 74.0 | 2.44 | 67.7 | - | - |\n| VoxCPM | ✅ | 0.5B | 0.93 | 77.2 | 1.85 | 72.9 | 8.87 | 73.0 |\n| GLM-TTS | ✅ | 1.5B | 1.03 | 76.1 | - | - | - | - |\n| GLM-TTS RL | ✅ | 1.5B | 0.89 | 76.4 | - | - | - | - |\n| Fun-CosyVoice3-0.5B-2512 | ✅ | 0.5B | 1.21 | 78.0 | 2.24 | 71.8 | 6.71 | 75.8 |\n| Fun-CosyVoice3-0.5B-2512_RL | ✅ | 0.5B | 0.81 | 77.4 | 1.68 | 69.5 | 5.44 | 75.0 |\n\n\n## Install\n\n### Clone and install\n\n- Clone the repo\n    ``` sh\n    git clone --recursive https://github.com/FunAudioLLM/CosyVoice.git\n    # If you failed to clone the submodule due to network failures, please run the following command until success\n    cd CosyVoice\n    git submodule update --init --recursive\n    ```\n\n- Install Conda: please see https://docs.conda.io/en/latest/miniconda.html\n- Create Conda env:\n\n    ``` sh\n    conda create -n cosyvoice -y python=3.10\n    conda activate cosyvoice\n    pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com\n\n    # If you encounter sox compatibility issues\n    # ubuntu\n    sudo apt-get install sox libsox-dev\n    # centos\n    sudo yum install sox sox-devel\n    ```\n\n### Model download\n\nWe strongly recommend that you download our pretrained `Fun-CosyVoice3-0.5B` `CosyVoice2-0.5B` `CosyVoice-300M` `CosyVoice-300M-SFT` `CosyVoice-300M-Instruct` model and `CosyVoice-ttsfrd` resource.\n\n``` python\n# modelscope SDK model download\nfrom modelscope import snapshot_download\nsnapshot_download('FunAudioLLM/Fun-CosyVoice3-0.5B-2512', local_dir='pretrained_models/Fun-CosyVoice3-0.5B')\nsnapshot_download('iic/CosyVoice2-0.5B', local_dir='pretrained_models/CosyVoice2-0.5B')\nsnapshot_download('iic/CosyVoice-300M', local_dir='pretrained_models/CosyVoice-300M')\nsnapshot_download('iic/CosyVoice-300M-SFT', local_dir='pretrained_models/CosyVoice-300M-SFT')\nsnapshot_download('iic/CosyVoice-300M-Instruct', local_dir='pretrained_models/CosyVoice-300M-Instruct')\nsnapshot_download('iic/CosyVoice-ttsfrd', local_dir='pretrained_models/CosyVoice-ttsfrd')\n\n# for oversea users, huggingface SDK model download\nfrom huggingface_hub import snapshot_download\nsnapshot_download('FunAudioLLM/Fun-CosyVoice3-0.5B-2512', local_dir='pretrained_models/Fun-CosyVoice3-0.5B')\nsnapshot_download('FunAudioLLM/CosyVoice2-0.5B', local_dir='pretrained_models/CosyVoice2-0.5B')\nsnapshot_download('FunAudioLLM/CosyVoice-300M', local_dir='pretrained_models/CosyVoice-300M')\nsnapshot_download('FunAudioLLM/CosyVoice-300M-SFT', local_dir='pretrained_models/CosyVoice-300M-SFT')\nsnapshot_download('FunAudioLLM/CosyVoice-300M-Instruct', local_dir='pretrained_models/CosyVoice-300M-Instruct')\nsnapshot_download('FunAudioLLM/CosyVoice-ttsfrd', local_dir='pretrained_models/CosyVoice-ttsfrd')\n```\n\nOptionally, you can unzip `ttsfrd` resource and install `ttsfrd` package for better text normalization performance.\n\nNotice that this step is not necessary. If you do not install `ttsfrd` package, we will use wetext by default.\n\n``` sh\ncd pretrained_models/CosyVoice-ttsfrd/\nunzip resource.zip -d .\npip install ttsfrd_dependency-0.1-py3-none-any.whl\npip install ttsfrd-0.4.2-cp310-cp310-linux_x86_64.whl\n```\n\n### Basic Usage\n\nWe strongly recommend using `Fun-CosyVoice3-0.5B` for better performance.\nFollow the code in `example.py` for detailed usage of each model.\n```sh\npython example.py\n```\n\n#### vLLM Usage\nCosyVoice2/3 now supports **vLLM 0.11.x+ (V1 engine)** and **vLLM 0.9.0 (legacy)**.\nOlder vllm version(<0.9.0) do not support CosyVoice inference, and versions in between (e.g., 0.10.x) are not tested.\n\nNotice that `vllm` has a lot of specific requirements. You can create a new env to in case your hardward do not support vllm and old env is corrupted.\n\n``` sh\nconda create -n cosyvoice_vllm --clone cosyvoice\nconda activate cosyvoice_vllm\n# for vllm==0.9.0\npip install vllm==v0.9.0 transformers==4.51.3 numpy==1.26.4 -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com\n# for vllm>=0.11.0\npip install vllm==v0.11.0 transformers==4.57.1 numpy==1.26.4 -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com\npython vllm_example.py\n```\n\n#### Start web demo\n\nYou can use our web demo page to get familiar with CosyVoice quickly.\n\nPlease see the demo website for details.\n\n``` python\n# change iic/CosyVoice-300M-SFT for sft inference, or iic/CosyVoice-300M-Instruct for instruct inference\npython3 webui.py --port 50000 --model_dir pretrained_models/CosyVoice-300M\n```\n\n#### Advanced Usage\n\nFor advanced users, we have provided training and inference scripts in `examples/libritts`.\n\n#### Build for deployment\n\nOptionally, if you want service deployment,\nYou can run the following steps.\n\n``` sh\ncd runtime/python\ndocker build -t cosyvoice:v1.0 .\n# change iic/CosyVoice-300M to iic/CosyVoice-300M-Instruct if you want to use instruct inference\n# for grpc usage\ndocker run -d --runtime=nvidia -p 50000:50000 cosyvoice:v1.0 /bin/bash -c \"cd /opt/CosyVoice/CosyVoice/runtime/python/grpc && python3 server.py --port 50000 --max_conc 4 --model_dir iic/CosyVoice-300M && sleep infinity\"\ncd grpc && python3 client.py --port 50000 --mode <sft|zero_shot|cross_lingual|instruct>\n# for fastapi usage\ndocker run -d --runtime=nvidia -p 50000:50000 cosyvoice:v1.0 /bin/bash -c \"cd /opt/CosyVoice/CosyVoice/runtime/python/fastapi && python3 server.py --port 50000 --model_dir iic/CosyVoice-300M && sleep infinity\"\ncd fastapi && python3 client.py --port 50000 --mode <sft|zero_shot|cross_lingual|instruct>\n```\n\n#### Using Nvidia TensorRT-LLM for deployment\n\nUsing TensorRT-LLM to accelerate cosyvoice2 llm could give 4x acceleration comparing with huggingface transformers implementation.\nTo quick start:\n\n``` sh\ncd runtime/triton_trtllm\ndocker compose up -d\n```\nFor more details, you could check [here](https://github.com/FunAudioLLM/CosyVoice/tree/main/runtime/triton_trtllm)\n\n## Discussion & Communication\n\nYou can directly discuss on [Github Issues](https://github.com/FunAudioLLM/CosyVoice/issues).\n\nYou can also scan the QR code to join our official Dingding chat group.\n\n<img src=\"./asset/dingding.png\" width=\"250px\">\n\n## Acknowledge\n\n1. We borrowed a lot of code from [FunASR](https://github.com/modelscope/FunASR).\n2. We borrowed a lot of code from [FunCodec](https://github.com/modelscope/FunCodec).\n3. We borrowed a lot of code from [Matcha-TTS](https://github.com/shivammehta25/Matcha-TTS).\n4. We borrowed a lot of code from [AcademiCodec](https://github.com/yangdongchao/AcademiCodec).\n5. We borrowed a lot of code from [WeNet](https://github.com/wenet-e2e/wenet).\n\n## Citations\n\n``` bibtex\n@article{du2024cosyvoice,\n  title={Cosyvoice: A scalable multilingual zero-shot text-to-speech synthesizer based on supervised semantic tokens},\n  author={Du, Zhihao and Chen, Qian and Zhang, Shiliang and Hu, Kai and Lu, Heng and Yang, Yexin and Hu, Hangrui and Zheng, Siqi and Gu, Yue and Ma, Ziyang and others},\n  journal={arXiv preprint arXiv:2407.05407},\n  year={2024}\n}\n\n@article{du2024cosyvoice,\n  title={Cosyvoice 2: Scalable streaming speech synthesis with large language models},\n  author={Du, Zhihao and Wang, Yuxuan and Chen, Qian and Shi, Xian and Lv, Xiang and Zhao, Tianyu and Gao, Zhifu and Yang, Yexin and Gao, Changfeng and Wang, Hui and others},\n  journal={arXiv preprint arXiv:2412.10117},\n  year={2024}\n}\n\n@article{du2025cosyvoice,\n  title={CosyVoice 3: Towards In-the-wild Speech Generation via Scaling-up and Post-training},\n  author={Du, Zhihao and Gao, Changfeng and Wang, Yuxuan and Yu, Fan and Zhao, Tianyu and Wang, Hao and Lv, Xiang and Wang, Hui and Shi, Xian and An, Keyu and others},\n  journal={arXiv preprint arXiv:2505.17589},\n  year={2025}\n}\n\n@inproceedings{lyu2025build,\n  title={Build LLM-Based Zero-Shot Streaming TTS System with Cosyvoice},\n  author={Lyu, Xiang and Wang, Yuxuan and Zhao, Tianyu and Wang, Hao and Liu, Huadai and Du, Zhihao},\n  booktitle={ICASSP 2025-2025 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP)},\n  pages={1--2},\n  year={2025},\n  organization={IEEE}\n}\n```\n\n## Disclaimer\nThe content provided above is for academic purposes only and is intended to demonstrate technical capabilities. Some examples are sourced from the internet. If any content infringes on your rights, please contact us to request its removal.\n"
  },
  {
    "path": "cosyvoice/__init__.py",
    "content": ""
  },
  {
    "path": "cosyvoice/bin/average_model.py",
    "content": "# Copyright (c) 2020 Mobvoi Inc (Di Wu)\n# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu)\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\nimport os\nimport argparse\nimport glob\n\nimport yaml\nimport torch\n\n\ndef get_args():\n    parser = argparse.ArgumentParser(description='average model')\n    parser.add_argument('--dst_model', required=True, help='averaged model')\n    parser.add_argument('--src_path',\n                        required=True,\n                        help='src model path for average')\n    parser.add_argument('--val_best',\n                        action=\"store_true\",\n                        help='averaged model')\n    parser.add_argument('--num',\n                        default=5,\n                        type=int,\n                        help='nums for averaged model')\n\n    args = parser.parse_args()\n    print(args)\n    return args\n\n\ndef main():\n    args = get_args()\n    val_scores = []\n    if args.val_best:\n        yamls = glob.glob('{}/*.yaml'.format(args.src_path))\n        yamls = [\n            f for f in yamls\n            if not (os.path.basename(f).startswith('train')\n                    or os.path.basename(f).startswith('init'))\n        ]\n        for y in yamls:\n            with open(y, 'r') as f:\n                dic_yaml = yaml.load(f, Loader=yaml.BaseLoader)\n                loss = float(dic_yaml['loss_dict']['loss'])\n                epoch = int(dic_yaml['epoch'])\n                step = int(dic_yaml['step'])\n                tag = dic_yaml['tag']\n                val_scores += [[epoch, step, loss, tag]]\n        sorted_val_scores = sorted(val_scores,\n                                   key=lambda x: x[2],\n                                   reverse=False)\n        print(\"best val (epoch, step, loss, tag) = \" +\n              str(sorted_val_scores[:args.num]))\n        path_list = [\n            args.src_path + '/epoch_{}_whole.pt'.format(score[0])\n            for score in sorted_val_scores[:args.num]\n        ]\n    print(path_list)\n    avg = {}\n    num = args.num\n    assert num == len(path_list)\n    for path in path_list:\n        print('Processing {}'.format(path))\n        states = torch.load(path, map_location=torch.device('cpu'))\n        for k in states.keys():\n            if k not in ['step', 'epoch']:\n                if k not in avg.keys():\n                    avg[k] = states[k].clone()\n                else:\n                    avg[k] += states[k]\n    # average\n    for k in avg.keys():\n        if avg[k] is not None:\n            # pytorch 1.6 use true_divide instead of /=\n            avg[k] = torch.true_divide(avg[k], num)\n    print('Saving to {}'.format(args.dst_model))\n    torch.save(avg, args.dst_model)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "cosyvoice/bin/export_jit.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu)\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\nfrom __future__ import print_function\n\nimport argparse\nimport logging\nlogging.getLogger('matplotlib').setLevel(logging.WARNING)\nimport os\nimport sys\nimport torch\nROOT_DIR = os.path.dirname(os.path.abspath(__file__))\nsys.path.append('{}/../..'.format(ROOT_DIR))\nsys.path.append('{}/../../third_party/Matcha-TTS'.format(ROOT_DIR))\nfrom cosyvoice.cli.cosyvoice import AutoModel\nfrom cosyvoice.utils.file_utils import logging\n\n\ndef get_args():\n    parser = argparse.ArgumentParser(description='export your model for deployment')\n    parser.add_argument('--model_dir',\n                        type=str,\n                        default='pretrained_models/CosyVoice-300M',\n                        help='local path')\n    args = parser.parse_args()\n    print(args)\n    return args\n\n\ndef get_optimized_script(model, preserved_attrs=[]):\n    script = torch.jit.script(model)\n    if preserved_attrs != []:\n        script = torch.jit.freeze(script, preserved_attrs=preserved_attrs)\n    else:\n        script = torch.jit.freeze(script)\n    script = torch.jit.optimize_for_inference(script)\n    return script\n\n\ndef main():\n    args = get_args()\n    logging.basicConfig(level=logging.DEBUG,\n                        format='%(asctime)s %(levelname)s %(message)s')\n\n    torch._C._jit_set_fusion_strategy([('STATIC', 1)])\n    torch._C._jit_set_profiling_mode(False)\n    torch._C._jit_set_profiling_executor(False)\n\n    model = AutoModel(model_dir=args.model_dir)\n\n    if model.__class__.__name__ == 'CosyVoice':\n        # 1. export llm text_encoder\n        llm_text_encoder = model.model.llm.text_encoder\n        script = get_optimized_script(llm_text_encoder)\n        script.save('{}/llm.text_encoder.fp32.zip'.format(args.model_dir))\n        script = get_optimized_script(llm_text_encoder.half())\n        script.save('{}/llm.text_encoder.fp16.zip'.format(args.model_dir))\n        logging.info('successfully export llm_text_encoder')\n\n        # 2. export llm llm\n        llm_llm = model.model.llm.llm\n        script = get_optimized_script(llm_llm, ['forward_chunk'])\n        script.save('{}/llm.llm.fp32.zip'.format(args.model_dir))\n        script = get_optimized_script(llm_llm.half(), ['forward_chunk'])\n        script.save('{}/llm.llm.fp16.zip'.format(args.model_dir))\n        logging.info('successfully export llm_llm')\n\n        # 3. export flow encoder\n        flow_encoder = model.model.flow.encoder\n        script = get_optimized_script(flow_encoder)\n        script.save('{}/flow.encoder.fp32.zip'.format(args.model_dir))\n        script = get_optimized_script(flow_encoder.half())\n        script.save('{}/flow.encoder.fp16.zip'.format(args.model_dir))\n        logging.info('successfully export flow_encoder')\n    elif model.__class__.__name__ == 'CosyVoice2':\n        # 1. export flow encoder\n        flow_encoder = model.model.flow.encoder\n        script = get_optimized_script(flow_encoder)\n        script.save('{}/flow.encoder.fp32.zip'.format(args.model_dir))\n        script = get_optimized_script(flow_encoder.half())\n        script.save('{}/flow.encoder.fp16.zip'.format(args.model_dir))\n        logging.info('successfully export flow_encoder')\n    else:\n        raise ValueError('unsupported model type')\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "cosyvoice/bin/export_onnx.py",
    "content": "# Copyright (c) 2024 Antgroup Inc (authors: Zhoubofan, hexisyztem@icloud.com)\n# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu)\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\nfrom __future__ import print_function\n\nimport argparse\nimport logging\nlogging.getLogger('matplotlib').setLevel(logging.WARNING)\nimport os\nimport sys\nimport onnxruntime\nimport random\nimport torch\nfrom tqdm import tqdm\nROOT_DIR = os.path.dirname(os.path.abspath(__file__))\nsys.path.append('{}/../..'.format(ROOT_DIR))\nsys.path.append('{}/../../third_party/Matcha-TTS'.format(ROOT_DIR))\nfrom cosyvoice.cli.cosyvoice import AutoModel\nfrom cosyvoice.utils.file_utils import logging\n\n\ndef get_dummy_input(batch_size, seq_len, out_channels, device):\n    x = torch.rand((batch_size, out_channels, seq_len), dtype=torch.float32, device=device)\n    mask = torch.ones((batch_size, 1, seq_len), dtype=torch.float32, device=device)\n    mu = torch.rand((batch_size, out_channels, seq_len), dtype=torch.float32, device=device)\n    t = torch.rand((batch_size), dtype=torch.float32, device=device)\n    spks = torch.rand((batch_size, out_channels), dtype=torch.float32, device=device)\n    cond = torch.rand((batch_size, out_channels, seq_len), dtype=torch.float32, device=device)\n    return x, mask, mu, t, spks, cond\n\n\ndef get_args():\n    parser = argparse.ArgumentParser(description='export your model for deployment')\n    parser.add_argument('--model_dir',\n                        type=str,\n                        default='pretrained_models/CosyVoice-300M',\n                        help='local path')\n    args = parser.parse_args()\n    print(args)\n    return args\n\n\n@torch.no_grad()\ndef main():\n    args = get_args()\n    logging.basicConfig(level=logging.DEBUG,\n                        format='%(asctime)s %(levelname)s %(message)s')\n\n    model = AutoModel(model_dir=args.model_dir)\n\n    # 1. export flow decoder estimator\n    estimator = model.model.flow.decoder.estimator\n    estimator.eval()\n\n    device = model.model.device\n    batch_size, seq_len = 2, 256\n    out_channels = model.model.flow.decoder.estimator.out_channels\n    x, mask, mu, t, spks, cond = get_dummy_input(batch_size, seq_len, out_channels, device)\n    torch.onnx.export(\n        estimator,\n        (x, mask, mu, t, spks, cond),\n        '{}/flow.decoder.estimator.fp32.onnx'.format(args.model_dir),\n        export_params=True,\n        opset_version=18,\n        do_constant_folding=True,\n        input_names=['x', 'mask', 'mu', 't', 'spks', 'cond'],\n        output_names=['estimator_out'],\n        dynamic_axes={\n            'x': {2: 'seq_len'},\n            'mask': {2: 'seq_len'},\n            'mu': {2: 'seq_len'},\n            'cond': {2: 'seq_len'},\n            'estimator_out': {2: 'seq_len'},\n        }\n    )\n\n    # 2. test computation consistency\n    option = onnxruntime.SessionOptions()\n    option.graph_optimization_level = onnxruntime.GraphOptimizationLevel.ORT_ENABLE_ALL\n    option.intra_op_num_threads = 1\n    providers = ['CUDAExecutionProvider' if torch.cuda.is_available() else 'CPUExecutionProvider']\n    estimator_onnx = onnxruntime.InferenceSession('{}/flow.decoder.estimator.fp32.onnx'.format(args.model_dir),\n                                                  sess_options=option, providers=providers)\n\n    for _ in tqdm(range(10)):\n        x, mask, mu, t, spks, cond = get_dummy_input(batch_size, random.randint(16, 512), out_channels, device)\n        output_pytorch = estimator(x, mask, mu, t, spks, cond)\n        ort_inputs = {\n            'x': x.cpu().numpy(),\n            'mask': mask.cpu().numpy(),\n            'mu': mu.cpu().numpy(),\n            't': t.cpu().numpy(),\n            'spks': spks.cpu().numpy(),\n            'cond': cond.cpu().numpy()\n        }\n        output_onnx = estimator_onnx.run(None, ort_inputs)[0]\n        torch.testing.assert_allclose(output_pytorch, torch.from_numpy(output_onnx).to(device), rtol=1e-2, atol=1e-4)\n    logging.info('successfully export estimator')\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "cosyvoice/bin/train.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu)\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\nfrom __future__ import print_function\nimport argparse\nimport datetime\nimport logging\nlogging.getLogger('matplotlib').setLevel(logging.WARNING)\nfrom copy import deepcopy\nimport os\nimport torch\nimport torch.distributed as dist\nimport deepspeed\n\nfrom hyperpyyaml import load_hyperpyyaml\n\nfrom torch.distributed.elastic.multiprocessing.errors import record\n\nfrom cosyvoice.utils.losses import DPOLoss\nfrom cosyvoice.utils.executor import Executor\nfrom cosyvoice.utils.train_utils import (\n    init_distributed,\n    init_dataset_and_dataloader,\n    init_optimizer_and_scheduler,\n    init_summarywriter, save_model,\n    wrap_cuda_model, check_modify_and_save_config)\n\n\ndef get_args():\n    parser = argparse.ArgumentParser(description='training your network')\n    parser.add_argument('--train_engine',\n                        default='torch_ddp',\n                        choices=['torch_ddp', 'deepspeed'],\n                        help='Engine for paralleled training')\n    parser.add_argument('--model', required=True, help='model which will be trained')\n    parser.add_argument('--ref_model', required=False, help='ref model used in dpo')\n    parser.add_argument('--config', required=True, help='config file')\n    parser.add_argument('--train_data', required=True, help='train data file')\n    parser.add_argument('--cv_data', required=True, help='cv data file')\n    parser.add_argument('--qwen_pretrain_path', required=False, help='qwen pretrain path')\n    parser.add_argument('--onnx_path', required=False, help='onnx path, which is required for online feature extraction')\n    parser.add_argument('--checkpoint', help='checkpoint model')\n    parser.add_argument('--model_dir', required=True, help='save model dir')\n    parser.add_argument('--tensorboard_dir',\n                        default='tensorboard',\n                        help='tensorboard log dir')\n    parser.add_argument('--ddp.dist_backend',\n                        dest='dist_backend',\n                        default='nccl',\n                        choices=['nccl', 'gloo'],\n                        help='distributed backend')\n    parser.add_argument('--num_workers',\n                        default=0,\n                        type=int,\n                        help='num of subprocess workers for reading')\n    parser.add_argument('--prefetch',\n                        default=100,\n                        type=int,\n                        help='prefetch number')\n    parser.add_argument('--pin_memory',\n                        action='store_true',\n                        default=False,\n                        help='Use pinned memory buffers used for reading')\n    parser.add_argument('--use_amp',\n                        action='store_true',\n                        default=False,\n                        help='Use automatic mixed precision training')\n    parser.add_argument('--dpo',\n                        action='store_true',\n                        default=False,\n                        help='Use Direct Preference Optimization')\n    parser.add_argument('--deepspeed.save_states',\n                        dest='save_states',\n                        default='model_only',\n                        choices=['model_only', 'model+optimizer'],\n                        help='save model/optimizer states')\n    parser.add_argument('--timeout',\n                        default=60,\n                        type=int,\n                        help='timeout (in seconds) of cosyvoice_join.')\n    parser = deepspeed.add_config_arguments(parser)\n    args = parser.parse_args()\n    return args\n\n\n@record\ndef main():\n    args = get_args()\n    os.environ['onnx_path'] = args.onnx_path\n    logging.basicConfig(level=logging.DEBUG,\n                        format='%(asctime)s %(levelname)s %(message)s')\n    # gan train has some special initialization logic\n    gan = True if args.model == 'hifigan' else False\n\n    override_dict = {k: None for k in ['llm', 'flow', 'hift', 'hifigan'] if k != args.model}\n    if gan is True:\n        override_dict.pop('hift')\n    if args.qwen_pretrain_path is not None:\n        override_dict['qwen_pretrain_path'] = args.qwen_pretrain_path\n    with open(args.config, 'r') as f:\n        configs = load_hyperpyyaml(f, overrides=override_dict)\n    if gan is True:\n        configs['train_conf'] = configs['train_conf_gan']\n    configs['train_conf'].update(vars(args))\n\n    # Init env for ddp\n    init_distributed(args)\n\n    # Get dataset & dataloader\n    train_dataset, cv_dataset, train_data_loader, cv_data_loader = \\\n        init_dataset_and_dataloader(args, configs, gan, args.dpo)\n\n    # Do some sanity checks and save config to arsg.model_dir\n    configs = check_modify_and_save_config(args, configs)\n\n    # Tensorboard summary\n    writer = init_summarywriter(args)\n\n    # load checkpoint\n    if args.dpo is True:\n        configs[args.model].forward = configs[args.model].forward_dpo\n    model = configs[args.model]\n    start_step, start_epoch = 0, -1\n    if args.checkpoint is not None:\n        if os.path.exists(args.checkpoint):\n            state_dict = torch.load(args.checkpoint, map_location='cpu')\n            model.load_state_dict(state_dict, strict=False)\n            if 'step' in state_dict:\n                start_step = state_dict['step']\n            if 'epoch' in state_dict:\n                start_epoch = state_dict['epoch']\n        else:\n            logging.warning('checkpoint {} do not exsist!'.format(args.checkpoint))\n\n    # Dispatch model from cpu to gpu\n    model = wrap_cuda_model(args, model)\n\n    # Get optimizer & scheduler\n    model, optimizer, scheduler, optimizer_d, scheduler_d = init_optimizer_and_scheduler(args, configs, model, gan)\n    scheduler.set_step(start_step)\n    if scheduler_d is not None:\n        scheduler_d.set_step(start_step)\n\n    # Save init checkpoints\n    info_dict = deepcopy(configs['train_conf'])\n    info_dict['step'] = start_step\n    info_dict['epoch'] = start_epoch\n    save_model(model, 'init', info_dict)\n\n    # DPO related\n    if args.dpo is True:\n        ref_model = deepcopy(configs[args.model])\n        state_dict = torch.load(args.ref_model, map_location='cpu')\n        ref_model.load_state_dict(state_dict, strict=False)\n        dpo_loss = DPOLoss(beta=0.01, label_smoothing=0.0, ipo=False)\n        # NOTE maybe it is not needed to wrap ref_model as ddp because its parameter is not updated\n        ref_model = wrap_cuda_model(args, ref_model)\n    else:\n        ref_model, dpo_loss = None, None\n\n    # Get executor\n    executor = Executor(gan=gan, ref_model=ref_model, dpo_loss=dpo_loss)\n    executor.step = start_step\n\n    # Init scaler, used for pytorch amp mixed precision training\n    scaler = torch.cuda.amp.GradScaler() if args.use_amp else None\n    print('start step {} start epoch {}'.format(start_step, start_epoch))\n\n    # Start training loop\n    for epoch in range(start_epoch + 1, info_dict['max_epoch']):\n        executor.epoch = epoch\n        train_dataset.set_epoch(epoch)\n        dist.barrier()\n        group_join = dist.new_group(backend=\"gloo\", timeout=datetime.timedelta(seconds=args.timeout))\n        if gan is True:\n            executor.train_one_epoc_gan(model, optimizer, scheduler, optimizer_d, scheduler_d, train_data_loader, cv_data_loader,\n                                        writer, info_dict, scaler, group_join)\n        else:\n            executor.train_one_epoc(model, optimizer, scheduler, train_data_loader, cv_data_loader, writer, info_dict, scaler, group_join, ref_model=ref_model)\n        dist.destroy_process_group(group_join)\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "cosyvoice/cli/__init__.py",
    "content": ""
  },
  {
    "path": "cosyvoice/cli/cosyvoice.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu)\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.\nimport os\nimport time\nfrom typing import Generator\nfrom tqdm import tqdm\nfrom hyperpyyaml import load_hyperpyyaml\nfrom modelscope import snapshot_download\nimport torch\nfrom cosyvoice.cli.frontend import CosyVoiceFrontEnd\nfrom cosyvoice.cli.model import CosyVoiceModel, CosyVoice2Model, CosyVoice3Model\nfrom cosyvoice.utils.file_utils import logging\nfrom cosyvoice.utils.class_utils import get_model_type\n\n\nclass CosyVoice:\n\n    def __init__(self, model_dir, load_jit=False, load_trt=False, fp16=False, trt_concurrent=1):\n        self.model_dir = model_dir\n        self.fp16 = fp16\n        if not os.path.exists(model_dir):\n            model_dir = snapshot_download(model_dir)\n        hyper_yaml_path = '{}/cosyvoice.yaml'.format(model_dir)\n        if not os.path.exists(hyper_yaml_path):\n            raise ValueError('{} not found!'.format(hyper_yaml_path))\n        with open(hyper_yaml_path, 'r') as f:\n            configs = load_hyperpyyaml(f)\n        assert get_model_type(configs) == CosyVoiceModel, 'do not use {} for CosyVoice initialization!'.format(model_dir)\n        self.frontend = CosyVoiceFrontEnd(configs['get_tokenizer'],\n                                          configs['feat_extractor'],\n                                          '{}/campplus.onnx'.format(model_dir),\n                                          '{}/speech_tokenizer_v1.onnx'.format(model_dir),\n                                          '{}/spk2info.pt'.format(model_dir),\n                                          configs['allowed_special'])\n        self.sample_rate = configs['sample_rate']\n        if torch.cuda.is_available() is False and (load_jit is True or load_trt is True or fp16 is True):\n            load_jit, load_trt, fp16 = False, False, False\n            logging.warning('no cuda device, set load_jit/load_trt/fp16 to False')\n        self.model = CosyVoiceModel(configs['llm'], configs['flow'], configs['hift'], fp16)\n        self.model.load('{}/llm.pt'.format(model_dir),\n                        '{}/flow.pt'.format(model_dir),\n                        '{}/hift.pt'.format(model_dir))\n        if load_jit:\n            self.model.load_jit('{}/llm.text_encoder.{}.zip'.format(model_dir, 'fp16' if self.fp16 is True else 'fp32'),\n                                '{}/llm.llm.{}.zip'.format(model_dir, 'fp16' if self.fp16 is True else 'fp32'),\n                                '{}/flow.encoder.{}.zip'.format(model_dir, 'fp16' if self.fp16 is True else 'fp32'))\n        if load_trt:\n            self.model.load_trt('{}/flow.decoder.estimator.{}.mygpu.plan'.format(model_dir, 'fp16' if self.fp16 is True else 'fp32'),\n                                '{}/flow.decoder.estimator.fp32.onnx'.format(model_dir),\n                                trt_concurrent,\n                                self.fp16)\n        del configs\n\n    def list_available_spks(self):\n        spks = list(self.frontend.spk2info.keys())\n        return spks\n\n    def add_zero_shot_spk(self, prompt_text, prompt_wav, zero_shot_spk_id):\n        assert zero_shot_spk_id != '', 'do not use empty zero_shot_spk_id'\n        model_input = self.frontend.frontend_zero_shot('', prompt_text, prompt_wav, self.sample_rate, '')\n        del model_input['text']\n        del model_input['text_len']\n        self.frontend.spk2info[zero_shot_spk_id] = model_input\n        return True\n\n    def save_spkinfo(self):\n        torch.save(self.frontend.spk2info, '{}/spk2info.pt'.format(self.model_dir))\n\n    def inference_sft(self, tts_text, spk_id, stream=False, speed=1.0, text_frontend=True):\n        for i in tqdm(self.frontend.text_normalize(tts_text, split=True, text_frontend=text_frontend)):\n            model_input = self.frontend.frontend_sft(i, spk_id)\n            start_time = time.time()\n            logging.info('synthesis text {}'.format(i))\n            for model_output in self.model.tts(**model_input, stream=stream, speed=speed):\n                speech_len = model_output['tts_speech'].shape[1] / self.sample_rate\n                logging.info('yield speech len {}, rtf {}'.format(speech_len, (time.time() - start_time) / speech_len))\n                yield model_output\n                start_time = time.time()\n\n    def inference_zero_shot(self, tts_text, prompt_text, prompt_wav, zero_shot_spk_id='', stream=False, speed=1.0, text_frontend=True):\n        prompt_text = self.frontend.text_normalize(prompt_text, split=False, text_frontend=text_frontend)\n        for i in tqdm(self.frontend.text_normalize(tts_text, split=True, text_frontend=text_frontend)):\n            if (not isinstance(i, Generator)) and len(i) < 0.5 * len(prompt_text):\n                logging.warning('synthesis text {} too short than prompt text {}, this may lead to bad performance'.format(i, prompt_text))\n            model_input = self.frontend.frontend_zero_shot(i, prompt_text, prompt_wav, self.sample_rate, zero_shot_spk_id)\n            start_time = time.time()\n            logging.info('synthesis text {}'.format(i))\n            for model_output in self.model.tts(**model_input, stream=stream, speed=speed):\n                speech_len = model_output['tts_speech'].shape[1] / self.sample_rate\n                logging.info('yield speech len {}, rtf {}'.format(speech_len, (time.time() - start_time) / speech_len))\n                yield model_output\n                start_time = time.time()\n\n    def inference_cross_lingual(self, tts_text, prompt_wav, zero_shot_spk_id='', stream=False, speed=1.0, text_frontend=True):\n        for i in tqdm(self.frontend.text_normalize(tts_text, split=True, text_frontend=text_frontend)):\n            model_input = self.frontend.frontend_cross_lingual(i, prompt_wav, self.sample_rate, zero_shot_spk_id)\n            start_time = time.time()\n            logging.info('synthesis text {}'.format(i))\n            for model_output in self.model.tts(**model_input, stream=stream, speed=speed):\n                speech_len = model_output['tts_speech'].shape[1] / self.sample_rate\n                logging.info('yield speech len {}, rtf {}'.format(speech_len, (time.time() - start_time) / speech_len))\n                yield model_output\n                start_time = time.time()\n\n    def inference_instruct(self, tts_text, spk_id, instruct_text, stream=False, speed=1.0, text_frontend=True):\n        assert self.__class__.__name__ == 'CosyVoice', 'inference_instruct is only implemented for CosyVoice!'\n        instruct_text = self.frontend.text_normalize(instruct_text, split=False, text_frontend=text_frontend)\n        for i in tqdm(self.frontend.text_normalize(tts_text, split=True, text_frontend=text_frontend)):\n            model_input = self.frontend.frontend_instruct(i, spk_id, instruct_text)\n            start_time = time.time()\n            logging.info('synthesis text {}'.format(i))\n            for model_output in self.model.tts(**model_input, stream=stream, speed=speed):\n                speech_len = model_output['tts_speech'].shape[1] / self.sample_rate\n                logging.info('yield speech len {}, rtf {}'.format(speech_len, (time.time() - start_time) / speech_len))\n                yield model_output\n                start_time = time.time()\n\n    def inference_vc(self, source_wav, prompt_wav, stream=False, speed=1.0):\n        model_input = self.frontend.frontend_vc(source_wav, prompt_wav, self.sample_rate)\n        start_time = time.time()\n        for model_output in self.model.tts(**model_input, stream=stream, speed=speed):\n            speech_len = model_output['tts_speech'].shape[1] / self.sample_rate\n            logging.info('yield speech len {}, rtf {}'.format(speech_len, (time.time() - start_time) / speech_len))\n            yield model_output\n            start_time = time.time()\n\n\nclass CosyVoice2(CosyVoice):\n\n    def __init__(self, model_dir, load_jit=False, load_trt=False, load_vllm=False, fp16=False, trt_concurrent=1):\n        self.model_dir = model_dir\n        self.fp16 = fp16\n        if not os.path.exists(model_dir):\n            model_dir = snapshot_download(model_dir)\n        hyper_yaml_path = '{}/cosyvoice2.yaml'.format(model_dir)\n        if not os.path.exists(hyper_yaml_path):\n            raise ValueError('{} not found!'.format(hyper_yaml_path))\n        with open(hyper_yaml_path, 'r') as f:\n            configs = load_hyperpyyaml(f, overrides={'qwen_pretrain_path': os.path.join(model_dir, 'CosyVoice-BlankEN')})\n        assert get_model_type(configs) == CosyVoice2Model, 'do not use {} for CosyVoice2 initialization!'.format(model_dir)\n        self.frontend = CosyVoiceFrontEnd(configs['get_tokenizer'],\n                                          configs['feat_extractor'],\n                                          '{}/campplus.onnx'.format(model_dir),\n                                          '{}/speech_tokenizer_v2.onnx'.format(model_dir),\n                                          '{}/spk2info.pt'.format(model_dir),\n                                          configs['allowed_special'])\n        self.sample_rate = configs['sample_rate']\n        if torch.cuda.is_available() is False and (load_jit is True or load_trt is True or load_vllm is True or fp16 is True):\n            load_jit, load_trt, load_vllm, fp16 = False, False, False, False\n            logging.warning('no cuda device, set load_jit/load_trt/load_vllm/fp16 to False')\n        self.model = CosyVoice2Model(configs['llm'], configs['flow'], configs['hift'], fp16)\n        self.model.load('{}/llm.pt'.format(model_dir),\n                        '{}/flow.pt'.format(model_dir),\n                        '{}/hift.pt'.format(model_dir))\n        if load_vllm:\n            self.model.load_vllm('{}/vllm'.format(model_dir))\n        if load_jit:\n            self.model.load_jit('{}/flow.encoder.{}.zip'.format(model_dir, 'fp16' if self.fp16 is True else 'fp32'))\n        if load_trt:\n            self.model.load_trt('{}/flow.decoder.estimator.{}.mygpu.plan'.format(model_dir, 'fp16' if self.fp16 is True else 'fp32'),\n                                '{}/flow.decoder.estimator.fp32.onnx'.format(model_dir),\n                                trt_concurrent,\n                                self.fp16)\n        del configs\n\n    def inference_instruct2(self, tts_text, instruct_text, prompt_wav, zero_shot_spk_id='', stream=False, speed=1.0, text_frontend=True):\n        for i in tqdm(self.frontend.text_normalize(tts_text, split=True, text_frontend=text_frontend)):\n            model_input = self.frontend.frontend_instruct2(i, instruct_text, prompt_wav, self.sample_rate, zero_shot_spk_id)\n            start_time = time.time()\n            logging.info('synthesis text {}'.format(i))\n            for model_output in self.model.tts(**model_input, stream=stream, speed=speed):\n                speech_len = model_output['tts_speech'].shape[1] / self.sample_rate\n                logging.info('yield speech len {}, rtf {}'.format(speech_len, (time.time() - start_time) / speech_len))\n                yield model_output\n                start_time = time.time()\n\n\nclass CosyVoice3(CosyVoice2):\n\n    def __init__(self, model_dir, load_trt=False, load_vllm=False, fp16=False, trt_concurrent=1):\n        self.model_dir = model_dir\n        self.fp16 = fp16\n        if not os.path.exists(model_dir):\n            model_dir = snapshot_download(model_dir)\n        hyper_yaml_path = '{}/cosyvoice3.yaml'.format(model_dir)\n        if not os.path.exists(hyper_yaml_path):\n            raise ValueError('{} not found!'.format(hyper_yaml_path))\n        with open(hyper_yaml_path, 'r') as f:\n            configs = load_hyperpyyaml(f, overrides={'qwen_pretrain_path': os.path.join(model_dir, 'CosyVoice-BlankEN')})\n        assert get_model_type(configs) == CosyVoice3Model, 'do not use {} for CosyVoice3 initialization!'.format(model_dir)\n        self.frontend = CosyVoiceFrontEnd(configs['get_tokenizer'],\n                                          configs['feat_extractor'],\n                                          '{}/campplus.onnx'.format(model_dir),\n                                          '{}/speech_tokenizer_v3.onnx'.format(model_dir),\n                                          '{}/spk2info.pt'.format(model_dir),\n                                          configs['allowed_special'])\n        self.sample_rate = configs['sample_rate']\n        if torch.cuda.is_available() is False and (load_trt is True or fp16 is True):\n            load_trt, fp16 = False, False\n            logging.warning('no cuda device, set load_trt/fp16 to False')\n        self.model = CosyVoice3Model(configs['llm'], configs['flow'], configs['hift'], fp16)\n        self.model.load('{}/llm.pt'.format(model_dir),\n                        '{}/flow.pt'.format(model_dir),\n                        '{}/hift.pt'.format(model_dir))\n        if load_vllm:\n            self.model.load_vllm('{}/vllm'.format(model_dir))\n        if load_trt:\n            if self.fp16 is True:\n                logging.warning('DiT tensorRT fp16 engine have some performance issue, use at caution!')\n            self.model.load_trt('{}/flow.decoder.estimator.{}.mygpu.plan'.format(model_dir, 'fp16' if self.fp16 is True else 'fp32'),\n                                '{}/flow.decoder.estimator.fp32.onnx'.format(model_dir),\n                                trt_concurrent,\n                                self.fp16)\n        del configs\n\n\ndef AutoModel(**kwargs):\n    if not os.path.exists(kwargs['model_dir']):\n        kwargs['model_dir'] = snapshot_download(kwargs['model_dir'])\n    if os.path.exists('{}/cosyvoice.yaml'.format(kwargs['model_dir'])):\n        return CosyVoice(**kwargs)\n    elif os.path.exists('{}/cosyvoice2.yaml'.format(kwargs['model_dir'])):\n        return CosyVoice2(**kwargs)\n    elif os.path.exists('{}/cosyvoice3.yaml'.format(kwargs['model_dir'])):\n        return CosyVoice3(**kwargs)\n    else:\n        raise TypeError('No valid model type found!')\n"
  },
  {
    "path": "cosyvoice/cli/frontend.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu)\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.\nfrom functools import partial\nfrom typing import Generator\nimport json\nimport onnxruntime\nimport torch\nimport numpy as np\nimport whisper\nfrom typing import Callable\nimport torchaudio.compliance.kaldi as kaldi\nimport os\nimport re\nimport inflect\nfrom cosyvoice.utils.file_utils import logging, load_wav\nfrom cosyvoice.utils.frontend_utils import contains_chinese, replace_blank, replace_corner_mark, remove_bracket, spell_out_number, split_paragraph, is_only_punctuation\n\n\nclass CosyVoiceFrontEnd:\n\n    def __init__(self,\n                 get_tokenizer: Callable,\n                 feat_extractor: Callable,\n                 campplus_model: str,\n                 speech_tokenizer_model: str,\n                 spk2info: str = '',\n                 allowed_special: str = 'all'):\n        self.tokenizer = get_tokenizer()\n        self.feat_extractor = feat_extractor\n        self.device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n        option = onnxruntime.SessionOptions()\n        option.graph_optimization_level = onnxruntime.GraphOptimizationLevel.ORT_ENABLE_ALL\n        option.intra_op_num_threads = 1\n        self.campplus_session = onnxruntime.InferenceSession(campplus_model, sess_options=option, providers=[\"CPUExecutionProvider\"])\n        self.speech_tokenizer_session = onnxruntime.InferenceSession(speech_tokenizer_model, sess_options=option,\n                                                                     providers=[\"CUDAExecutionProvider\" if torch.cuda.is_available() else\n                                                                                \"CPUExecutionProvider\"])\n        if os.path.exists(spk2info):\n            self.spk2info = torch.load(spk2info, map_location=self.device, weights_only=True)\n        else:\n            self.spk2info = {}\n        self.allowed_special = allowed_special\n        self.inflect_parser = inflect.engine()\n        # NOTE compatible when no text frontend tool is avaliable\n        try:\n            import ttsfrd\n            self.frd = ttsfrd.TtsFrontendEngine()\n            ROOT_DIR = os.path.dirname(os.path.abspath(__file__))\n            assert self.frd.initialize('{}/../../pretrained_models/CosyVoice-ttsfrd/resource'.format(ROOT_DIR)) is True, \\\n                'failed to initialize ttsfrd resource'\n            self.frd.set_lang_type('pinyinvg')\n            self.text_frontend = 'ttsfrd'\n            logging.info('use ttsfrd frontend')\n        except:\n            try:\n                from wetext import Normalizer as ZhNormalizer\n                from wetext import Normalizer as EnNormalizer\n                self.zh_tn_model = ZhNormalizer(remove_erhua=False)\n                self.en_tn_model = EnNormalizer()\n                self.text_frontend = 'wetext'\n                logging.info('use wetext frontend')\n            except:\n                self.text_frontend = ''\n                logging.info('no frontend is avaliable')\n\n\n    def _extract_text_token(self, text):\n        if isinstance(text, Generator):\n            logging.info('get tts_text generator, will return _extract_text_token_generator!')\n            # NOTE add a dummy text_token_len for compatibility\n            return self._extract_text_token_generator(text), torch.tensor([0], dtype=torch.int32).to(self.device)\n        else:\n            text_token = self.tokenizer.encode(text, allowed_special=self.allowed_special)\n            text_token = torch.tensor([text_token], dtype=torch.int32).to(self.device)\n            text_token_len = torch.tensor([text_token.shape[1]], dtype=torch.int32).to(self.device)\n            return text_token, text_token_len\n\n    def _extract_text_token_generator(self, text_generator):\n        for text in text_generator:\n            text_token, _ = self._extract_text_token(text)\n            for i in range(text_token.shape[1]):\n                yield text_token[:, i: i + 1]\n\n    def _extract_speech_token(self, prompt_wav):\n        speech = load_wav(prompt_wav, 16000)\n        assert speech.shape[1] / 16000 <= 30, 'do not support extract speech token for audio longer than 30s'\n        feat = whisper.log_mel_spectrogram(speech, n_mels=128)\n        speech_token = self.speech_tokenizer_session.run(None,\n                                                         {self.speech_tokenizer_session.get_inputs()[0].name:\n                                                          feat.detach().cpu().numpy(),\n                                                          self.speech_tokenizer_session.get_inputs()[1].name:\n                                                          np.array([feat.shape[2]], dtype=np.int32)})[0].flatten().tolist()\n        speech_token = torch.tensor([speech_token], dtype=torch.int32).to(self.device)\n        speech_token_len = torch.tensor([speech_token.shape[1]], dtype=torch.int32).to(self.device)\n        return speech_token, speech_token_len\n\n    def _extract_spk_embedding(self, prompt_wav):\n        speech = load_wav(prompt_wav, 16000)\n        feat = kaldi.fbank(speech,\n                           num_mel_bins=80,\n                           dither=0,\n                           sample_frequency=16000)\n        feat = feat - feat.mean(dim=0, keepdim=True)\n        embedding = self.campplus_session.run(None,\n                                              {self.campplus_session.get_inputs()[0].name: feat.unsqueeze(dim=0).cpu().numpy()})[0].flatten().tolist()\n        embedding = torch.tensor([embedding]).to(self.device)\n        return embedding\n\n    def _extract_speech_feat(self, prompt_wav):\n        speech = load_wav(prompt_wav, 24000)\n        speech_feat = self.feat_extractor(speech).squeeze(dim=0).transpose(0, 1).to(self.device)\n        speech_feat = speech_feat.unsqueeze(dim=0)\n        speech_feat_len = torch.tensor([speech_feat.shape[1]], dtype=torch.int32).to(self.device)\n        return speech_feat, speech_feat_len\n\n    def text_normalize(self, text, split=True, text_frontend=True):\n        if isinstance(text, Generator):\n            logging.info('get tts_text generator, will skip text_normalize!')\n            return [text]\n        # NOTE skip text_frontend when ssml symbol in text\n        if '<|' in text and '|>' in text:\n            text_frontend = False\n        if text_frontend is False or text == '':\n            return [text] if split is True else text\n        text = text.strip()\n        if self.text_frontend == 'ttsfrd':\n            texts = [i[\"text\"] for i in json.loads(self.frd.do_voicegen_frd(text))[\"sentences\"]]\n            text = ''.join(texts)\n        else:\n            if contains_chinese(text):\n                if self.text_frontend == 'wetext':\n                    text = self.zh_tn_model.normalize(text)\n                text = text.replace(\"\\n\", \"\")\n                text = replace_blank(text)\n                text = replace_corner_mark(text)\n                text = text.replace(\".\", \"。\")\n                text = text.replace(\" - \", \"，\")\n                text = remove_bracket(text)\n                text = re.sub(r'[，,、]+$', '。', text)\n                texts = list(split_paragraph(text, partial(self.tokenizer.encode, allowed_special=self.allowed_special), \"zh\", token_max_n=80,\n                                             token_min_n=60, merge_len=20, comma_split=False))\n            else:\n                if self.text_frontend == 'wetext':\n                    text = self.en_tn_model.normalize(text)\n                text = spell_out_number(text, self.inflect_parser)\n                texts = list(split_paragraph(text, partial(self.tokenizer.encode, allowed_special=self.allowed_special), \"en\", token_max_n=80,\n                                             token_min_n=60, merge_len=20, comma_split=False))\n        texts = [i for i in texts if not is_only_punctuation(i)]\n        return texts if split is True else text\n\n    def frontend_sft(self, tts_text, spk_id):\n        tts_text_token, tts_text_token_len = self._extract_text_token(tts_text)\n        embedding = self.spk2info[spk_id]['embedding']\n        model_input = {'text': tts_text_token, 'text_len': tts_text_token_len, 'llm_embedding': embedding, 'flow_embedding': embedding}\n        return model_input\n\n    def frontend_zero_shot(self, tts_text, prompt_text, prompt_wav, resample_rate, zero_shot_spk_id):\n        tts_text_token, tts_text_token_len = self._extract_text_token(tts_text)\n        if zero_shot_spk_id == '':\n            prompt_text_token, prompt_text_token_len = self._extract_text_token(prompt_text)\n            speech_feat, speech_feat_len = self._extract_speech_feat(prompt_wav)\n            speech_token, speech_token_len = self._extract_speech_token(prompt_wav)\n            if resample_rate == 24000:\n                # cosyvoice2, force speech_feat % speech_token = 2\n                token_len = min(int(speech_feat.shape[1] / 2), speech_token.shape[1])\n                speech_feat, speech_feat_len[:] = speech_feat[:, :2 * token_len], 2 * token_len\n                speech_token, speech_token_len[:] = speech_token[:, :token_len], token_len\n            embedding = self._extract_spk_embedding(prompt_wav)\n            model_input = {'prompt_text': prompt_text_token, 'prompt_text_len': prompt_text_token_len,\n                           'llm_prompt_speech_token': speech_token, 'llm_prompt_speech_token_len': speech_token_len,\n                           'flow_prompt_speech_token': speech_token, 'flow_prompt_speech_token_len': speech_token_len,\n                           'prompt_speech_feat': speech_feat, 'prompt_speech_feat_len': speech_feat_len,\n                           'llm_embedding': embedding, 'flow_embedding': embedding}\n        else:\n            model_input = {**self.spk2info[zero_shot_spk_id]}\n        model_input['text'] = tts_text_token\n        model_input['text_len'] = tts_text_token_len\n        return model_input\n\n    def frontend_cross_lingual(self, tts_text, prompt_wav, resample_rate, zero_shot_spk_id):\n        model_input = self.frontend_zero_shot(tts_text, '', prompt_wav, resample_rate, zero_shot_spk_id)\n        # in cross lingual mode, we remove prompt in llm\n        del model_input['prompt_text']\n        del model_input['prompt_text_len']\n        del model_input['llm_prompt_speech_token']\n        del model_input['llm_prompt_speech_token_len']\n        return model_input\n\n    def frontend_instruct(self, tts_text, spk_id, instruct_text):\n        model_input = self.frontend_sft(tts_text, spk_id)\n        # in instruct mode, we remove spk_embedding in llm due to information leakage\n        del model_input['llm_embedding']\n        instruct_text_token, instruct_text_token_len = self._extract_text_token(instruct_text)\n        model_input['prompt_text'] = instruct_text_token\n        model_input['prompt_text_len'] = instruct_text_token_len\n        return model_input\n\n    def frontend_instruct2(self, tts_text, instruct_text, prompt_wav, resample_rate, zero_shot_spk_id):\n        model_input = self.frontend_zero_shot(tts_text, instruct_text, prompt_wav, resample_rate, zero_shot_spk_id)\n        del model_input['llm_prompt_speech_token']\n        del model_input['llm_prompt_speech_token_len']\n        return model_input\n\n    def frontend_vc(self, source_speech_16k, prompt_wav, resample_rate):\n        prompt_speech_token, prompt_speech_token_len = self._extract_speech_token(prompt_wav)\n        prompt_speech_feat, prompt_speech_feat_len = self._extract_speech_feat(prompt_wav)\n        embedding = self._extract_spk_embedding(prompt_wav)\n        source_speech_token, source_speech_token_len = self._extract_speech_token(source_speech_16k)\n        model_input = {'source_speech_token': source_speech_token, 'source_speech_token_len': source_speech_token_len,\n                       'flow_prompt_speech_token': prompt_speech_token, 'flow_prompt_speech_token_len': prompt_speech_token_len,\n                       'prompt_speech_feat': prompt_speech_feat, 'prompt_speech_feat_len': prompt_speech_feat_len,\n                       'flow_embedding': embedding}\n        return model_input\n"
  },
  {
    "path": "cosyvoice/cli/model.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu)\n#               2025 Alibaba Inc (authors: Xiang Lyu, Bofan Zhou)\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.\nimport os\nfrom typing import Generator\nimport torch\nimport numpy as np\nimport threading\nimport time\nfrom torch.nn import functional as F\nfrom contextlib import nullcontext\nimport uuid\nfrom cosyvoice.utils.common import fade_in_out\nfrom cosyvoice.utils.file_utils import convert_onnx_to_trt, export_cosyvoice2_vllm\nfrom cosyvoice.utils.common import TrtContextWrapper\n\n\nclass CosyVoiceModel:\n\n    def __init__(self,\n                 llm: torch.nn.Module,\n                 flow: torch.nn.Module,\n                 hift: torch.nn.Module,\n                 fp16: bool = False):\n        self.device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n        self.llm = llm\n        self.flow = flow\n        self.hift = hift\n        self.fp16 = fp16\n        self.token_min_hop_len = 2 * self.flow.input_frame_rate\n        self.token_max_hop_len = 4 * self.flow.input_frame_rate\n        self.token_overlap_len = 20\n        # mel fade in out\n        self.mel_overlap_len = int(self.token_overlap_len / self.flow.input_frame_rate * 22050 / 256)\n        self.mel_window = np.hamming(2 * self.mel_overlap_len)\n        # hift cache\n        self.mel_cache_len = 20\n        self.source_cache_len = int(self.mel_cache_len * 256)\n        # speech fade in out\n        self.speech_window = np.hamming(2 * self.source_cache_len)\n        # rtf and decoding related\n        self.stream_scale_factor = 1\n        assert self.stream_scale_factor >= 1, 'stream_scale_factor should be greater than 1, change it according to your actual rtf'\n        self.llm_context = torch.cuda.stream(torch.cuda.Stream(self.device)) if torch.cuda.is_available() else nullcontext()\n        self.lock = threading.Lock()\n        # dict used to store session related variable\n        self.tts_speech_token_dict = {}\n        self.llm_end_dict = {}\n        self.mel_overlap_dict = {}\n        self.flow_cache_dict = {}\n        self.hift_cache_dict = {}\n        self.silent_tokens = []\n\n    def load(self, llm_model, flow_model, hift_model):\n        self.llm.load_state_dict(torch.load(llm_model, map_location=self.device, weights_only=True), strict=True)\n        self.llm.to(self.device).eval()\n        self.flow.load_state_dict(torch.load(flow_model, map_location=self.device, weights_only=True), strict=True)\n        self.flow.to(self.device).eval()\n        # in case hift_model is a hifigan model\n        hift_state_dict = {k.replace('generator.', ''): v for k, v in torch.load(hift_model, map_location=self.device, weights_only=True).items()}\n        self.hift.load_state_dict(hift_state_dict, strict=True)\n        self.hift.to(self.device).eval()\n\n    def load_jit(self, llm_text_encoder_model, llm_llm_model, flow_encoder_model):\n        llm_text_encoder = torch.jit.load(llm_text_encoder_model, map_location=self.device)\n        self.llm.text_encoder = llm_text_encoder\n        llm_llm = torch.jit.load(llm_llm_model, map_location=self.device)\n        self.llm.llm = llm_llm\n        flow_encoder = torch.jit.load(flow_encoder_model, map_location=self.device)\n        self.flow.encoder = flow_encoder\n\n    def load_trt(self, flow_decoder_estimator_model, flow_decoder_onnx_model, trt_concurrent, fp16):\n        assert torch.cuda.is_available(), 'tensorrt only supports gpu!'\n        if not os.path.exists(flow_decoder_estimator_model) or os.path.getsize(flow_decoder_estimator_model) == 0:\n            convert_onnx_to_trt(flow_decoder_estimator_model, self.get_trt_kwargs(), flow_decoder_onnx_model, fp16)\n        del self.flow.decoder.estimator\n        import tensorrt as trt\n        with open(flow_decoder_estimator_model, 'rb') as f:\n            estimator_engine = trt.Runtime(trt.Logger(trt.Logger.INFO)).deserialize_cuda_engine(f.read())\n        assert estimator_engine is not None, 'failed to load trt {}'.format(flow_decoder_estimator_model)\n        self.flow.decoder.estimator = TrtContextWrapper(estimator_engine, trt_concurrent=trt_concurrent, device=self.device)\n\n    def get_trt_kwargs(self):\n        min_shape = [(2, 80, 4), (2, 1, 4), (2, 80, 4), (2, 80, 4)]\n        opt_shape = [(2, 80, 500), (2, 1, 500), (2, 80, 500), (2, 80, 500)]\n        max_shape = [(2, 80, 3000), (2, 1, 3000), (2, 80, 3000), (2, 80, 3000)]\n        input_names = [\"x\", \"mask\", \"mu\", \"cond\"]\n        return {'min_shape': min_shape, 'opt_shape': opt_shape, 'max_shape': max_shape, 'input_names': input_names}\n\n    def llm_job(self, text, prompt_text, llm_prompt_speech_token, llm_embedding, uuid):\n        cur_silent_token_num, max_silent_token_num = 0, 5\n        with self.llm_context, torch.cuda.amp.autocast(self.fp16 is True and hasattr(self.llm, 'vllm') is False):\n            if isinstance(text, Generator):\n                assert (self.__class__.__name__ != 'CosyVoiceModel') and not hasattr(self.llm, 'vllm'), 'streaming input text is only implemented for CosyVoice2/3 and do not support vllm!'\n                token_generator = self.llm.inference_bistream(text=text,\n                                                              prompt_text=prompt_text.to(self.device),\n                                                              prompt_text_len=torch.tensor([prompt_text.shape[1]], dtype=torch.int32).to(self.device),\n                                                              prompt_speech_token=llm_prompt_speech_token.to(self.device),\n                                                              prompt_speech_token_len=torch.tensor([llm_prompt_speech_token.shape[1]], dtype=torch.int32).to(self.device),\n                                                              embedding=llm_embedding.to(self.device))\n            else:\n                token_generator = self.llm.inference(text=text.to(self.device),\n                                                     text_len=torch.tensor([text.shape[1]], dtype=torch.int32).to(self.device),\n                                                     prompt_text=prompt_text.to(self.device),\n                                                     prompt_text_len=torch.tensor([prompt_text.shape[1]], dtype=torch.int32).to(self.device),\n                                                     prompt_speech_token=llm_prompt_speech_token.to(self.device),\n                                                     prompt_speech_token_len=torch.tensor([llm_prompt_speech_token.shape[1]], dtype=torch.int32).to(self.device),\n                                                     embedding=llm_embedding.to(self.device),\n                                                     uuid=uuid)\n            for i in token_generator:\n                if i in self.silent_tokens:\n                    cur_silent_token_num += 1\n                    if cur_silent_token_num > max_silent_token_num:\n                        continue\n                else:\n                    cur_silent_token_num = 0\n                self.tts_speech_token_dict[uuid].append(i)\n        self.llm_end_dict[uuid] = True\n\n    def vc_job(self, source_speech_token, uuid):\n        self.tts_speech_token_dict[uuid] = source_speech_token.flatten().tolist()\n        self.llm_end_dict[uuid] = True\n\n    def token2wav(self, token, prompt_token, prompt_feat, embedding, uuid, finalize=False, speed=1.0):\n        with torch.cuda.amp.autocast(self.fp16):\n            tts_mel, self.flow_cache_dict[uuid] = self.flow.inference(token=token.to(self.device, dtype=torch.int32),\n                                                                      token_len=torch.tensor([token.shape[1]], dtype=torch.int32).to(self.device),\n                                                                      prompt_token=prompt_token.to(self.device),\n                                                                      prompt_token_len=torch.tensor([prompt_token.shape[1]], dtype=torch.int32).to(self.device),\n                                                                      prompt_feat=prompt_feat.to(self.device),\n                                                                      prompt_feat_len=torch.tensor([prompt_feat.shape[1]], dtype=torch.int32).to(self.device),\n                                                                      embedding=embedding.to(self.device),\n                                                                      flow_cache=self.flow_cache_dict[uuid])\n\n        # mel overlap fade in out\n        if self.mel_overlap_dict[uuid].shape[2] != 0:\n            tts_mel = fade_in_out(tts_mel, self.mel_overlap_dict[uuid], self.mel_window)\n        # append hift cache\n        if self.hift_cache_dict[uuid] is not None:\n            hift_cache_mel, hift_cache_source = self.hift_cache_dict[uuid]['mel'], self.hift_cache_dict[uuid]['source']\n            tts_mel = torch.concat([hift_cache_mel, tts_mel], dim=2)\n        else:\n            hift_cache_source = torch.zeros(1, 1, 0)\n        # keep overlap mel and hift cache\n        if finalize is False:\n            self.mel_overlap_dict[uuid] = tts_mel[:, :, -self.mel_overlap_len:]\n            tts_mel = tts_mel[:, :, :-self.mel_overlap_len]\n            tts_speech, tts_source = self.hift.inference(speech_feat=tts_mel, cache_source=hift_cache_source)\n            if self.hift_cache_dict[uuid] is not None:\n                tts_speech = fade_in_out(tts_speech, self.hift_cache_dict[uuid]['speech'], self.speech_window)\n            self.hift_cache_dict[uuid] = {'mel': tts_mel[:, :, -self.mel_cache_len:],\n                                          'source': tts_source[:, :, -self.source_cache_len:],\n                                          'speech': tts_speech[:, -self.source_cache_len:]}\n            tts_speech = tts_speech[:, :-self.source_cache_len]\n        else:\n            if speed != 1.0:\n                assert self.hift_cache_dict[uuid] is None, 'speed change only support non-stream inference mode'\n                tts_mel = F.interpolate(tts_mel, size=int(tts_mel.shape[2] / speed), mode='linear')\n            tts_speech, tts_source = self.hift.inference(speech_feat=tts_mel, cache_source=hift_cache_source)\n            if self.hift_cache_dict[uuid] is not None:\n                tts_speech = fade_in_out(tts_speech, self.hift_cache_dict[uuid]['speech'], self.speech_window)\n        return tts_speech\n\n    def tts(self, text=torch.zeros(1, 0, dtype=torch.int32), flow_embedding=torch.zeros(0, 192), llm_embedding=torch.zeros(0, 192),\n            prompt_text=torch.zeros(1, 0, dtype=torch.int32),\n            llm_prompt_speech_token=torch.zeros(1, 0, dtype=torch.int32),\n            flow_prompt_speech_token=torch.zeros(1, 0, dtype=torch.int32),\n            prompt_speech_feat=torch.zeros(1, 0, 80), source_speech_token=torch.zeros(1, 0, dtype=torch.int32), stream=False, speed=1.0, **kwargs):\n        # this_uuid is used to track variables related to this inference thread\n        this_uuid = str(uuid.uuid1())\n        with self.lock:\n            self.tts_speech_token_dict[this_uuid], self.llm_end_dict[this_uuid] = [], False\n            self.hift_cache_dict[this_uuid] = None\n            self.mel_overlap_dict[this_uuid] = torch.zeros(1, 80, 0)\n            self.flow_cache_dict[this_uuid] = torch.zeros(1, 80, 0, 2)\n        if source_speech_token.shape[1] == 0:\n            p = threading.Thread(target=self.llm_job, args=(text, prompt_text, llm_prompt_speech_token, llm_embedding, this_uuid))\n        else:\n            p = threading.Thread(target=self.vc_job, args=(source_speech_token, this_uuid))\n        p.start()\n        if stream is True:\n            token_hop_len = self.token_min_hop_len\n            while True:\n                time.sleep(0.1)\n                if len(self.tts_speech_token_dict[this_uuid]) >= token_hop_len + self.token_overlap_len:\n                    this_tts_speech_token = torch.tensor(self.tts_speech_token_dict[this_uuid][:token_hop_len + self.token_overlap_len]) \\\n                        .unsqueeze(dim=0)\n                    this_tts_speech = self.token2wav(token=this_tts_speech_token,\n                                                     prompt_token=flow_prompt_speech_token,\n                                                     prompt_feat=prompt_speech_feat,\n                                                     embedding=flow_embedding,\n                                                     uuid=this_uuid,\n                                                     finalize=False)\n                    yield {'tts_speech': this_tts_speech.cpu()}\n                    with self.lock:\n                        self.tts_speech_token_dict[this_uuid] = self.tts_speech_token_dict[this_uuid][token_hop_len:]\n                    # increase token_hop_len for better speech quality\n                    token_hop_len = min(self.token_max_hop_len, int(token_hop_len * self.stream_scale_factor))\n                if self.llm_end_dict[this_uuid] is True and len(self.tts_speech_token_dict[this_uuid]) < token_hop_len + self.token_overlap_len:\n                    break\n            p.join()\n            # deal with remain tokens, make sure inference remain token len equals token_hop_len when cache_speech is not None\n            this_tts_speech_token = torch.tensor(self.tts_speech_token_dict[this_uuid]).unsqueeze(dim=0)\n            this_tts_speech = self.token2wav(token=this_tts_speech_token,\n                                             prompt_token=flow_prompt_speech_token,\n                                             prompt_feat=prompt_speech_feat,\n                                             embedding=flow_embedding,\n                                             uuid=this_uuid,\n                                             finalize=True)\n            yield {'tts_speech': this_tts_speech.cpu()}\n        else:\n            # deal with all tokens\n            p.join()\n            this_tts_speech_token = torch.tensor(self.tts_speech_token_dict[this_uuid]).unsqueeze(dim=0)\n            this_tts_speech = self.token2wav(token=this_tts_speech_token,\n                                             prompt_token=flow_prompt_speech_token,\n                                             prompt_feat=prompt_speech_feat,\n                                             embedding=flow_embedding,\n                                             uuid=this_uuid,\n                                             finalize=True,\n                                             speed=speed)\n            yield {'tts_speech': this_tts_speech.cpu()}\n        with self.lock:\n            self.tts_speech_token_dict.pop(this_uuid)\n            self.llm_end_dict.pop(this_uuid)\n            self.mel_overlap_dict.pop(this_uuid)\n            self.hift_cache_dict.pop(this_uuid)\n            self.flow_cache_dict.pop(this_uuid)\n        if torch.cuda.is_available():\n            torch.cuda.empty_cache()\n            torch.cuda.current_stream().synchronize()\n\n\nclass CosyVoice2Model(CosyVoiceModel):\n\n    def __init__(self,\n                 llm: torch.nn.Module,\n                 flow: torch.nn.Module,\n                 hift: torch.nn.Module,\n                 fp16: bool = False):\n        self.device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n        self.llm = llm\n        self.flow = flow\n        self.hift = hift\n        self.fp16 = fp16\n        # NOTE must matching training static_chunk_size\n        self.token_hop_len = 25\n        # NOTE increase token_hop_len incrementally to avoid duplicate inference\n        self.token_max_hop_len = 4 * self.token_hop_len\n        self.stream_scale_factor = 2\n        assert self.stream_scale_factor >= 1, 'stream_scale_factor should be greater than 1, change it according to your actual rtf'\n        # hift cache\n        self.mel_cache_len = 8\n        self.source_cache_len = int(self.mel_cache_len * 480)\n        # speech fade in out\n        self.speech_window = np.hamming(2 * self.source_cache_len)\n        # rtf and decoding related\n        self.llm_context = torch.cuda.stream(torch.cuda.Stream(self.device)) if torch.cuda.is_available() else nullcontext()\n        self.lock = threading.Lock()\n        # dict used to store session related variable\n        self.tts_speech_token_dict = {}\n        self.llm_end_dict = {}\n        self.hift_cache_dict = {}\n        self.silent_tokens = []\n\n    def load_jit(self, flow_encoder_model):\n        flow_encoder = torch.jit.load(flow_encoder_model, map_location=self.device)\n        self.flow.encoder = flow_encoder\n\n    def load_vllm(self, model_dir):\n        export_cosyvoice2_vllm(self.llm, model_dir, self.device)\n        from vllm import EngineArgs, LLMEngine\n        engine_args = EngineArgs(model=model_dir,\n                                 skip_tokenizer_init=True,\n                                 enable_prompt_embeds=True,\n                                 gpu_memory_utilization=0.2)\n        self.llm.vllm = LLMEngine.from_engine_args(engine_args)\n        self.llm.lock = threading.Lock()\n        del self.llm.llm.model.model.layers\n\n    def token2wav(self, token, prompt_token, prompt_feat, embedding, token_offset, uuid, stream=False, finalize=False, speed=1.0):\n        with torch.cuda.amp.autocast(self.fp16):\n            tts_mel, _ = self.flow.inference(token=token.to(self.device, dtype=torch.int32),\n                                             token_len=torch.tensor([token.shape[1]], dtype=torch.int32).to(self.device),\n                                             prompt_token=prompt_token.to(self.device),\n                                             prompt_token_len=torch.tensor([prompt_token.shape[1]], dtype=torch.int32).to(self.device),\n                                             prompt_feat=prompt_feat.to(self.device),\n                                             prompt_feat_len=torch.tensor([prompt_feat.shape[1]], dtype=torch.int32).to(self.device),\n                                             embedding=embedding.to(self.device),\n                                             streaming=stream,\n                                             finalize=finalize)\n        tts_mel = tts_mel[:, :, token_offset * self.flow.token_mel_ratio:]\n        # append hift cache\n        if self.hift_cache_dict[uuid] is not None:\n            hift_cache_mel, hift_cache_source = self.hift_cache_dict[uuid]['mel'], self.hift_cache_dict[uuid]['source']\n            tts_mel = torch.concat([hift_cache_mel, tts_mel], dim=2)\n        else:\n            hift_cache_source = torch.zeros(1, 1, 0)\n        # keep overlap mel and hift cache\n        if finalize is False:\n            tts_speech, tts_source = self.hift.inference(speech_feat=tts_mel, cache_source=hift_cache_source)\n            if self.hift_cache_dict[uuid] is not None:\n                tts_speech = fade_in_out(tts_speech, self.hift_cache_dict[uuid]['speech'], self.speech_window)\n            self.hift_cache_dict[uuid] = {'mel': tts_mel[:, :, -self.mel_cache_len:],\n                                          'source': tts_source[:, :, -self.source_cache_len:],\n                                          'speech': tts_speech[:, -self.source_cache_len:]}\n            tts_speech = tts_speech[:, :-self.source_cache_len]\n        else:\n            if speed != 1.0:\n                assert self.hift_cache_dict[uuid] is None, 'speed change only support non-stream inference mode'\n                tts_mel = F.interpolate(tts_mel, size=int(tts_mel.shape[2] / speed), mode='linear')\n            tts_speech, tts_source = self.hift.inference(speech_feat=tts_mel, cache_source=hift_cache_source)\n            if self.hift_cache_dict[uuid] is not None:\n                tts_speech = fade_in_out(tts_speech, self.hift_cache_dict[uuid]['speech'], self.speech_window)\n        return tts_speech\n\n    def tts(self, text=torch.zeros(1, 0, dtype=torch.int32), flow_embedding=torch.zeros(0, 192), llm_embedding=torch.zeros(0, 192),\n            prompt_text=torch.zeros(1, 0, dtype=torch.int32),\n            llm_prompt_speech_token=torch.zeros(1, 0, dtype=torch.int32),\n            flow_prompt_speech_token=torch.zeros(1, 0, dtype=torch.int32),\n            prompt_speech_feat=torch.zeros(1, 0, 80), source_speech_token=torch.zeros(1, 0, dtype=torch.int32), stream=False, speed=1.0, **kwargs):\n        # this_uuid is used to track variables related to this inference thread\n        this_uuid = str(uuid.uuid1())\n        with self.lock:\n            self.tts_speech_token_dict[this_uuid], self.llm_end_dict[this_uuid] = [], False\n            self.hift_cache_dict[this_uuid] = None\n        if source_speech_token.shape[1] == 0:\n            p = threading.Thread(target=self.llm_job, args=(text, prompt_text, llm_prompt_speech_token, llm_embedding, this_uuid))\n        else:\n            p = threading.Thread(target=self.vc_job, args=(source_speech_token, this_uuid))\n        p.start()\n        if stream is True:\n            token_offset = 0\n            prompt_token_pad = int(np.ceil(flow_prompt_speech_token.shape[1] / self.token_hop_len) * self.token_hop_len - flow_prompt_speech_token.shape[1])\n            while True:\n                time.sleep(0.1)\n                this_token_hop_len = self.token_hop_len + prompt_token_pad if token_offset == 0 else self.token_hop_len\n                if len(self.tts_speech_token_dict[this_uuid]) - token_offset >= this_token_hop_len + self.flow.pre_lookahead_len:\n                    this_tts_speech_token = torch.tensor(self.tts_speech_token_dict[this_uuid][:token_offset + this_token_hop_len + self.flow.pre_lookahead_len]).unsqueeze(dim=0)\n                    this_tts_speech = self.token2wav(token=this_tts_speech_token,\n                                                     prompt_token=flow_prompt_speech_token,\n                                                     prompt_feat=prompt_speech_feat,\n                                                     embedding=flow_embedding,\n                                                     token_offset=token_offset,\n                                                     uuid=this_uuid,\n                                                     stream=stream,\n                                                     finalize=False)\n                    token_offset += this_token_hop_len\n                    self.token_hop_len = min(self.token_max_hop_len, self.token_hop_len * self.stream_scale_factor)\n                    yield {'tts_speech': this_tts_speech.cpu()}\n                if self.llm_end_dict[this_uuid] is True and len(self.tts_speech_token_dict[this_uuid]) - token_offset < this_token_hop_len + self.flow.pre_lookahead_len:\n                    break\n            p.join()\n            # deal with remain tokens, make sure inference remain token len equals token_hop_len when cache_speech is not None\n            this_tts_speech_token = torch.tensor(self.tts_speech_token_dict[this_uuid]).unsqueeze(dim=0)\n            this_tts_speech = self.token2wav(token=this_tts_speech_token,\n                                             prompt_token=flow_prompt_speech_token,\n                                             prompt_feat=prompt_speech_feat,\n                                             embedding=flow_embedding,\n                                             token_offset=token_offset,\n                                             uuid=this_uuid,\n                                             finalize=True)\n            yield {'tts_speech': this_tts_speech.cpu()}\n        else:\n            # deal with all tokens\n            p.join()\n            this_tts_speech_token = torch.tensor(self.tts_speech_token_dict[this_uuid]).unsqueeze(dim=0)\n            this_tts_speech = self.token2wav(token=this_tts_speech_token,\n                                             prompt_token=flow_prompt_speech_token,\n                                             prompt_feat=prompt_speech_feat,\n                                             embedding=flow_embedding,\n                                             token_offset=0,\n                                             uuid=this_uuid,\n                                             finalize=True,\n                                             speed=speed)\n            yield {'tts_speech': this_tts_speech.cpu()}\n        with self.lock:\n            self.tts_speech_token_dict.pop(this_uuid)\n            self.llm_end_dict.pop(this_uuid)\n            self.hift_cache_dict.pop(this_uuid)\n        if torch.cuda.is_available():\n            torch.cuda.empty_cache()\n            torch.cuda.current_stream().synchronize()\n\n\nclass CosyVoice3Model(CosyVoice2Model):\n\n    def __init__(self,\n                 llm: torch.nn.Module,\n                 flow: torch.nn.Module,\n                 hift: torch.nn.Module,\n                 fp16: bool = False):\n        self.device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n        self.llm = llm\n        self.flow = flow\n        self.hift = hift\n        self.fp16 = fp16\n        # NOTE must matching training static_chunk_size\n        self.token_hop_len = 25\n        # NOTE increase token_hop_len incrementally to avoid duplicate inference\n        self.token_max_hop_len = 4 * self.token_hop_len\n        self.stream_scale_factor = 2\n        assert self.stream_scale_factor >= 1, 'stream_scale_factor should be greater than 1, change it according to your actual rtf'\n        # rtf and decoding related\n        self.llm_context = torch.cuda.stream(torch.cuda.Stream(self.device)) if torch.cuda.is_available() else nullcontext()\n        self.lock = threading.Lock()\n        # dict used to store session related variable\n        self.tts_speech_token_dict = {}\n        self.llm_end_dict = {}\n        self.hift_cache_dict = {}\n        # FSQ silent and breath token\n        self.silent_tokens = [1, 2, 28, 29, 55, 248, 494, 2241, 2242, 2322, 2323]\n\n    def token2wav(self, token, prompt_token, prompt_feat, embedding, token_offset, uuid, stream=False, finalize=False, speed=1.0):\n        with torch.cuda.amp.autocast(self.fp16):\n            tts_mel, _ = self.flow.inference(token=token.to(self.device, dtype=torch.int32),\n                                             token_len=torch.tensor([token.shape[1]], dtype=torch.int32).to(self.device),\n                                             prompt_token=prompt_token.to(self.device),\n                                             prompt_token_len=torch.tensor([prompt_token.shape[1]], dtype=torch.int32).to(self.device),\n                                             prompt_feat=prompt_feat.to(self.device),\n                                             prompt_feat_len=torch.tensor([prompt_feat.shape[1]], dtype=torch.int32).to(self.device),\n                                             embedding=embedding.to(self.device),\n                                             streaming=stream,\n                                             finalize=finalize)\n            tts_mel = tts_mel[:, :, token_offset * self.flow.token_mel_ratio:]\n            # append mel cache\n            if self.hift_cache_dict[uuid] is not None:\n                hift_cache_mel = self.hift_cache_dict[uuid]['mel']\n                tts_mel = torch.concat([hift_cache_mel, tts_mel], dim=2)\n                self.hift_cache_dict[uuid]['mel'] = tts_mel\n            else:\n                self.hift_cache_dict[uuid] = {'mel': tts_mel, 'speech_offset': 0}\n            if speed != 1.0:\n                assert token_offset == 0 and finalize is True, 'speed change only support non-stream inference mode'\n                tts_mel = F.interpolate(tts_mel, size=int(tts_mel.shape[2] / speed), mode='linear')\n            tts_speech, _ = self.hift.inference(speech_feat=tts_mel, finalize=finalize)\n            tts_speech = tts_speech[:, self.hift_cache_dict[uuid]['speech_offset']:]\n            self.hift_cache_dict[uuid]['speech_offset'] += tts_speech.shape[1]\n        return tts_speech\n"
  },
  {
    "path": "cosyvoice/dataset/__init__.py",
    "content": ""
  },
  {
    "path": "cosyvoice/dataset/dataset.py",
    "content": "# Copyright (c) 2021 Mobvoi Inc. (authors: Binbin Zhang)\n#               2024 Alibaba Inc (authors: Xiang Lyu)\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\nimport random\nimport math\nfrom functools import partial\n\nimport torch\nimport torch.distributed as dist\nfrom torch.utils.data import IterableDataset\nfrom cosyvoice.utils.file_utils import read_lists\n\n\nclass Processor(IterableDataset):\n\n    def __init__(self, source, f, *args, **kw):\n        assert callable(f)\n        self.source = source\n        self.f = f\n        self.args = args\n        self.kw = kw\n\n    def set_epoch(self, epoch):\n        self.source.set_epoch(epoch)\n\n    def __iter__(self):\n        \"\"\" Return an iterator over the source dataset processed by the\n            given processor.\n        \"\"\"\n        assert self.source is not None\n        assert callable(self.f)\n        return self.f(iter(self.source), *self.args, **self.kw)\n\n    def apply(self, f):\n        assert callable(f)\n        return Processor(self, f, *self.args, **self.kw)\n\n\nclass DistributedSampler:\n\n    def __init__(self, shuffle=True, partition=True):\n        self.epoch = -1\n        self.update()\n        self.shuffle = shuffle\n        self.partition = partition\n\n    def update(self):\n        assert dist.is_available()\n        if dist.is_initialized():\n            self.rank = dist.get_rank()\n            self.world_size = dist.get_world_size()\n        else:\n            self.rank = 0\n            self.world_size = 1\n        worker_info = torch.utils.data.get_worker_info()\n        if worker_info is None:\n            self.worker_id = 0\n            self.num_workers = 1\n        else:\n            self.worker_id = worker_info.id\n            self.num_workers = worker_info.num_workers\n        return dict(rank=self.rank,\n                    world_size=self.world_size,\n                    worker_id=self.worker_id,\n                    num_workers=self.num_workers)\n\n    def set_epoch(self, epoch):\n        self.epoch = epoch\n\n    def sample(self, data):\n        \"\"\" Sample data according to rank/world_size/num_workers\n\n            Args:\n                data(List): input data list\n\n            Returns:\n                List: data list after sample\n        \"\"\"\n        data = list(range(len(data)))\n        # force datalist even\n        if self.partition:\n            if self.shuffle:\n                random.Random(self.epoch).shuffle(data)\n            if len(data) < self.world_size:\n                data = data * math.ceil(self.world_size / len(data))\n                data = data[:self.world_size]\n            data = data[self.rank::self.world_size]\n        if len(data) < self.num_workers:\n            data = data * math.ceil(self.num_workers / len(data))\n            data = data[:self.num_workers]\n        data = data[self.worker_id::self.num_workers]\n        return data\n\n\nclass DataList(IterableDataset):\n\n    def __init__(self, lists, shuffle=True, partition=True):\n        self.lists = lists\n        self.sampler = DistributedSampler(shuffle, partition)\n\n    def set_epoch(self, epoch):\n        self.sampler.set_epoch(epoch)\n\n    def __iter__(self):\n        sampler_info = self.sampler.update()\n        indexes = self.sampler.sample(self.lists)\n        for index in indexes:\n            data = dict(src=self.lists[index])\n            data.update(sampler_info)\n            yield data\n\n\ndef Dataset(data_list_file,\n            data_pipeline,\n            mode='train',\n            gan=False,\n            dpo=False,\n            shuffle=True,\n            partition=True):\n    \"\"\" Construct dataset from arguments\n\n        We have two shuffle stage in the Dataset. The first is global\n        shuffle at shards tar/raw file level. The second is global shuffle\n        at training samples level.\n\n        Args:\n            data_type(str): raw/shard\n            tokenizer (BaseTokenizer): tokenizer to tokenize\n            partition(bool): whether to do data partition in terms of rank\n    \"\"\"\n    lists = read_lists(data_list_file)\n    dataset = DataList(lists,\n                       shuffle=shuffle,\n                       partition=partition)\n    # map partial arg to padding func\n    for i in range(1, len(data_pipeline)):\n        if data_pipeline[i].func.__name__ == 'compute_fbank' and gan is True:\n            data_pipeline[i] = partial(data_pipeline[i], token_mel_ratio=0)\n        if data_pipeline[i].func.__name__ == 'padding':\n            data_pipeline[i] = partial(data_pipeline[i], gan=gan, dpo=dpo)\n    for func in data_pipeline:\n        dataset = Processor(dataset, func, mode=mode)\n    return dataset\n"
  },
  {
    "path": "cosyvoice/dataset/processor.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu)\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.\nimport logging\nimport random\n\nimport pyarrow.parquet as pq\nfrom io import BytesIO\nimport numpy as np\nimport whisper\nimport torch\nimport torchaudio\nfrom torch.nn.utils.rnn import pad_sequence\nimport torch.nn.functional as F\nimport pyworld as pw\nfrom cosyvoice.utils.onnx import embedding_extractor, online_feature\n\nAUDIO_FORMAT_SETS = {'flac', 'mp3', 'm4a', 'ogg', 'opus', 'wav', 'wma'}\n\n\ndef parquet_opener(data, mode='train'):\n    \"\"\" Give url or local file, return file descriptor\n        Inplace operation.\n\n        Args:\n            data(Iterable[str]): url or local file list\n\n        Returns:\n            Iterable[{src, stream}]\n    \"\"\"\n    for sample in data:\n        assert 'src' in sample\n        url = sample['src']\n        try:\n            for df in pq.ParquetFile(url).iter_batches(batch_size=64):\n                df = df.to_pandas()\n                for i in range(len(df)):\n                    sample.update(dict(df.loc[i]))\n                    # NOTE do not return sample directly, must initialize a new dict\n                    yield {**sample}\n        except Exception as ex:\n            logging.warning('Failed to open {}, ex info {}'.format(url, ex))\n\n\ndef filter(data,\n           max_length=10240,\n           min_length=10,\n           token_max_length=200,\n           token_min_length=1,\n           min_output_input_ratio=0.0005,\n           max_output_input_ratio=1,\n           mode='train'):\n    \"\"\" Filter sample according to feature and label length\n        Inplace operation.\n\n        Args::\n            data: Iterable[{key, wav, label, sample_rate}]\n            max_length: drop utterance which is greater than max_length(10ms)\n            min_length: drop utterance which is less than min_length(10ms)\n            token_max_length: drop utterance which is greater than\n                token_max_length, especially when use char unit for\n                english modeling\n            token_min_length: drop utterance which is\n                less than token_max_length\n            min_output_input_ratio: minimal ration of\n                token_length / feats_length(10ms)\n            max_output_input_ratio: maximum ration of\n                token_length / feats_length(10ms)\n\n        Returns:\n            Iterable[{key, wav, label, sample_rate}]\n    \"\"\"\n    for sample in data:\n        sample['speech'], sample['sample_rate'] = torchaudio.load(BytesIO(sample['audio_data']))\n        sample['speech'] = sample['speech'].mean(dim=0, keepdim=True)\n        del sample['audio_data']\n        # sample['wav'] is torch.Tensor, we have 100 frames every second\n        num_frames = sample['speech'].size(1) / sample['sample_rate'] * 100\n        if num_frames < min_length:\n            continue\n        if num_frames > max_length:\n            continue\n        if len(sample['text_token']) < token_min_length:\n            continue\n        if len(sample['text_token']) > token_max_length:\n            continue\n        if online_feature is False and len(sample['speech_token']) == 0:\n            continue\n        if online_feature is False and 'reject_speech_token' in sample and len(sample['reject_speech_token']) == 0:\n            continue\n        if num_frames != 0:\n            if len(sample['text_token']) / num_frames < min_output_input_ratio:\n                continue\n            if len(sample['text_token']) / num_frames > max_output_input_ratio:\n                continue\n        yield sample\n\n\ndef resample(data, resample_rate=22050, min_sample_rate=16000, mode='train'):\n    \"\"\" Resample data.\n        Inplace operation.\n\n        Args:\n            data: Iterable[{key, wav, label, sample_rate}]\n            resample_rate: target resample rate\n\n        Returns:\n            Iterable[{key, wav, label, sample_rate}]\n    \"\"\"\n    for sample in data:\n        assert 'sample_rate' in sample\n        assert 'speech' in sample\n        sample_rate = sample['sample_rate']\n        waveform = sample['speech']\n        if sample_rate != resample_rate:\n            if sample_rate < min_sample_rate:\n                continue\n            sample['sample_rate'] = resample_rate\n            sample['speech'] = torchaudio.transforms.Resample(\n                orig_freq=sample_rate, new_freq=resample_rate)(waveform)\n        max_val = sample['speech'].abs().max()\n        if max_val > 1:\n            sample['speech'] /= max_val\n        yield sample\n\n\ndef truncate(data, truncate_length=24576, mode='train'):\n    \"\"\" Truncate data.\n\n        Args:\n            data: Iterable[{key, wav, label, sample_rate}]\n            truncate_length: truncate length\n\n        Returns:\n            Iterable[{key, wav, label, sample_rate}]\n    \"\"\"\n    for sample in data:\n        waveform = sample['speech']\n        if waveform.shape[1] > truncate_length:\n            start = random.randint(0, waveform.shape[1] - truncate_length)\n            waveform = waveform[:, start: start + truncate_length]\n        else:\n            waveform = torch.concat([waveform, torch.zeros(1, truncate_length - waveform.shape[1])], dim=1)\n        sample['speech'] = waveform\n        yield sample\n\n\ndef compute_fbank(data,\n                  feat_extractor,\n                  num_frames=-1,\n                  mode='train'):\n    \"\"\" Extract fbank\n\n        Args:\n            data: Iterable[{key, wav, label, sample_rate}]\n\n        Returns:\n            Iterable[{key, feat, label}]\n    \"\"\"\n    for sample in data:\n        assert 'sample_rate' in sample\n        assert 'speech' in sample\n        assert 'utt' in sample\n        assert 'text_token' in sample\n        # NOTE in cosyvoice2/3, we support online token extraction, so we need to align speech to 25hz first\n        if num_frames != -1:\n            index = int(np.ceil(sample['speech'].shape[1] / num_frames))\n            sample['speech'] = torch.concat([sample['speech'], torch.zeros(1, index * num_frames - sample['speech'].shape[1])], dim=1)\n        sample['speech_feat'] = feat_extractor(sample['speech']).squeeze(dim=0).transpose(0, 1)\n        yield sample\n\n\ndef compute_whisper_fbank(data, num_frames=-1, mode='train'):\n    \"\"\" Extract whisper fbank\n\n        Args:\n            data: Iterable[{key, wav, label, sample_rate}]\n\n        Returns:\n            Iterable[{key, feat, label}]\n    \"\"\"\n    for sample in data:\n        if num_frames != -1:\n            assert sample['speech'].shape[1] % num_frames == 0, 'speech length is not aligned with speech_token'\n        sample['speech_16k'] = torchaudio.transforms.Resample(orig_freq=sample['sample_rate'], new_freq=16000)(sample['speech'])\n        sample['whisper_feat'] = whisper.log_mel_spectrogram(sample['speech_16k'], n_mels=128).squeeze(dim=0).transpose(0, 1)\n        yield sample\n\n\ndef compute_f0(data, sample_rate, hop_size, mode='train'):\n    \"\"\" Extract f0\n\n        Args:\n            data: Iterable[{key, wav, label, sample_rate}]\n\n        Returns:\n            Iterable[{key, feat, label}]\n    \"\"\"\n    frame_period = hop_size * 1000 / sample_rate\n    for sample in data:\n        assert 'sample_rate' in sample\n        assert 'speech' in sample\n        assert 'utt' in sample\n        assert 'text_token' in sample\n        waveform = sample['speech']\n        _f0, t = pw.harvest(waveform.squeeze(dim=0).numpy().astype('double'), sample_rate, frame_period=frame_period)\n        if sum(_f0 != 0) < 5:  # this happens when the algorithm fails\n            _f0, t = pw.dio(waveform.squeeze(dim=0).numpy().astype('double'), sample_rate, frame_period=frame_period)  # if harvest fails, try dio\n        f0 = pw.stonemask(waveform.squeeze(dim=0).numpy().astype('double'), _f0, t, sample_rate)\n        f0 = F.interpolate(torch.from_numpy(f0).view(1, 1, -1), size=sample['speech_feat'].shape[0], mode='linear').view(-1)\n        sample['pitch_feat'] = f0\n        yield sample\n\n\ndef parse_embedding(data, normalize, mode='train'):\n    \"\"\" Parse utt_embedding/spk_embedding\n\n        Args:\n            data: Iterable[{key, wav, label, sample_rate}]\n\n        Returns:\n            Iterable[{key, feat, label}]\n    \"\"\"\n    for sample in data:\n        if 'utt_embedding' not in sample and 'spk_embedding' not in sample:\n            sample['speech_16k'] = torchaudio.transforms.Resample(orig_freq=sample['sample_rate'], new_freq=16000)(sample['speech'])\n            embedding = embedding_extractor.inference(sample['speech_16k'])\n            sample['spk_embedding'] = sample['utt_embedding'] = embedding\n        else:\n            sample['utt_embedding'] = torch.tensor(sample['utt_embedding'], dtype=torch.float32)\n            sample['spk_embedding'] = torch.tensor(sample['spk_embedding'], dtype=torch.float32)\n        if normalize:\n            sample['utt_embedding'] = F.normalize(sample['utt_embedding'], dim=0)\n            sample['spk_embedding'] = F.normalize(sample['spk_embedding'], dim=0)\n        yield sample\n\n\ndef tokenize(data, get_tokenizer, allowed_special, mode='train'):\n    \"\"\" Decode text to chars or BPE\n        Inplace operation\n\n        Args:\n            data: Iterable[{key, wav, txt, sample_rate}]\n\n        Returns:\n            Iterable[{key, wav, txt, tokens, label, sample_rate}]\n    \"\"\"\n    tokenizer = get_tokenizer()\n    for sample in data:\n        assert 'text' in sample\n        sample['text_token'] = tokenizer.encode(sample['text'], allowed_special=allowed_special)\n        if 'instruct' in sample:\n            sample['instruct_token'] = tokenizer.encode(sample['instruct'], allowed_special=allowed_special)\n        yield sample\n\n\ndef shuffle(data, shuffle_size=10000, mode='train'):\n    \"\"\" Local shuffle the data\n\n        Args:\n            data: Iterable[{key, feat, label}]\n            shuffle_size: buffer size for shuffle\n\n        Returns:\n            Iterable[{key, feat, label}]\n    \"\"\"\n    buf = []\n    yield_size = int(shuffle_size / 2)\n    for sample in data:\n        buf.append(sample)\n        if len(buf) >= shuffle_size:\n            random.shuffle(buf)\n            for x in buf[:yield_size]:\n                yield x\n            buf = buf[yield_size:]\n    # The sample left over\n    random.shuffle(buf)\n    for x in buf:\n        yield x\n\n\ndef sort(data, sort_size=500, mode='train'):\n    \"\"\" Sort the data by feature length.\n        Sort is used after shuffle and before batch, so we can group\n        utts with similar lengths into a batch, and `sort_size` should\n        be less than `shuffle_size`\n\n        Args:\n            data: Iterable[{key, feat, label}]\n            sort_size: buffer size for sort\n\n        Returns:\n            Iterable[{key, feat, label}]\n    \"\"\"\n\n    buf = []\n    for sample in data:\n        buf.append(sample)\n        if len(buf) >= sort_size:\n            buf.sort(key=lambda x: x['speech_feat'].size(0))\n            for x in buf:\n                yield x\n            buf = []\n    # The sample left over\n    buf.sort(key=lambda x: x['speech_feat'].size(0))\n    for x in buf:\n        yield x\n\n\ndef static_batch(data, batch_size=16):\n    \"\"\" Static batch the data by `batch_size`\n\n        Args:\n            data: Iterable[{key, feat, label}]\n            batch_size: batch size\n\n        Returns:\n            Iterable[List[{key, feat, label}]]\n    \"\"\"\n    buf = []\n    for sample in data:\n        buf.append(sample)\n        if len(buf) >= batch_size:\n            yield buf\n            buf = []\n    if len(buf) > 0:\n        yield buf\n\n\ndef dynamic_batch(data, max_frames_in_batch=12000, mode='train'):\n    \"\"\" Dynamic batch the data until the total frames in batch\n        reach `max_frames_in_batch`\n\n        Args:\n            data: Iterable[{key, feat, label}]\n            max_frames_in_batch: max_frames in one batch\n\n        Returns:\n            Iterable[List[{key, feat, label}]]\n    \"\"\"\n    buf = []\n    longest_frames = 0\n    for sample in data:\n        assert 'speech_feat' in sample\n        assert isinstance(sample['speech_feat'], torch.Tensor)\n        new_sample_frames = sample['speech_feat'].size(0)\n        longest_frames = max(longest_frames, new_sample_frames)\n        frames_after_padding = longest_frames * (len(buf) + 1)\n        if frames_after_padding > max_frames_in_batch:\n            yield buf\n            buf = [sample]\n            longest_frames = new_sample_frames\n        else:\n            buf.append(sample)\n    if len(buf) > 0:\n        yield buf\n\n\ndef batch(data, batch_type='static', batch_size=16, max_frames_in_batch=12000, mode='train'):\n    \"\"\" Wrapper for static/dynamic batch\n    \"\"\"\n    if batch_type == 'static':\n        return static_batch(data, batch_size)\n    elif batch_type == 'dynamic':\n        return dynamic_batch(data, max_frames_in_batch)\n    else:\n        logging.fatal('Unsupported batch type {}'.format(batch_type))\n\n\ndef padding(data, use_spk_embedding, mode='train', gan=False, dpo=False):\n    \"\"\" Padding the data into training data\n\n        Args:\n            data: Iterable[List[{key, feat, label}]]\n\n        Returns:\n            Iterable[Tuple(keys, feats, labels, feats lengths, label lengths)]\n    \"\"\"\n    for sample in data:\n        assert isinstance(sample, list)\n        order = torch.argsort(torch.tensor([x['speech'].size(1) for x in sample], dtype=torch.int32), descending=True)\n        batch = {}\n        batch['utts'] = [sample[i]['utt'] for i in order]\n        batch['text'] = [sample[i]['text'] for i in order]\n        text_token = [torch.tensor(sample[i]['text_token']) for i in order]\n        batch['text_token_len'] = torch.tensor([i.size(0) for i in text_token], dtype=torch.int32)\n        batch['text_token'] = pad_sequence(text_token, batch_first=True, padding_value=0)\n        speech_feat = [sample[i]['speech_feat'] for i in order]\n        batch['speech_feat_len'] = torch.tensor([i.size(0) for i in speech_feat], dtype=torch.int32)\n        batch['speech_feat'] = pad_sequence(speech_feat, batch_first=True, padding_value=0)\n        batch['utt_embedding'] = torch.stack([sample[i]['utt_embedding'] for i in order], dim=0)\n        batch['spk_embedding'] = torch.stack([sample[i]['spk_embedding'] for i in order], dim=0)\n        if torch.tensor(['instruct_token' in sample[i] for i in order]).all():\n            instruct_token = [torch.tensor(sample[i]['instruct_token']) for i in order]\n            batch['instruct_token_len'] = torch.tensor([i.size(0) for i in instruct_token], dtype=torch.int32)\n            batch['instruct_token'] = pad_sequence(instruct_token, batch_first=True, padding_value=0)\n        if torch.tensor(['whisper_feat' in sample[i] for i in order]).all():\n            whisper_feat = [sample[i]['whisper_feat'] for i in order]\n            batch['whisper_feat_len'] = torch.tensor([i.size(0) for i in whisper_feat], dtype=torch.int32)\n            batch['whisper_feat'] = pad_sequence(whisper_feat, batch_first=True, padding_value=0)\n        if torch.tensor(['speech_token' in sample[i] for i in order]).all():\n            speech_token = [torch.tensor(sample[i]['speech_token']) for i in order]\n            batch['speech_token_len'] = torch.tensor([i.size(0) for i in speech_token], dtype=torch.int32)\n            batch['speech_token'] = pad_sequence(speech_token, batch_first=True, padding_value=0)\n        if gan is True:\n            # in gan train, we need speech/pitch_feat\n            speech = [sample[i]['speech'].squeeze(dim=0) for i in order]\n            batch['speech_len'] = torch.tensor([i.size(0) for i in speech], dtype=torch.int32)\n            batch['speech'] = pad_sequence(speech, batch_first=True, padding_value=0)\n            pitch_feat = [sample[i]['pitch_feat'] for i in order]\n            batch['pitch_feat_len'] = torch.tensor([i.size(0) for i in pitch_feat], dtype=torch.int32)\n            batch['pitch_feat'] = pad_sequence(pitch_feat, batch_first=True, padding_value=0)\n        if dpo is True:\n            reject_speech_token = [torch.tensor(sample[i]['reject_speech_token']) for i in order]\n            batch['reject_speech_token_len'] = torch.tensor([i.size(0) for i in reject_speech_token], dtype=torch.int32)\n            batch['reject_speech_token'] = pad_sequence(reject_speech_token, batch_first=True, padding_value=0)\n        if use_spk_embedding is True:\n            batch[\"embedding\"] = batch[\"spk_embedding\"]\n        else:\n            batch[\"embedding\"] = batch[\"utt_embedding\"]\n        yield batch\n"
  },
  {
    "path": "cosyvoice/flow/DiT/dit.py",
    "content": "\n\"\"\"\nein notation:\nb - batch\nn - sequence\nnt - text sequence\nnw - raw wave length\nd - dimension\n\"\"\"\n\nfrom __future__ import annotations\n\nimport torch\nfrom torch import nn\nimport torch.nn.functional as F\nfrom einops import repeat\nfrom x_transformers.x_transformers import RotaryEmbedding\nfrom cosyvoice.utils.mask import add_optional_chunk_mask\nfrom cosyvoice.flow.DiT.modules import (\n    TimestepEmbedding,\n    ConvNeXtV2Block,\n    CausalConvPositionEmbedding,\n    DiTBlock,\n    AdaLayerNormZero_Final,\n    precompute_freqs_cis,\n    get_pos_embed_indices,\n)\n\n\n# Text embedding\n\n\nclass TextEmbedding(nn.Module):\n    def __init__(self, text_num_embeds, text_dim, conv_layers=0, conv_mult=2):\n        super().__init__()\n        self.text_embed = nn.Embedding(text_num_embeds + 1, text_dim)  # use 0 as filler token\n\n        if conv_layers > 0:\n            self.extra_modeling = True\n            self.precompute_max_pos = 4096  # ~44s of 24khz audio\n            self.register_buffer(\"freqs_cis\", precompute_freqs_cis(text_dim, self.precompute_max_pos), persistent=False)\n            self.text_blocks = nn.Sequential(\n                *[ConvNeXtV2Block(text_dim, text_dim * conv_mult) for _ in range(conv_layers)]\n            )\n        else:\n            self.extra_modeling = False\n\n    def forward(self, text: int[\"b nt\"], seq_len, drop_text=False):  # noqa: F722\n        batch, text_len = text.shape[0], text.shape[1]\n        text = text + 1  # use 0 as filler token. preprocess of batch pad -1, see list_str_to_idx()\n        text = text[:, :seq_len]  # curtail if character tokens are more than the mel spec tokens\n        text = F.pad(text, (0, seq_len - text_len), value=0)\n\n        if drop_text:  # cfg for text\n            text = torch.zeros_like(text)\n\n        text = self.text_embed(text)  # b n -> b n d\n\n        # possible extra modeling\n        if self.extra_modeling:\n            # sinus pos emb\n            batch_start = torch.zeros((batch,), dtype=torch.long)\n            pos_idx = get_pos_embed_indices(batch_start, seq_len, max_pos=self.precompute_max_pos)\n            text_pos_embed = self.freqs_cis[pos_idx]\n            text = text + text_pos_embed\n\n            # convnextv2 blocks\n            text = self.text_blocks(text)\n\n        return text\n\n\n# noised input audio and context mixing embedding\n\n\nclass InputEmbedding(nn.Module):\n    def __init__(self, mel_dim, text_dim, out_dim, spk_dim=None):\n        super().__init__()\n        spk_dim = 0 if spk_dim is None else spk_dim\n        self.spk_dim = spk_dim\n        self.proj = nn.Linear(mel_dim * 2 + text_dim + spk_dim, out_dim)\n        self.conv_pos_embed = CausalConvPositionEmbedding(dim=out_dim)\n\n    def forward(\n            self,\n            x: float[\"b n d\"],\n            cond: float[\"b n d\"],\n            text_embed: float[\"b n d\"],\n            spks: float[\"b d\"],\n    ):\n        to_cat = [x, cond, text_embed]\n        if self.spk_dim > 0:\n            spks = repeat(spks, \"b c -> b t c\", t=x.shape[1])\n            to_cat.append(spks)\n\n        x = self.proj(torch.cat(to_cat, dim=-1))\n        x = self.conv_pos_embed(x) + x\n        return x\n\n\n# Transformer backbone using DiT blocks\n\n\nclass DiT(nn.Module):\n    def __init__(\n        self,\n        *,\n        dim,\n        depth=8,\n        heads=8,\n        dim_head=64,\n        dropout=0.1,\n        ff_mult=4,\n        mel_dim=80,\n        mu_dim=None,\n        long_skip_connection=False,\n        spk_dim=None,\n        out_channels=None,\n        static_chunk_size=50,\n        num_decoding_left_chunks=2\n    ):\n        super().__init__()\n\n        self.time_embed = TimestepEmbedding(dim)\n        if mu_dim is None:\n            mu_dim = mel_dim\n        self.input_embed = InputEmbedding(mel_dim, mu_dim, dim, spk_dim)\n\n        self.rotary_embed = RotaryEmbedding(dim_head)\n\n        self.dim = dim\n        self.depth = depth\n\n        self.transformer_blocks = nn.ModuleList(\n            [DiTBlock(dim=dim, heads=heads, dim_head=dim_head, ff_mult=ff_mult, dropout=dropout) for _ in range(depth)]\n        )\n        self.long_skip_connection = nn.Linear(dim * 2, dim, bias=False) if long_skip_connection else None\n\n        self.norm_out = AdaLayerNormZero_Final(dim)  # final modulation\n        self.proj_out = nn.Linear(dim, mel_dim)\n        self.out_channels = out_channels\n        self.static_chunk_size = static_chunk_size\n        self.num_decoding_left_chunks = num_decoding_left_chunks\n\n    def forward(self, x, mask, mu, t, spks=None, cond=None, streaming=False):\n        x = x.transpose(1, 2)\n        mu = mu.transpose(1, 2)\n        cond = cond.transpose(1, 2)\n        spks = spks.unsqueeze(dim=1)\n        batch, seq_len = x.shape[0], x.shape[1]\n        if t.ndim == 0:\n            t = t.repeat(batch)\n\n        # t: conditioning time, c: context (text + masked cond audio), x: noised input audio\n        t = self.time_embed(t)\n        x = self.input_embed(x, cond, mu, spks.squeeze(1))\n\n        rope = self.rotary_embed.forward_from_seq_len(seq_len)\n\n        if self.long_skip_connection is not None:\n            residual = x\n\n        if streaming is True:\n            attn_mask = add_optional_chunk_mask(x, mask.bool(), False, False, 0, self.static_chunk_size, -1).unsqueeze(dim=1)\n        else:\n            attn_mask = add_optional_chunk_mask(x, mask.bool(), False, False, 0, 0, -1).repeat(1, x.size(1), 1).unsqueeze(dim=1)\n\n        for block in self.transformer_blocks:\n            x = block(x, t, mask=attn_mask.bool(), rope=rope)\n\n        if self.long_skip_connection is not None:\n            x = self.long_skip_connection(torch.cat((x, residual), dim=-1))\n\n        x = self.norm_out(x, t)\n        output = self.proj_out(x).transpose(1, 2)\n        return output\n"
  },
  {
    "path": "cosyvoice/flow/DiT/modules.py",
    "content": "\n\"\"\"\nein notation:\nb - batch\nn - sequence\nnt - text sequence\nnw - raw wave length\nd - dimension\n\"\"\"\n\nfrom __future__ import annotations\nfrom typing import Optional\nimport math\n\nimport torch\nfrom torch import nn\nimport torch.nn.functional as F\nimport torchaudio\n\nfrom x_transformers.x_transformers import apply_rotary_pos_emb\n\n\n# raw wav to mel spec\nclass MelSpec(nn.Module):\n    def __init__(\n        self,\n        filter_length=1024,\n        hop_length=256,\n        win_length=1024,\n        n_mel_channels=100,\n        target_sample_rate=24_000,\n        normalize=False,\n        power=1,\n        norm=None,\n        center=True,\n    ):\n        super().__init__()\n        self.n_mel_channels = n_mel_channels\n\n        self.mel_stft = torchaudio.transforms.MelSpectrogram(\n            sample_rate=target_sample_rate,\n            n_fft=filter_length,\n            win_length=win_length,\n            hop_length=hop_length,\n            n_mels=n_mel_channels,\n            power=power,\n            center=center,\n            normalized=normalize,\n            norm=norm,\n        )\n\n        self.register_buffer(\"dummy\", torch.tensor(0), persistent=False)\n\n    def forward(self, inp):\n        if len(inp.shape) == 3:\n            inp = inp.squeeze(1)  # 'b 1 nw -> b nw'\n\n        assert len(inp.shape) == 2\n\n        if self.dummy.device != inp.device:\n            self.to(inp.device)\n\n        mel = self.mel_stft(inp)\n        mel = mel.clamp(min=1e-5).log()\n        return mel\n\n\n# sinusoidal position embedding\n\n\nclass SinusPositionEmbedding(nn.Module):\n    def __init__(self, dim):\n        super().__init__()\n        self.dim = dim\n\n    def forward(self, x, scale=1000):\n        device = x.device\n        half_dim = self.dim // 2\n        emb = math.log(10000) / (half_dim - 1)\n        emb = torch.exp(torch.arange(half_dim, device=device).float() * -emb)\n        emb = scale * x.unsqueeze(1) * emb.unsqueeze(0)\n        emb = torch.cat((emb.sin(), emb.cos()), dim=-1)\n        return emb\n\n\n# convolutional position embedding\n\n\nclass ConvPositionEmbedding(nn.Module):\n    def __init__(self, dim, kernel_size=31, groups=16):\n        super().__init__()\n        assert kernel_size % 2 != 0\n        self.conv1d = nn.Sequential(\n            nn.Conv1d(dim, dim, kernel_size, groups=groups, padding=kernel_size // 2),\n            nn.Mish(),\n            nn.Conv1d(dim, dim, kernel_size, groups=groups, padding=kernel_size // 2),\n            nn.Mish(),\n        )\n\n    def forward(self, x: float[\"b n d\"], mask: bool[\"b n\"] | None = None):  # noqa: F722\n        if mask is not None:\n            mask = mask[..., None]\n            x = x.masked_fill(~mask, 0.0)\n\n        x = x.permute(0, 2, 1)\n        x = self.conv1d(x)\n        out = x.permute(0, 2, 1)\n\n        if mask is not None:\n            out = out.masked_fill(~mask, 0.0)\n\n        return out\n\n\nclass CausalConvPositionEmbedding(nn.Module):\n    def __init__(self, dim, kernel_size=31, groups=16):\n        super().__init__()\n        assert kernel_size % 2 != 0\n        self.kernel_size = kernel_size\n        self.conv1 = nn.Sequential(\n            nn.Conv1d(dim, dim, kernel_size, groups=groups, padding=0),\n            nn.Mish(),\n        )\n        self.conv2 = nn.Sequential(\n            nn.Conv1d(dim, dim, kernel_size, groups=groups, padding=0),\n            nn.Mish(),\n        )\n\n    def forward(self, x: float[\"b n d\"], mask: bool[\"b n\"] | None = None):  # noqa: F722\n        if mask is not None:\n            mask = mask[..., None]\n            x = x.masked_fill(~mask, 0.0)\n\n        x = x.permute(0, 2, 1)\n        x = F.pad(x, (self.kernel_size - 1, 0, 0, 0))\n        x = self.conv1(x)\n        x = F.pad(x, (self.kernel_size - 1, 0, 0, 0))\n        x = self.conv2(x)\n        out = x.permute(0, 2, 1)\n\n        if mask is not None:\n            out = out.masked_fill(~mask, 0.0)\n\n        return out\n\n\n# rotary positional embedding related\n\n\ndef precompute_freqs_cis(dim: int, end: int, theta: float = 10000.0, theta_rescale_factor=1.0):\n    # proposed by reddit user bloc97, to rescale rotary embeddings to longer sequence length without fine-tuning\n    # has some connection to NTK literature\n    # https://www.reddit.com/r/LocalLLaMA/comments/14lz7j5/ntkaware_scaled_rope_allows_llama_models_to_have/\n    # https://github.com/lucidrains/rotary-embedding-torch/blob/main/rotary_embedding_torch/rotary_embedding_torch.py\n    theta *= theta_rescale_factor ** (dim / (dim - 2))\n    freqs = 1.0 / (theta ** (torch.arange(0, dim, 2)[: (dim // 2)].float() / dim))\n    t = torch.arange(end, device=freqs.device)  # type: ignore\n    freqs = torch.outer(t, freqs).float()  # type: ignore\n    freqs_cos = torch.cos(freqs)  # real part\n    freqs_sin = torch.sin(freqs)  # imaginary part\n    return torch.cat([freqs_cos, freqs_sin], dim=-1)\n\n\ndef get_pos_embed_indices(start, length, max_pos, scale=1.0):\n    # length = length if isinstance(length, int) else length.max()\n    scale = scale * torch.ones_like(start, dtype=torch.float32)  # in case scale is a scalar\n    pos = (\n        start.unsqueeze(1)\n        + (torch.arange(length, device=start.device, dtype=torch.float32).unsqueeze(0) * scale.unsqueeze(1)).long()\n    )\n    # avoid extra long error.\n    pos = torch.where(pos < max_pos, pos, max_pos - 1)\n    return pos\n\n\n# Global Response Normalization layer (Instance Normalization ?)\n\n\nclass GRN(nn.Module):\n    def __init__(self, dim):\n        super().__init__()\n        self.gamma = nn.Parameter(torch.zeros(1, 1, dim))\n        self.beta = nn.Parameter(torch.zeros(1, 1, dim))\n\n    def forward(self, x):\n        Gx = torch.norm(x, p=2, dim=1, keepdim=True)\n        Nx = Gx / (Gx.mean(dim=-1, keepdim=True) + 1e-6)\n        return self.gamma * (x * Nx) + self.beta + x\n\n\n# ConvNeXt-V2 Block https://github.com/facebookresearch/ConvNeXt-V2/blob/main/models/convnextv2.py\n# ref: https://github.com/bfs18/e2_tts/blob/main/rfwave/modules.py#L108\n\n\nclass ConvNeXtV2Block(nn.Module):\n    def __init__(\n        self,\n        dim: int,\n        intermediate_dim: int,\n        dilation: int = 1,\n    ):\n        super().__init__()\n        padding = (dilation * (7 - 1)) // 2\n        self.dwconv = nn.Conv1d(\n            dim, dim, kernel_size=7, padding=padding, groups=dim, dilation=dilation\n        )  # depthwise conv\n        self.norm = nn.LayerNorm(dim, eps=1e-6)\n        self.pwconv1 = nn.Linear(dim, intermediate_dim)  # pointwise/1x1 convs, implemented with linear layers\n        self.act = nn.GELU()\n        self.grn = GRN(intermediate_dim)\n        self.pwconv2 = nn.Linear(intermediate_dim, dim)\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        residual = x\n        x = x.transpose(1, 2)  # b n d -> b d n\n        x = self.dwconv(x)\n        x = x.transpose(1, 2)  # b d n -> b n d\n        x = self.norm(x)\n        x = self.pwconv1(x)\n        x = self.act(x)\n        x = self.grn(x)\n        x = self.pwconv2(x)\n        return residual + x\n\n\n# AdaLayerNormZero\n# return with modulated x for attn input, and params for later mlp modulation\n\n\nclass AdaLayerNormZero(nn.Module):\n    def __init__(self, dim):\n        super().__init__()\n\n        self.silu = nn.SiLU()\n        self.linear = nn.Linear(dim, dim * 6)\n\n        self.norm = nn.LayerNorm(dim, elementwise_affine=False, eps=1e-6)\n\n    def forward(self, x, emb=None):\n        emb = self.linear(self.silu(emb))\n        shift_msa, scale_msa, gate_msa, shift_mlp, scale_mlp, gate_mlp = torch.chunk(emb, 6, dim=1)\n\n        x = self.norm(x) * (1 + scale_msa[:, None]) + shift_msa[:, None]\n        return x, gate_msa, shift_mlp, scale_mlp, gate_mlp\n\n\n# AdaLayerNormZero for final layer\n# return only with modulated x for attn input, cuz no more mlp modulation\n\n\nclass AdaLayerNormZero_Final(nn.Module):\n    def __init__(self, dim):\n        super().__init__()\n\n        self.silu = nn.SiLU()\n        self.linear = nn.Linear(dim, dim * 2)\n\n        self.norm = nn.LayerNorm(dim, elementwise_affine=False, eps=1e-6)\n\n    def forward(self, x, emb):\n        emb = self.linear(self.silu(emb))\n        scale, shift = torch.chunk(emb, 2, dim=1)\n\n        x = self.norm(x) * (1 + scale)[:, None, :] + shift[:, None, :]\n        return x\n\n\n# FeedForward\n\n\nclass FeedForward(nn.Module):\n    def __init__(self, dim, dim_out=None, mult=4, dropout=0.0, approximate: str = \"none\"):\n        super().__init__()\n        inner_dim = int(dim * mult)\n        dim_out = dim_out if dim_out is not None else dim\n\n        activation = nn.GELU(approximate=approximate)\n        project_in = nn.Sequential(nn.Linear(dim, inner_dim), activation)\n        self.ff = nn.Sequential(project_in, nn.Dropout(dropout), nn.Linear(inner_dim, dim_out))\n\n    def forward(self, x):\n        return self.ff(x)\n\n\n# Attention with possible joint part\n# modified from diffusers/src/diffusers/models/attention_processor.py\n\n\nclass Attention(nn.Module):\n    def __init__(\n        self,\n        processor: JointAttnProcessor | AttnProcessor,\n        dim: int,\n        heads: int = 8,\n        dim_head: int = 64,\n        dropout: float = 0.0,\n        context_dim: Optional[int] = None,  # if not None -> joint attention\n        context_pre_only=None,\n    ):\n        super().__init__()\n\n        if not hasattr(F, \"scaled_dot_product_attention\"):\n            raise ImportError(\"Attention equires PyTorch 2.0, to use it, please upgrade PyTorch to 2.0.\")\n\n        self.processor = processor\n\n        self.dim = dim\n        self.heads = heads\n        self.inner_dim = dim_head * heads\n        self.dropout = dropout\n\n        self.context_dim = context_dim\n        self.context_pre_only = context_pre_only\n\n        self.to_q = nn.Linear(dim, self.inner_dim)\n        self.to_k = nn.Linear(dim, self.inner_dim)\n        self.to_v = nn.Linear(dim, self.inner_dim)\n\n        if self.context_dim is not None:\n            self.to_k_c = nn.Linear(context_dim, self.inner_dim)\n            self.to_v_c = nn.Linear(context_dim, self.inner_dim)\n            if self.context_pre_only is not None:\n                self.to_q_c = nn.Linear(context_dim, self.inner_dim)\n\n        self.to_out = nn.ModuleList([])\n        self.to_out.append(nn.Linear(self.inner_dim, dim))\n        self.to_out.append(nn.Dropout(dropout))\n\n        if self.context_pre_only is not None and not self.context_pre_only:\n            self.to_out_c = nn.Linear(self.inner_dim, dim)\n\n    def forward(\n        self,\n        x: float[\"b n d\"],  # noised input x  # noqa: F722\n        c: float[\"b n d\"] = None,  # context c  # noqa: F722\n        mask: bool[\"b n\"] | None = None,  # noqa: F722\n        rope=None,  # rotary position embedding for x\n        c_rope=None,  # rotary position embedding for c\n    ) -> torch.Tensor:\n        if c is not None:\n            return self.processor(self, x, c=c, mask=mask, rope=rope, c_rope=c_rope)\n        else:\n            return self.processor(self, x, mask=mask, rope=rope)\n\n\n# Attention processor\n\n\nclass AttnProcessor:\n    def __init__(self):\n        pass\n\n    def __call__(\n        self,\n        attn: Attention,\n        x: float[\"b n d\"],  # noised input x  # noqa: F722\n        mask: bool[\"b n\"] | None = None,  # noqa: F722\n        rope=None,  # rotary position embedding\n    ) -> torch.FloatTensor:\n        batch_size = x.shape[0]\n\n        # `sample` projections.\n        query = attn.to_q(x)\n        key = attn.to_k(x)\n        value = attn.to_v(x)\n\n        # apply rotary position embedding\n        if rope is not None:\n            freqs, xpos_scale = rope\n            q_xpos_scale, k_xpos_scale = (xpos_scale, xpos_scale**-1.0) if xpos_scale is not None else (1.0, 1.0)\n\n            query = apply_rotary_pos_emb(query, freqs, q_xpos_scale)\n            key = apply_rotary_pos_emb(key, freqs, k_xpos_scale)\n\n        # attention\n        inner_dim = key.shape[-1]\n        head_dim = inner_dim // attn.heads\n        query = query.view(batch_size, -1, attn.heads, head_dim).transpose(1, 2)\n        key = key.view(batch_size, -1, attn.heads, head_dim).transpose(1, 2)\n        value = value.view(batch_size, -1, attn.heads, head_dim).transpose(1, 2)\n\n        # mask. e.g. inference got a batch with different target durations, mask out the padding\n        if mask is not None:\n            attn_mask = mask\n            if attn_mask.dim() == 2:\n                attn_mask = attn_mask.unsqueeze(1).unsqueeze(1)  # 'b n -> b 1 1 n'\n                attn_mask = attn_mask.expand(batch_size, attn.heads, query.shape[-2], key.shape[-2])\n        else:\n            attn_mask = None\n\n        x = F.scaled_dot_product_attention(query, key, value, attn_mask=attn_mask, dropout_p=0.0, is_causal=False)\n        x = x.transpose(1, 2).reshape(batch_size, -1, attn.heads * head_dim)\n        x = x.to(query.dtype)\n\n        # linear proj\n        x = attn.to_out[0](x)\n        # dropout\n        x = attn.to_out[1](x)\n\n        if mask is not None:\n            if mask.dim() == 2:\n                mask = mask.unsqueeze(-1)\n            else:\n                mask = mask[:, 0, -1].unsqueeze(-1)\n            x = x.masked_fill(~mask, 0.0)\n\n        return x\n\n\n# Joint Attention processor for MM-DiT\n# modified from diffusers/src/diffusers/models/attention_processor.py\n\n\nclass JointAttnProcessor:\n    def __init__(self):\n        pass\n\n    def __call__(\n        self,\n        attn: Attention,\n        x: float[\"b n d\"],  # noised input x  # noqa: F722\n        c: float[\"b nt d\"] = None,  # context c, here text # noqa: F722\n        mask: bool[\"b n\"] | None = None,  # noqa: F722\n        rope=None,  # rotary position embedding for x\n        c_rope=None,  # rotary position embedding for c\n    ) -> torch.FloatTensor:\n        residual = x\n\n        batch_size = c.shape[0]\n\n        # `sample` projections.\n        query = attn.to_q(x)\n        key = attn.to_k(x)\n        value = attn.to_v(x)\n\n        # `context` projections.\n        c_query = attn.to_q_c(c)\n        c_key = attn.to_k_c(c)\n        c_value = attn.to_v_c(c)\n\n        # apply rope for context and noised input independently\n        if rope is not None:\n            freqs, xpos_scale = rope\n            q_xpos_scale, k_xpos_scale = (xpos_scale, xpos_scale**-1.0) if xpos_scale is not None else (1.0, 1.0)\n            query = apply_rotary_pos_emb(query, freqs, q_xpos_scale)\n            key = apply_rotary_pos_emb(key, freqs, k_xpos_scale)\n        if c_rope is not None:\n            freqs, xpos_scale = c_rope\n            q_xpos_scale, k_xpos_scale = (xpos_scale, xpos_scale**-1.0) if xpos_scale is not None else (1.0, 1.0)\n            c_query = apply_rotary_pos_emb(c_query, freqs, q_xpos_scale)\n            c_key = apply_rotary_pos_emb(c_key, freqs, k_xpos_scale)\n\n        # attention\n        query = torch.cat([query, c_query], dim=1)\n        key = torch.cat([key, c_key], dim=1)\n        value = torch.cat([value, c_value], dim=1)\n\n        inner_dim = key.shape[-1]\n        head_dim = inner_dim // attn.heads\n        query = query.view(batch_size, -1, attn.heads, head_dim).transpose(1, 2)\n        key = key.view(batch_size, -1, attn.heads, head_dim).transpose(1, 2)\n        value = value.view(batch_size, -1, attn.heads, head_dim).transpose(1, 2)\n\n        # mask. e.g. inference got a batch with different target durations, mask out the padding\n        if mask is not None:\n            attn_mask = F.pad(mask, (0, c.shape[1]), value=True)  # no mask for c (text)\n            attn_mask = attn_mask.unsqueeze(1).unsqueeze(1)  # 'b n -> b 1 1 n'\n            attn_mask = attn_mask.expand(batch_size, attn.heads, query.shape[-2], key.shape[-2])\n        else:\n            attn_mask = None\n\n        x = F.scaled_dot_product_attention(query, key, value, attn_mask=attn_mask, dropout_p=0.0, is_causal=False)\n        x = x.transpose(1, 2).reshape(batch_size, -1, attn.heads * head_dim)\n        x = x.to(query.dtype)\n\n        # Split the attention outputs.\n        x, c = (\n            x[:, : residual.shape[1]],\n            x[:, residual.shape[1]:],\n        )\n\n        # linear proj\n        x = attn.to_out[0](x)\n        # dropout\n        x = attn.to_out[1](x)\n        if not attn.context_pre_only:\n            c = attn.to_out_c(c)\n\n        if mask is not None:\n            mask = mask.unsqueeze(-1)\n            x = x.masked_fill(~mask, 0.0)\n            # c = c.masked_fill(~mask, 0.)  # no mask for c (text)\n\n        return x, c\n\n\n# DiT Block\n\n\nclass DiTBlock(nn.Module):\n    def __init__(self, dim, heads, dim_head, ff_mult=4, dropout=0.1):\n        super().__init__()\n\n        self.attn_norm = AdaLayerNormZero(dim)\n        self.attn = Attention(\n            processor=AttnProcessor(),\n            dim=dim,\n            heads=heads,\n            dim_head=dim_head,\n            dropout=dropout,\n        )\n\n        self.ff_norm = nn.LayerNorm(dim, elementwise_affine=False, eps=1e-6)\n        self.ff = FeedForward(dim=dim, mult=ff_mult, dropout=dropout, approximate=\"tanh\")\n\n    def forward(self, x, t, mask=None, rope=None):  # x: noised input, t: time embedding\n        # pre-norm & modulation for attention input\n        norm, gate_msa, shift_mlp, scale_mlp, gate_mlp = self.attn_norm(x, emb=t)\n\n        # attention\n        attn_output = self.attn(x=norm, mask=mask, rope=rope)\n\n        # process attention output for input x\n        x = x + gate_msa.unsqueeze(1) * attn_output\n\n        ff_norm = self.ff_norm(x) * (1 + scale_mlp[:, None]) + shift_mlp[:, None]\n        ff_output = self.ff(ff_norm)\n        x = x + gate_mlp.unsqueeze(1) * ff_output\n\n        return x\n\n\n# MMDiT Block https://arxiv.org/abs/2403.03206\n\n\nclass MMDiTBlock(nn.Module):\n    r\"\"\"\n    modified from diffusers/src/diffusers/models/attention.py\n\n    notes.\n    _c: context related. text, cond, etc. (left part in sd3 fig2.b)\n    _x: noised input related. (right part)\n    context_pre_only: last layer only do prenorm + modulation cuz no more ffn\n    \"\"\"\n\n    def __init__(self, dim, heads, dim_head, ff_mult=4, dropout=0.1, context_pre_only=False):\n        super().__init__()\n\n        self.context_pre_only = context_pre_only\n\n        self.attn_norm_c = AdaLayerNormZero_Final(dim) if context_pre_only else AdaLayerNormZero(dim)\n        self.attn_norm_x = AdaLayerNormZero(dim)\n        self.attn = Attention(\n            processor=JointAttnProcessor(),\n            dim=dim,\n            heads=heads,\n            dim_head=dim_head,\n            dropout=dropout,\n            context_dim=dim,\n            context_pre_only=context_pre_only,\n        )\n\n        if not context_pre_only:\n            self.ff_norm_c = nn.LayerNorm(dim, elementwise_affine=False, eps=1e-6)\n            self.ff_c = FeedForward(dim=dim, mult=ff_mult, dropout=dropout, approximate=\"tanh\")\n        else:\n            self.ff_norm_c = None\n            self.ff_c = None\n        self.ff_norm_x = nn.LayerNorm(dim, elementwise_affine=False, eps=1e-6)\n        self.ff_x = FeedForward(dim=dim, mult=ff_mult, dropout=dropout, approximate=\"tanh\")\n\n    def forward(self, x, c, t, mask=None, rope=None, c_rope=None):  # x: noised input, c: context, t: time embedding\n        # pre-norm & modulation for attention input\n        if self.context_pre_only:\n            norm_c = self.attn_norm_c(c, t)\n        else:\n            norm_c, c_gate_msa, c_shift_mlp, c_scale_mlp, c_gate_mlp = self.attn_norm_c(c, emb=t)\n        norm_x, x_gate_msa, x_shift_mlp, x_scale_mlp, x_gate_mlp = self.attn_norm_x(x, emb=t)\n\n        # attention\n        x_attn_output, c_attn_output = self.attn(x=norm_x, c=norm_c, mask=mask, rope=rope, c_rope=c_rope)\n\n        # process attention output for context c\n        if self.context_pre_only:\n            c = None\n        else:  # if not last layer\n            c = c + c_gate_msa.unsqueeze(1) * c_attn_output\n\n            norm_c = self.ff_norm_c(c) * (1 + c_scale_mlp[:, None]) + c_shift_mlp[:, None]\n            c_ff_output = self.ff_c(norm_c)\n            c = c + c_gate_mlp.unsqueeze(1) * c_ff_output\n\n        # process attention output for input x\n        x = x + x_gate_msa.unsqueeze(1) * x_attn_output\n\n        norm_x = self.ff_norm_x(x) * (1 + x_scale_mlp[:, None]) + x_shift_mlp[:, None]\n        x_ff_output = self.ff_x(norm_x)\n        x = x + x_gate_mlp.unsqueeze(1) * x_ff_output\n\n        return c, x\n\n\n# time step conditioning embedding\n\n\nclass TimestepEmbedding(nn.Module):\n    def __init__(self, dim, freq_embed_dim=256):\n        super().__init__()\n        self.time_embed = SinusPositionEmbedding(freq_embed_dim)\n        self.time_mlp = nn.Sequential(nn.Linear(freq_embed_dim, dim), nn.SiLU(), nn.Linear(dim, dim))\n\n    def forward(self, timestep: float[\"b\"]):  # noqa: F821\n        time_hidden = self.time_embed(timestep)\n        time_hidden = time_hidden.to(timestep.dtype)\n        time = self.time_mlp(time_hidden)  # b d\n        return time\n"
  },
  {
    "path": "cosyvoice/flow/decoder.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu, Zhihao Du)\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.\nfrom typing import Tuple\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom einops import pack, rearrange, repeat\nfrom cosyvoice.utils.common import mask_to_bias\nfrom cosyvoice.utils.mask import add_optional_chunk_mask\nfrom matcha.models.components.decoder import SinusoidalPosEmb, Block1D, ResnetBlock1D, Downsample1D, TimestepEmbedding, Upsample1D\nfrom matcha.models.components.transformer import BasicTransformerBlock\n\n\nclass Transpose(torch.nn.Module):\n    def __init__(self, dim0: int, dim1: int):\n        super().__init__()\n        self.dim0 = dim0\n        self.dim1 = dim1\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        x = torch.transpose(x, self.dim0, self.dim1)\n        return x\n\n\nclass CausalConv1d(torch.nn.Conv1d):\n    def __init__(\n        self,\n        in_channels: int,\n        out_channels: int,\n        kernel_size: int,\n        stride: int = 1,\n        dilation: int = 1,\n        groups: int = 1,\n        bias: bool = True,\n        padding_mode: str = 'zeros',\n        device=None,\n        dtype=None\n    ) -> None:\n        super(CausalConv1d, self).__init__(in_channels, out_channels,\n                                           kernel_size, stride,\n                                           padding=0, dilation=dilation,\n                                           groups=groups, bias=bias,\n                                           padding_mode=padding_mode,\n                                           device=device, dtype=dtype)\n        assert stride == 1\n        self.causal_padding = kernel_size - 1\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        x = F.pad(x, (self.causal_padding, 0), value=0.0)\n        x = super(CausalConv1d, self).forward(x)\n        return x\n\n\nclass CausalBlock1D(Block1D):\n    def __init__(self, dim: int, dim_out: int):\n        super(CausalBlock1D, self).__init__(dim, dim_out)\n        self.block = torch.nn.Sequential(\n            CausalConv1d(dim, dim_out, 3),\n            Transpose(1, 2),\n            nn.LayerNorm(dim_out),\n            Transpose(1, 2),\n            nn.Mish(),\n        )\n\n    def forward(self, x: torch.Tensor, mask: torch.Tensor) -> Tuple[torch.Tensor, torch.Tensor]:\n        output = self.block(x * mask)\n        return output * mask\n\n\nclass CausalResnetBlock1D(ResnetBlock1D):\n    def __init__(self, dim: int, dim_out: int, time_emb_dim: int, groups: int = 8):\n        super(CausalResnetBlock1D, self).__init__(dim, dim_out, time_emb_dim, groups)\n        self.block1 = CausalBlock1D(dim, dim_out)\n        self.block2 = CausalBlock1D(dim_out, dim_out)\n\n\nclass ConditionalDecoder(nn.Module):\n    def __init__(\n        self,\n        in_channels,\n        out_channels,\n        channels=(256, 256),\n        dropout=0.05,\n        attention_head_dim=64,\n        n_blocks=1,\n        num_mid_blocks=2,\n        num_heads=4,\n        act_fn=\"snake\",\n    ):\n        \"\"\"\n        This decoder requires an input with the same shape of the target. So, if your text content\n        is shorter or longer than the outputs, please re-sampling it before feeding to the decoder.\n        \"\"\"\n        super().__init__()\n        channels = tuple(channels)\n        self.in_channels = in_channels\n        self.out_channels = out_channels\n\n        self.time_embeddings = SinusoidalPosEmb(in_channels)\n        time_embed_dim = channels[0] * 4\n        self.time_mlp = TimestepEmbedding(\n            in_channels=in_channels,\n            time_embed_dim=time_embed_dim,\n            act_fn=\"silu\",\n        )\n        self.down_blocks = nn.ModuleList([])\n        self.mid_blocks = nn.ModuleList([])\n        self.up_blocks = nn.ModuleList([])\n\n        output_channel = in_channels\n        for i in range(len(channels)):  # pylint: disable=consider-using-enumerate\n            input_channel = output_channel\n            output_channel = channels[i]\n            is_last = i == len(channels) - 1\n            resnet = ResnetBlock1D(dim=input_channel, dim_out=output_channel, time_emb_dim=time_embed_dim)\n            transformer_blocks = nn.ModuleList(\n                [\n                    BasicTransformerBlock(\n                        dim=output_channel,\n                        num_attention_heads=num_heads,\n                        attention_head_dim=attention_head_dim,\n                        dropout=dropout,\n                        activation_fn=act_fn,\n                    )\n                    for _ in range(n_blocks)\n                ]\n            )\n            downsample = (\n                Downsample1D(output_channel) if not is_last else nn.Conv1d(output_channel, output_channel, 3, padding=1)\n            )\n            self.down_blocks.append(nn.ModuleList([resnet, transformer_blocks, downsample]))\n\n        for _ in range(num_mid_blocks):\n            input_channel = channels[-1]\n            out_channels = channels[-1]\n            resnet = ResnetBlock1D(dim=input_channel, dim_out=output_channel, time_emb_dim=time_embed_dim)\n\n            transformer_blocks = nn.ModuleList(\n                [\n                    BasicTransformerBlock(\n                        dim=output_channel,\n                        num_attention_heads=num_heads,\n                        attention_head_dim=attention_head_dim,\n                        dropout=dropout,\n                        activation_fn=act_fn,\n                    )\n                    for _ in range(n_blocks)\n                ]\n            )\n\n            self.mid_blocks.append(nn.ModuleList([resnet, transformer_blocks]))\n\n        channels = channels[::-1] + (channels[0],)\n        for i in range(len(channels) - 1):\n            input_channel = channels[i] * 2\n            output_channel = channels[i + 1]\n            is_last = i == len(channels) - 2\n            resnet = ResnetBlock1D(\n                dim=input_channel,\n                dim_out=output_channel,\n                time_emb_dim=time_embed_dim,\n            )\n            transformer_blocks = nn.ModuleList(\n                [\n                    BasicTransformerBlock(\n                        dim=output_channel,\n                        num_attention_heads=num_heads,\n                        attention_head_dim=attention_head_dim,\n                        dropout=dropout,\n                        activation_fn=act_fn,\n                    )\n                    for _ in range(n_blocks)\n                ]\n            )\n            upsample = (\n                Upsample1D(output_channel, use_conv_transpose=True)\n                if not is_last\n                else nn.Conv1d(output_channel, output_channel, 3, padding=1)\n            )\n            self.up_blocks.append(nn.ModuleList([resnet, transformer_blocks, upsample]))\n        self.final_block = Block1D(channels[-1], channels[-1])\n        self.final_proj = nn.Conv1d(channels[-1], self.out_channels, 1)\n        self.initialize_weights()\n\n    def initialize_weights(self):\n        for m in self.modules():\n            if isinstance(m, nn.Conv1d):\n                nn.init.kaiming_normal_(m.weight, nonlinearity=\"relu\")\n                if m.bias is not None:\n                    nn.init.constant_(m.bias, 0)\n            elif isinstance(m, nn.GroupNorm):\n                nn.init.constant_(m.weight, 1)\n                nn.init.constant_(m.bias, 0)\n            elif isinstance(m, nn.Linear):\n                nn.init.kaiming_normal_(m.weight, nonlinearity=\"relu\")\n                if m.bias is not None:\n                    nn.init.constant_(m.bias, 0)\n\n    def forward(self, x, mask, mu, t, spks=None, cond=None, streaming=False):\n        \"\"\"Forward pass of the UNet1DConditional model.\n\n        Args:\n            x (torch.Tensor): shape (batch_size, in_channels, time)\n            mask (_type_): shape (batch_size, 1, time)\n            t (_type_): shape (batch_size)\n            spks (_type_, optional): shape: (batch_size, condition_channels). Defaults to None.\n            cond (_type_, optional): placeholder for future use. Defaults to None.\n\n        Raises:\n            ValueError: _description_\n            ValueError: _description_\n\n        Returns:\n            _type_: _description_\n        \"\"\"\n\n        t = self.time_embeddings(t).to(t.dtype)\n        t = self.time_mlp(t)\n\n        x = pack([x, mu], \"b * t\")[0]\n\n        if spks is not None:\n            spks = repeat(spks, \"b c -> b c t\", t=x.shape[-1])\n            x = pack([x, spks], \"b * t\")[0]\n        if cond is not None:\n            x = pack([x, cond], \"b * t\")[0]\n\n        hiddens = []\n        masks = [mask]\n        for resnet, transformer_blocks, downsample in self.down_blocks:\n            mask_down = masks[-1]\n            x = resnet(x, mask_down, t)\n            x = rearrange(x, \"b c t -> b t c\").contiguous()\n            attn_mask = add_optional_chunk_mask(x, mask_down.bool(), False, False, 0, 0, -1).repeat(1, x.size(1), 1)\n            attn_mask = mask_to_bias(attn_mask, x.dtype)\n            for transformer_block in transformer_blocks:\n                x = transformer_block(\n                    hidden_states=x,\n                    attention_mask=attn_mask,\n                    timestep=t,\n                )\n            x = rearrange(x, \"b t c -> b c t\").contiguous()\n            hiddens.append(x)  # Save hidden states for skip connections\n            x = downsample(x * mask_down)\n            masks.append(mask_down[:, :, ::2])\n        masks = masks[:-1]\n        mask_mid = masks[-1]\n\n        for resnet, transformer_blocks in self.mid_blocks:\n            x = resnet(x, mask_mid, t)\n            x = rearrange(x, \"b c t -> b t c\").contiguous()\n            attn_mask = add_optional_chunk_mask(x, mask_mid.bool(), False, False, 0, 0, -1).repeat(1, x.size(1), 1)\n            attn_mask = mask_to_bias(attn_mask, x.dtype)\n            for transformer_block in transformer_blocks:\n                x = transformer_block(\n                    hidden_states=x,\n                    attention_mask=attn_mask,\n                    timestep=t,\n                )\n            x = rearrange(x, \"b t c -> b c t\").contiguous()\n\n        for resnet, transformer_blocks, upsample in self.up_blocks:\n            mask_up = masks.pop()\n            skip = hiddens.pop()\n            x = pack([x[:, :, :skip.shape[-1]], skip], \"b * t\")[0]\n            x = resnet(x, mask_up, t)\n            x = rearrange(x, \"b c t -> b t c\").contiguous()\n            attn_mask = add_optional_chunk_mask(x, mask_up.bool(), False, False, 0, 0, -1).repeat(1, x.size(1), 1)\n            attn_mask = mask_to_bias(attn_mask, x.dtype)\n            for transformer_block in transformer_blocks:\n                x = transformer_block(\n                    hidden_states=x,\n                    attention_mask=attn_mask,\n                    timestep=t,\n                )\n            x = rearrange(x, \"b t c -> b c t\").contiguous()\n            x = upsample(x * mask_up)\n        x = self.final_block(x, mask_up)\n        output = self.final_proj(x * mask_up)\n        return output * mask\n\n\nclass CausalConditionalDecoder(ConditionalDecoder):\n    def __init__(\n        self,\n        in_channels,\n        out_channels,\n        channels=(256, 256),\n        dropout=0.05,\n        attention_head_dim=64,\n        n_blocks=1,\n        num_mid_blocks=2,\n        num_heads=4,\n        act_fn=\"snake\",\n        static_chunk_size=50,\n        num_decoding_left_chunks=2,\n    ):\n        \"\"\"\n        This decoder requires an input with the same shape of the target. So, if your text content\n        is shorter or longer than the outputs, please re-sampling it before feeding to the decoder.\n        \"\"\"\n        torch.nn.Module.__init__(self)\n        channels = tuple(channels)\n        self.in_channels = in_channels\n        self.out_channels = out_channels\n        self.time_embeddings = SinusoidalPosEmb(in_channels)\n        time_embed_dim = channels[0] * 4\n        self.time_mlp = TimestepEmbedding(\n            in_channels=in_channels,\n            time_embed_dim=time_embed_dim,\n            act_fn=\"silu\",\n        )\n        self.static_chunk_size = static_chunk_size\n        self.num_decoding_left_chunks = num_decoding_left_chunks\n        self.down_blocks = nn.ModuleList([])\n        self.mid_blocks = nn.ModuleList([])\n        self.up_blocks = nn.ModuleList([])\n\n        output_channel = in_channels\n        for i in range(len(channels)):  # pylint: disable=consider-using-enumerate\n            input_channel = output_channel\n            output_channel = channels[i]\n            is_last = i == len(channels) - 1\n            resnet = CausalResnetBlock1D(dim=input_channel, dim_out=output_channel, time_emb_dim=time_embed_dim)\n            transformer_blocks = nn.ModuleList(\n                [\n                    BasicTransformerBlock(\n                        dim=output_channel,\n                        num_attention_heads=num_heads,\n                        attention_head_dim=attention_head_dim,\n                        dropout=dropout,\n                        activation_fn=act_fn,\n                    )\n                    for _ in range(n_blocks)\n                ]\n            )\n            downsample = (\n                Downsample1D(output_channel) if not is_last else CausalConv1d(output_channel, output_channel, 3)\n            )\n            self.down_blocks.append(nn.ModuleList([resnet, transformer_blocks, downsample]))\n\n        for _ in range(num_mid_blocks):\n            input_channel = channels[-1]\n            out_channels = channels[-1]\n            resnet = CausalResnetBlock1D(dim=input_channel, dim_out=output_channel, time_emb_dim=time_embed_dim)\n\n            transformer_blocks = nn.ModuleList(\n                [\n                    BasicTransformerBlock(\n                        dim=output_channel,\n                        num_attention_heads=num_heads,\n                        attention_head_dim=attention_head_dim,\n                        dropout=dropout,\n                        activation_fn=act_fn,\n                    )\n                    for _ in range(n_blocks)\n                ]\n            )\n\n            self.mid_blocks.append(nn.ModuleList([resnet, transformer_blocks]))\n\n        channels = channels[::-1] + (channels[0],)\n        for i in range(len(channels) - 1):\n            input_channel = channels[i] * 2\n            output_channel = channels[i + 1]\n            is_last = i == len(channels) - 2\n            resnet = CausalResnetBlock1D(\n                dim=input_channel,\n                dim_out=output_channel,\n                time_emb_dim=time_embed_dim,\n            )\n            transformer_blocks = nn.ModuleList(\n                [\n                    BasicTransformerBlock(\n                        dim=output_channel,\n                        num_attention_heads=num_heads,\n                        attention_head_dim=attention_head_dim,\n                        dropout=dropout,\n                        activation_fn=act_fn,\n                    )\n                    for _ in range(n_blocks)\n                ]\n            )\n            upsample = (\n                Upsample1D(output_channel, use_conv_transpose=True)\n                if not is_last\n                else CausalConv1d(output_channel, output_channel, 3)\n            )\n            self.up_blocks.append(nn.ModuleList([resnet, transformer_blocks, upsample]))\n        self.final_block = CausalBlock1D(channels[-1], channels[-1])\n        self.final_proj = nn.Conv1d(channels[-1], self.out_channels, 1)\n        self.initialize_weights()\n\n    def forward(self, x, mask, mu, t, spks=None, cond=None, streaming=False):\n        \"\"\"Forward pass of the UNet1DConditional model.\n\n        Args:\n            x (torch.Tensor): shape (batch_size, in_channels, time)\n            mask (_type_): shape (batch_size, 1, time)\n            t (_type_): shape (batch_size)\n            spks (_type_, optional): shape: (batch_size, condition_channels). Defaults to None.\n            cond (_type_, optional): placeholder for future use. Defaults to None.\n\n        Raises:\n            ValueError: _description_\n            ValueError: _description_\n\n        Returns:\n            _type_: _description_\n        \"\"\"\n        t = self.time_embeddings(t).to(t.dtype)\n        t = self.time_mlp(t)\n\n        x = pack([x, mu], \"b * t\")[0]\n\n        if spks is not None:\n            spks = repeat(spks, \"b c -> b c t\", t=x.shape[-1])\n            x = pack([x, spks], \"b * t\")[0]\n        if cond is not None:\n            x = pack([x, cond], \"b * t\")[0]\n\n        hiddens = []\n        masks = [mask]\n        for resnet, transformer_blocks, downsample in self.down_blocks:\n            mask_down = masks[-1]\n            x = resnet(x, mask_down, t)\n            x = rearrange(x, \"b c t -> b t c\").contiguous()\n            if streaming is True:\n                attn_mask = add_optional_chunk_mask(x, mask_down.bool(), False, False, 0, self.static_chunk_size, -1)\n            else:\n                attn_mask = add_optional_chunk_mask(x, mask_down.bool(), False, False, 0, 0, -1).repeat(1, x.size(1), 1)\n            attn_mask = mask_to_bias(attn_mask, x.dtype)\n            for transformer_block in transformer_blocks:\n                x = transformer_block(\n                    hidden_states=x,\n                    attention_mask=attn_mask,\n                    timestep=t,\n                )\n            x = rearrange(x, \"b t c -> b c t\").contiguous()\n            hiddens.append(x)  # Save hidden states for skip connections\n            x = downsample(x * mask_down)\n            masks.append(mask_down[:, :, ::2])\n        masks = masks[:-1]\n        mask_mid = masks[-1]\n\n        for resnet, transformer_blocks in self.mid_blocks:\n            x = resnet(x, mask_mid, t)\n            x = rearrange(x, \"b c t -> b t c\").contiguous()\n            if streaming is True:\n                attn_mask = add_optional_chunk_mask(x, mask_mid.bool(), False, False, 0, self.static_chunk_size, -1)\n            else:\n                attn_mask = add_optional_chunk_mask(x, mask_mid.bool(), False, False, 0, 0, -1).repeat(1, x.size(1), 1)\n            attn_mask = mask_to_bias(attn_mask, x.dtype)\n            for transformer_block in transformer_blocks:\n                x = transformer_block(\n                    hidden_states=x,\n                    attention_mask=attn_mask,\n                    timestep=t,\n                )\n            x = rearrange(x, \"b t c -> b c t\").contiguous()\n\n        for resnet, transformer_blocks, upsample in self.up_blocks:\n            mask_up = masks.pop()\n            skip = hiddens.pop()\n            x = pack([x[:, :, :skip.shape[-1]], skip], \"b * t\")[0]\n            x = resnet(x, mask_up, t)\n            x = rearrange(x, \"b c t -> b t c\").contiguous()\n            if streaming is True:\n                attn_mask = add_optional_chunk_mask(x, mask_up.bool(), False, False, 0, self.static_chunk_size, -1)\n            else:\n                attn_mask = add_optional_chunk_mask(x, mask_up.bool(), False, False, 0, 0, -1).repeat(1, x.size(1), 1)\n            attn_mask = mask_to_bias(attn_mask, x.dtype)\n            for transformer_block in transformer_blocks:\n                x = transformer_block(\n                    hidden_states=x,\n                    attention_mask=attn_mask,\n                    timestep=t,\n                )\n            x = rearrange(x, \"b t c -> b c t\").contiguous()\n            x = upsample(x * mask_up)\n        x = self.final_block(x, mask_up)\n        output = self.final_proj(x * mask_up)\n        return output * mask\n"
  },
  {
    "path": "cosyvoice/flow/flow.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu, Zhihao Du)\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.\nimport os, logging\nimport random\nfrom typing import Dict, Optional\nimport torch\nimport torch.nn as nn\nfrom torch.nn import functional as F\nfrom omegaconf import DictConfig\nfrom cosyvoice.utils.mask import make_pad_mask\nfrom cosyvoice.utils.onnx import SpeechTokenExtractor, online_feature, onnx_path\n\n\nclass MaskedDiffWithXvec(torch.nn.Module):\n    def __init__(self,\n                 input_size: int = 512,\n                 output_size: int = 80,\n                 spk_embed_dim: int = 192,\n                 output_type: str = \"mel\",\n                 vocab_size: int = 4096,\n                 input_frame_rate: int = 50,\n                 only_mask_loss: bool = True,\n                 encoder: torch.nn.Module = None,\n                 length_regulator: torch.nn.Module = None,\n                 decoder: torch.nn.Module = None,\n                 decoder_conf: Dict = {'in_channels': 240, 'out_channel': 80, 'spk_emb_dim': 80, 'n_spks': 1,\n                                       'cfm_params': DictConfig({'sigma_min': 1e-06, 'solver': 'euler', 't_scheduler': 'cosine',\n                                                                 'training_cfg_rate': 0.2, 'inference_cfg_rate': 0.7, 'reg_loss_type': 'l1'}),\n                                       'decoder_params': {'channels': [256, 256], 'dropout': 0.0, 'attention_head_dim': 64,\n                                                          'n_blocks': 4, 'num_mid_blocks': 12, 'num_heads': 8, 'act_fn': 'gelu'}}):\n        super().__init__()\n        self.input_size = input_size\n        self.output_size = output_size\n        self.decoder_conf = decoder_conf\n        self.vocab_size = vocab_size\n        self.output_type = output_type\n        self.input_frame_rate = input_frame_rate\n        logging.info(f\"input frame rate={self.input_frame_rate}\")\n        self.input_embedding = nn.Embedding(vocab_size, input_size)\n        self.spk_embed_affine_layer = torch.nn.Linear(spk_embed_dim, output_size)\n        self.encoder = encoder\n        self.encoder_proj = torch.nn.Linear(self.encoder.output_size(), output_size)\n        self.decoder = decoder\n        self.length_regulator = length_regulator\n        self.only_mask_loss = only_mask_loss\n\n    def forward(\n            self,\n            batch: dict,\n            device: torch.device,\n    ) -> Dict[str, Optional[torch.Tensor]]:\n        token = batch['speech_token'].to(device)\n        token_len = batch['speech_token_len'].to(device)\n        feat = batch['speech_feat'].to(device)\n        feat_len = batch['speech_feat_len'].to(device)\n        embedding = batch['embedding'].to(device)\n\n        # xvec projection\n        embedding = F.normalize(embedding, dim=1)\n        embedding = self.spk_embed_affine_layer(embedding)\n\n        # concat text and prompt_text\n        mask = (~make_pad_mask(token_len)).float().unsqueeze(-1).to(device)\n        token = self.input_embedding(torch.clamp(token, min=0)) * mask\n\n        # text encode\n        h, h_lengths = self.encoder(token, token_len)\n        h = self.encoder_proj(h)\n        h, h_lengths = self.length_regulator(h, feat_len)\n\n        # get conditions\n        conds = torch.zeros(feat.shape, device=token.device)\n        for i, j in enumerate(feat_len):\n            if random.random() < 0.5:\n                continue\n            index = random.randint(0, int(0.3 * j))\n            conds[i, :index] = feat[i, :index]\n        conds = conds.transpose(1, 2)\n\n        mask = (~make_pad_mask(feat_len)).to(h)\n        # NOTE this is unnecessary, feat/h already same shape\n        loss, _ = self.decoder.compute_loss(\n            feat.transpose(1, 2).contiguous(),\n            mask.unsqueeze(1),\n            h.transpose(1, 2).contiguous(),\n            embedding,\n            cond=conds\n        )\n        return {'loss': loss}\n\n    @torch.inference_mode()\n    def inference(self,\n                  token,\n                  token_len,\n                  prompt_token,\n                  prompt_token_len,\n                  prompt_feat,\n                  prompt_feat_len,\n                  embedding,\n                  flow_cache):\n        assert token.shape[0] == 1\n        # xvec projection\n        embedding = F.normalize(embedding, dim=1)\n        embedding = self.spk_embed_affine_layer(embedding)\n\n        # concat speech token and prompt speech token\n        token_len1, token_len2 = prompt_token.shape[1], token.shape[1]\n        token, token_len = torch.concat([prompt_token, token], dim=1), prompt_token_len + token_len\n        mask = (~make_pad_mask(token_len)).unsqueeze(-1).to(embedding)\n        token = self.input_embedding(torch.clamp(token, min=0)) * mask\n\n        # text encode\n        h, h_lengths = self.encoder(token, token_len)\n        h = self.encoder_proj(h)\n        mel_len1, mel_len2 = prompt_feat.shape[1], int(token_len2 / self.input_frame_rate * 22050 / 256)\n        h, h_lengths = self.length_regulator.inference(h[:, :token_len1], h[:, token_len1:], mel_len1, mel_len2, self.input_frame_rate)\n\n        # get conditions\n        conds = torch.zeros([1, mel_len1 + mel_len2, self.output_size], device=token.device).to(h.dtype)\n        conds[:, :mel_len1] = prompt_feat\n        conds = conds.transpose(1, 2)\n\n        mask = (~make_pad_mask(torch.tensor([mel_len1 + mel_len2]))).to(h)\n        feat, flow_cache = self.decoder(\n            mu=h.transpose(1, 2).contiguous(),\n            mask=mask.unsqueeze(1),\n            spks=embedding,\n            cond=conds,\n            n_timesteps=10,\n            prompt_len=mel_len1,\n            cache=flow_cache\n        )\n        feat = feat[:, :, mel_len1:]\n        assert feat.shape[2] == mel_len2\n        return feat.float(), flow_cache\n\n\nclass CausalMaskedDiffWithXvec(torch.nn.Module):\n    def __init__(self,\n                 input_size: int = 512,\n                 output_size: int = 80,\n                 spk_embed_dim: int = 192,\n                 output_type: str = \"mel\",\n                 vocab_size: int = 4096,\n                 input_frame_rate: int = 50,\n                 only_mask_loss: bool = True,\n                 token_mel_ratio: int = 2,\n                 pre_lookahead_len: int = 3,\n                 encoder: torch.nn.Module = None,\n                 decoder: torch.nn.Module = None,\n                 decoder_conf: Dict = {'in_channels': 240, 'out_channel': 80, 'spk_emb_dim': 80, 'n_spks': 1,\n                                       'cfm_params': DictConfig({'sigma_min': 1e-06, 'solver': 'euler', 't_scheduler': 'cosine',\n                                                                 'training_cfg_rate': 0.2, 'inference_cfg_rate': 0.7, 'reg_loss_type': 'l1'}),\n                                       'decoder_params': {'channels': [256, 256], 'dropout': 0.0, 'attention_head_dim': 64,\n                                                          'n_blocks': 4, 'num_mid_blocks': 12, 'num_heads': 8, 'act_fn': 'gelu'}}):\n        super().__init__()\n        self.input_size = input_size\n        self.output_size = output_size\n        self.decoder_conf = decoder_conf\n        self.vocab_size = vocab_size\n        self.output_type = output_type\n        self.input_frame_rate = input_frame_rate\n        logging.info(f\"input frame rate={self.input_frame_rate}\")\n        self.input_embedding = nn.Embedding(vocab_size, input_size)\n        self.spk_embed_affine_layer = torch.nn.Linear(spk_embed_dim, output_size)\n        self.encoder = encoder\n        self.encoder_proj = torch.nn.Linear(self.encoder.output_size(), output_size)\n        self.decoder = decoder\n        self.only_mask_loss = only_mask_loss\n        self.token_mel_ratio = token_mel_ratio\n        self.pre_lookahead_len = pre_lookahead_len\n        if online_feature is True:\n            self.speech_token_extractor = SpeechTokenExtractor(model_path=os.path.join(onnx_path, 'speech_tokenizer_v2.batch.onnx'))\n\n    def forward(\n            self,\n            batch: dict,\n            device: torch.device,\n    ) -> Dict[str, Optional[torch.Tensor]]:\n        if 'speech_token' not in batch:\n            token, token_len = self.speech_token_extractor.inference(batch['whisper_feat'], batch['whisper_feat_len'], device)\n        else:\n            token = batch['speech_token'].to(device)\n            token_len = batch['speech_token_len'].to(device)\n        feat = batch['speech_feat'].to(device)\n        feat_len = batch['speech_feat_len'].to(device)\n        embedding = batch['embedding'].to(device)\n\n        # NOTE unified training, static_chunk_size > 0 or = 0\n        streaming = True if random.random() < 0.5 else False\n\n        # xvec projection\n        embedding = F.normalize(embedding, dim=1)\n        embedding = self.spk_embed_affine_layer(embedding)\n\n        # concat text and prompt_text\n        mask = (~make_pad_mask(token_len)).float().unsqueeze(-1).to(device)\n        token = self.input_embedding(torch.clamp(token, min=0)) * mask\n\n        # text encode\n        h, h_lengths = self.encoder(token, token_len, streaming=streaming)\n        h = self.encoder_proj(h)\n\n        # get conditions\n        conds = torch.zeros(feat.shape, device=token.device)\n        for i, j in enumerate(feat_len):\n            if random.random() < 0.5:\n                continue\n            index = random.randint(0, int(0.3 * j))\n            conds[i, :index] = feat[i, :index]\n        conds = conds.transpose(1, 2)\n\n        mask = (~make_pad_mask(h_lengths.sum(dim=-1).squeeze(dim=1))).to(h)\n        loss, _ = self.decoder.compute_loss(\n            feat.transpose(1, 2).contiguous(),\n            mask.unsqueeze(1),\n            h.transpose(1, 2).contiguous(),\n            embedding,\n            cond=conds,\n            streaming=streaming,\n        )\n        return {'loss': loss}\n\n    @torch.inference_mode()\n    def inference(self,\n                  token,\n                  token_len,\n                  prompt_token,\n                  prompt_token_len,\n                  prompt_feat,\n                  prompt_feat_len,\n                  embedding,\n                  streaming,\n                  finalize):\n        assert token.shape[0] == 1\n        # xvec projection\n        embedding = F.normalize(embedding, dim=1)\n        embedding = self.spk_embed_affine_layer(embedding)\n\n        # concat text and prompt_text\n        token, token_len = torch.concat([prompt_token, token], dim=1), prompt_token_len + token_len\n        mask = (~make_pad_mask(token_len)).unsqueeze(-1).to(embedding)\n        token = self.input_embedding(torch.clamp(token, min=0)) * mask\n\n        # text encode\n        if finalize is True:\n            h, h_lengths = self.encoder(token, token_len, streaming=streaming)\n        else:\n            token, context = token[:, :-self.pre_lookahead_len], token[:, -self.pre_lookahead_len:]\n            h, h_lengths = self.encoder(token, token_len, context=context, streaming=streaming)\n        mel_len1, mel_len2 = prompt_feat.shape[1], h.shape[1] - prompt_feat.shape[1]\n        h = self.encoder_proj(h)\n\n        # get conditions\n        conds = torch.zeros([1, mel_len1 + mel_len2, self.output_size], device=token.device).to(h.dtype)\n        conds[:, :mel_len1] = prompt_feat\n        conds = conds.transpose(1, 2)\n\n        mask = (~make_pad_mask(torch.tensor([mel_len1 + mel_len2]))).to(h)\n        feat, _ = self.decoder(\n            mu=h.transpose(1, 2).contiguous(),\n            mask=mask.unsqueeze(1),\n            spks=embedding,\n            cond=conds,\n            n_timesteps=10,\n            streaming=streaming\n        )\n        feat = feat[:, :, mel_len1:]\n        assert feat.shape[2] == mel_len2\n        return feat.float(), None\n\n\nclass CausalMaskedDiffWithDiT(torch.nn.Module):\n    def __init__(self,\n                 input_size: int = 512,\n                 output_size: int = 80,\n                 spk_embed_dim: int = 192,\n                 output_type: str = \"mel\",\n                 vocab_size: int = 4096,\n                 input_frame_rate: int = 50,\n                 only_mask_loss: bool = True,\n                 token_mel_ratio: int = 2,\n                 pre_lookahead_len: int = 3,\n                 pre_lookahead_layer: torch.nn.Module = None,\n                 decoder: torch.nn.Module = None,\n                 decoder_conf: Dict = {'in_channels': 240, 'out_channel': 80, 'spk_emb_dim': 80, 'n_spks': 1,\n                                       'cfm_params': DictConfig({'sigma_min': 1e-06, 'solver': 'euler', 't_scheduler': 'cosine',\n                                                                 'training_cfg_rate': 0.2, 'inference_cfg_rate': 0.7, 'reg_loss_type': 'l1'}),\n                                       'decoder_params': {'channels': [256, 256], 'dropout': 0.0, 'attention_head_dim': 64,\n                                                          'n_blocks': 4, 'num_mid_blocks': 12, 'num_heads': 8, 'act_fn': 'gelu'}}):\n        super().__init__()\n        self.input_size = input_size\n        self.output_size = output_size\n        self.decoder_conf = decoder_conf\n        self.vocab_size = vocab_size\n        self.output_type = output_type\n        self.input_frame_rate = input_frame_rate\n        logging.info(f\"input frame rate={self.input_frame_rate}\")\n        self.input_embedding = nn.Embedding(vocab_size, input_size)\n        self.spk_embed_affine_layer = torch.nn.Linear(spk_embed_dim, output_size)\n        self.pre_lookahead_len = pre_lookahead_len\n        self.pre_lookahead_layer = pre_lookahead_layer\n        self.decoder = decoder\n        self.only_mask_loss = only_mask_loss\n        self.token_mel_ratio = token_mel_ratio\n        if online_feature is True:\n            self.speech_token_extractor = SpeechTokenExtractor(model_path=os.path.join(onnx_path, 'speech_tokenizer_v3.batch.onnx'))\n\n    def forward(\n            self,\n            batch: dict,\n            device: torch.device,\n    ) -> Dict[str, Optional[torch.Tensor]]:\n        if 'speech_token' not in batch:\n            token, token_len = self.speech_token_extractor.inference(batch['whisper_feat'], batch['whisper_feat_len'], device)\n        else:\n            token = batch['speech_token'].to(device)\n            token_len = batch['speech_token_len'].to(device)\n        feat = batch['speech_feat'].to(device)\n        feat_len = batch['speech_feat_len'].to(device)\n        embedding = batch['embedding'].to(device)\n\n        # NOTE unified training, static_chunk_size > 0 or = 0\n        streaming = True if random.random() < 0.5 else False\n\n        # xvec projection\n        embedding = F.normalize(embedding, dim=1)\n        embedding = self.spk_embed_affine_layer(embedding)\n\n        # concat text and prompt_text\n        mask = (~make_pad_mask(token_len)).float().unsqueeze(-1).to(device)\n        token = self.input_embedding(torch.clamp(token, min=0)) * mask\n\n        # text encode\n        h = self.pre_lookahead_layer(token)\n        h = h.repeat_interleave(self.token_mel_ratio, dim=1)\n        mask = mask.repeat_interleave(self.token_mel_ratio, dim=1).squeeze(dim=-1)\n\n        # get conditions\n        conds = torch.zeros(feat.shape, device=token.device)\n        for i, j in enumerate(feat_len):\n            if random.random() < 0.5:\n                continue\n            index = random.randint(0, int(0.3 * j))\n            conds[i, :index] = feat[i, :index]\n        conds = conds.transpose(1, 2)\n\n        loss, _ = self.decoder.compute_loss(\n            feat.transpose(1, 2).contiguous(),\n            mask.unsqueeze(1),\n            h.transpose(1, 2).contiguous(),\n            embedding,\n            cond=conds,\n            streaming=streaming,\n        )\n        return {'loss': loss}\n\n    @torch.inference_mode()\n    def inference(self,\n                  token,\n                  token_len,\n                  prompt_token,\n                  prompt_token_len,\n                  prompt_feat,\n                  prompt_feat_len,\n                  embedding,\n                  streaming,\n                  finalize):\n        assert token.shape[0] == 1\n        # xvec projection\n        embedding = F.normalize(embedding, dim=1)\n        embedding = self.spk_embed_affine_layer(embedding)\n\n        # concat text and prompt_text\n        token, token_len = torch.concat([prompt_token, token], dim=1), prompt_token_len + token_len\n        mask = (~make_pad_mask(token_len)).unsqueeze(-1).to(embedding)\n        token = self.input_embedding(torch.clamp(token, min=0)) * mask\n\n        # text encode\n        if finalize is True:\n            h = self.pre_lookahead_layer(token)\n        else:\n            h = self.pre_lookahead_layer(token[:, :-self.pre_lookahead_len], context=token[:, -self.pre_lookahead_len:])\n        h = h.repeat_interleave(self.token_mel_ratio, dim=1)\n        mel_len1, mel_len2 = prompt_feat.shape[1], h.shape[1] - prompt_feat.shape[1]\n\n        # get conditions\n        conds = torch.zeros([1, mel_len1 + mel_len2, self.output_size], device=token.device).to(h.dtype)\n        conds[:, :mel_len1] = prompt_feat\n        conds = conds.transpose(1, 2)\n\n        mask = (~make_pad_mask(torch.tensor([mel_len1 + mel_len2]))).to(h)\n        feat, _ = self.decoder(\n            mu=h.transpose(1, 2).contiguous(),\n            mask=mask.unsqueeze(1),\n            spks=embedding,\n            cond=conds,\n            n_timesteps=10,\n            streaming=streaming\n        )\n        feat = feat[:, :, mel_len1:]\n        assert feat.shape[2] == mel_len2\n        return feat.float(), None\n\n\nif __name__ == '__main__':\n    torch.backends.cudnn.deterministic = True\n    torch.backends.cudnn.benchmark = False\n    from hyperpyyaml import load_hyperpyyaml\n    with open('./pretrained_models/Fun-CosyVoice3-0.5B/cosyvoice3.yaml', 'r') as f:\n        configs = load_hyperpyyaml(f, overrides={'llm': None, 'hift': None})\n    model = configs['flow']\n    device = 'cuda' if torch.cuda.is_available() else 'cpu'\n    model.to(device)\n    model.eval()\n    max_len = 10 * model.decoder.estimator.static_chunk_size\n    chunk_size = model.decoder.estimator.static_chunk_size\n    context_size = model.pre_lookahead_layer.pre_lookahead_len\n    token = torch.randint(0, 6561, size=(1, max_len)).to(device)\n    token_len = torch.tensor([max_len]).to(device)\n    prompt_token = torch.randint(0, 6561, size=(1, chunk_size)).to(device)\n    prompt_token_len = torch.tensor([chunk_size]).to(device)\n    prompt_feat = torch.rand(1, chunk_size * 2, 80).to(device)\n    prompt_feat_len = torch.tensor([chunk_size * 2]).to(device)\n    prompt_embedding = torch.rand(1, 192).to(device)\n    pred_gt, _ = model.inference(token, token_len, prompt_token, prompt_token_len, prompt_feat, prompt_feat_len, prompt_embedding, streaming=True, finalize=True)\n    for i in range(0, max_len, chunk_size):\n        finalize = True if i + chunk_size + context_size >= max_len else False\n        pred_chunk, _ = model.inference(token[:, :i + chunk_size + context_size], torch.tensor([token[:, :i + chunk_size + context_size].shape[1]]).to(device),\n                                        prompt_token, prompt_token_len, prompt_feat, prompt_feat_len, prompt_embedding, streaming=True, finalize=finalize)\n        pred_chunk = pred_chunk[:, :, i * model.token_mel_ratio:]\n        print((pred_gt[:, :, i * model.token_mel_ratio: i * model.token_mel_ratio + pred_chunk.shape[2]] - pred_chunk).abs().max().item())\n"
  },
  {
    "path": "cosyvoice/flow/flow_matching.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu, Zhihao Du)\n#               2025 Alibaba Inc (authors: Xiang Lyu, Bofan Zhou)\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.\nimport torch\nimport torch.nn.functional as F\nfrom matcha.models.components.flow_matching import BASECFM\nfrom cosyvoice.utils.common import set_all_random_seed\n\n\nclass ConditionalCFM(BASECFM):\n    def __init__(self, in_channels, cfm_params, n_spks=1, spk_emb_dim=64, estimator: torch.nn.Module = None):\n        super().__init__(\n            n_feats=in_channels,\n            cfm_params=cfm_params,\n            n_spks=n_spks,\n            spk_emb_dim=spk_emb_dim,\n        )\n        self.t_scheduler = cfm_params.t_scheduler\n        self.training_cfg_rate = cfm_params.training_cfg_rate\n        self.inference_cfg_rate = cfm_params.inference_cfg_rate\n        in_channels = in_channels + (spk_emb_dim if n_spks > 0 else 0)\n        # Just change the architecture of the estimator here\n        self.estimator = estimator\n\n    @torch.inference_mode()\n    def forward(self, mu, mask, n_timesteps, temperature=1.0, spks=None, cond=None, prompt_len=0, cache=torch.zeros(1, 80, 0, 2)):\n        \"\"\"Forward diffusion\n\n        Args:\n            mu (torch.Tensor): output of encoder\n                shape: (batch_size, n_feats, mel_timesteps)\n            mask (torch.Tensor): output_mask\n                shape: (batch_size, 1, mel_timesteps)\n            n_timesteps (int): number of diffusion steps\n            temperature (float, optional): temperature for scaling noise. Defaults to 1.0.\n            spks (torch.Tensor, optional): speaker ids. Defaults to None.\n                shape: (batch_size, spk_emb_dim)\n            cond: Not used but kept for future purposes\n\n        Returns:\n            sample: generated mel-spectrogram\n                shape: (batch_size, n_feats, mel_timesteps)\n        \"\"\"\n\n        z = torch.randn_like(mu).to(mu.device).to(mu.dtype) * temperature\n        cache_size = cache.shape[2]\n        # fix prompt and overlap part mu and z\n        if cache_size != 0:\n            z[:, :, :cache_size] = cache[:, :, :, 0]\n            mu[:, :, :cache_size] = cache[:, :, :, 1]\n        z_cache = torch.concat([z[:, :, :prompt_len], z[:, :, -34:]], dim=2)\n        mu_cache = torch.concat([mu[:, :, :prompt_len], mu[:, :, -34:]], dim=2)\n        cache = torch.stack([z_cache, mu_cache], dim=-1)\n\n        t_span = torch.linspace(0, 1, n_timesteps + 1, device=mu.device, dtype=mu.dtype)\n        if self.t_scheduler == 'cosine':\n            t_span = 1 - torch.cos(t_span * 0.5 * torch.pi)\n        return self.solve_euler(z, t_span=t_span, mu=mu, mask=mask, spks=spks, cond=cond), cache\n\n    def solve_euler(self, x, t_span, mu, mask, spks, cond, streaming=False):\n        \"\"\"\n        Fixed euler solver for ODEs.\n        Args:\n            x (torch.Tensor): random noise\n            t_span (torch.Tensor): n_timesteps interpolated\n                shape: (n_timesteps + 1,)\n            mu (torch.Tensor): output of encoder\n                shape: (batch_size, n_feats, mel_timesteps)\n            mask (torch.Tensor): output_mask\n                shape: (batch_size, 1, mel_timesteps)\n            spks (torch.Tensor, optional): speaker ids. Defaults to None.\n                shape: (batch_size, spk_emb_dim)\n            cond: Not used but kept for future purposes\n        \"\"\"\n        t, _, dt = t_span[0], t_span[-1], t_span[1] - t_span[0]\n        t = t.unsqueeze(dim=0)\n\n        # I am storing this because I can later plot it by putting a debugger here and saving it to a file\n        # Or in future might add like a return_all_steps flag\n        sol = []\n\n        # Do not use concat, it may cause memory format changed and trt infer with wrong results!\n        # NOTE when flow run in amp mode, x.dtype is float32, which cause nan in trt fp16 inference, so set dtype=spks.dtype\n        x_in = torch.zeros([2, 80, x.size(2)], device=x.device, dtype=spks.dtype)\n        mask_in = torch.zeros([2, 1, x.size(2)], device=x.device, dtype=spks.dtype)\n        mu_in = torch.zeros([2, 80, x.size(2)], device=x.device, dtype=spks.dtype)\n        t_in = torch.zeros([2], device=x.device, dtype=spks.dtype)\n        spks_in = torch.zeros([2, 80], device=x.device, dtype=spks.dtype)\n        cond_in = torch.zeros([2, 80, x.size(2)], device=x.device, dtype=spks.dtype)\n        for step in range(1, len(t_span)):\n            # Classifier-Free Guidance inference introduced in VoiceBox\n            x_in[:] = x\n            mask_in[:] = mask\n            mu_in[0] = mu\n            t_in[:] = t.unsqueeze(0)\n            spks_in[0] = spks\n            cond_in[0] = cond\n            dphi_dt = self.forward_estimator(\n                x_in, mask_in,\n                mu_in, t_in,\n                spks_in,\n                cond_in,\n                streaming\n            )\n            dphi_dt, cfg_dphi_dt = torch.split(dphi_dt, [x.size(0), x.size(0)], dim=0)\n            dphi_dt = ((1.0 + self.inference_cfg_rate) * dphi_dt - self.inference_cfg_rate * cfg_dphi_dt)\n            x = x + dt * dphi_dt\n            t = t + dt\n            sol.append(x)\n            if step < len(t_span) - 1:\n                dt = t_span[step + 1] - t\n\n        return sol[-1].float()\n\n    def forward_estimator(self, x, mask, mu, t, spks, cond, streaming=False):\n        if isinstance(self.estimator, torch.nn.Module):\n            return self.estimator(x, mask, mu, t, spks, cond, streaming=streaming)\n        else:\n            [estimator, stream], trt_engine = self.estimator.acquire_estimator()\n            # NOTE need to synchronize when switching stream\n            torch.cuda.current_stream().synchronize()\n            with stream:\n                estimator.set_input_shape('x', (2, 80, x.size(2)))\n                estimator.set_input_shape('mask', (2, 1, x.size(2)))\n                estimator.set_input_shape('mu', (2, 80, x.size(2)))\n                estimator.set_input_shape('t', (2,))\n                estimator.set_input_shape('spks', (2, 80))\n                estimator.set_input_shape('cond', (2, 80, x.size(2)))\n                data_ptrs = [x.contiguous().data_ptr(),\n                             mask.contiguous().data_ptr(),\n                             mu.contiguous().data_ptr(),\n                             t.contiguous().data_ptr(),\n                             spks.contiguous().data_ptr(),\n                             cond.contiguous().data_ptr(),\n                             x.data_ptr()]\n                for i, j in enumerate(data_ptrs):\n                    estimator.set_tensor_address(trt_engine.get_tensor_name(i), j)\n                # run trt engine\n                assert estimator.execute_async_v3(torch.cuda.current_stream().cuda_stream) is True\n                torch.cuda.current_stream().synchronize()\n            self.estimator.release_estimator(estimator, stream)\n            return x\n\n    def compute_loss(self, x1, mask, mu, spks=None, cond=None, streaming=False):\n        \"\"\"Computes diffusion loss\n\n        Args:\n            x1 (torch.Tensor): Target\n                shape: (batch_size, n_feats, mel_timesteps)\n            mask (torch.Tensor): target mask\n                shape: (batch_size, 1, mel_timesteps)\n            mu (torch.Tensor): output of encoder\n                shape: (batch_size, n_feats, mel_timesteps)\n            spks (torch.Tensor, optional): speaker embedding. Defaults to None.\n                shape: (batch_size, spk_emb_dim)\n\n        Returns:\n            loss: conditional flow matching loss\n            y: conditional flow\n                shape: (batch_size, n_feats, mel_timesteps)\n        \"\"\"\n        b, _, t = mu.shape\n\n        # random timestep\n        t = torch.rand([b, 1, 1], device=mu.device, dtype=mu.dtype)\n\n        # sample noise p(x_0)\n        z = torch.randn_like(x1)\n\n        y = (1 - (1 - self.sigma_min) * t) * z + t * x1\n        u = x1 - (1 - self.sigma_min) * z\n\n        # during training, we randomly drop condition to trade off mode coverage and sample fidelity\n        if self.training_cfg_rate > 0:\n            cfg_mask = torch.rand(b, device=x1.device) > self.training_cfg_rate\n            mu = mu * cfg_mask.view(-1, 1, 1)\n            spks = spks * cfg_mask.view(-1, 1)\n            cond = cond * cfg_mask.view(-1, 1, 1)\n\n        pred = self.estimator(y, mask, mu, t.squeeze(), spks, cond, streaming=streaming)\n        loss = F.mse_loss(pred * mask, u * mask, reduction=\"sum\") / (torch.sum(mask) * u.shape[1])\n        return loss, y\n\n\nclass CausalConditionalCFM(ConditionalCFM):\n    def __init__(self, in_channels, cfm_params, n_spks=1, spk_emb_dim=64, estimator: torch.nn.Module = None):\n        super().__init__(in_channels, cfm_params, n_spks, spk_emb_dim, estimator)\n        set_all_random_seed(0)\n        self.rand_noise = torch.randn([1, 80, 50 * 300])\n\n    @torch.inference_mode()\n    def forward(self, mu, mask, n_timesteps, temperature=1.0, spks=None, cond=None, streaming=False):\n        \"\"\"Forward diffusion\n\n        Args:\n            mu (torch.Tensor): output of encoder\n                shape: (batch_size, n_feats, mel_timesteps)\n            mask (torch.Tensor): output_mask\n                shape: (batch_size, 1, mel_timesteps)\n            n_timesteps (int): number of diffusion steps\n            temperature (float, optional): temperature for scaling noise. Defaults to 1.0.\n            spks (torch.Tensor, optional): speaker ids. Defaults to None.\n                shape: (batch_size, spk_emb_dim)\n            cond: Not used but kept for future purposes\n\n        Returns:\n            sample: generated mel-spectrogram\n                shape: (batch_size, n_feats, mel_timesteps)\n        \"\"\"\n\n        z = self.rand_noise[:, :, :mu.size(2)].to(mu.device).to(mu.dtype) * temperature\n        # fix prompt and overlap part mu and z\n        t_span = torch.linspace(0, 1, n_timesteps + 1, device=mu.device, dtype=mu.dtype)\n        if self.t_scheduler == 'cosine':\n            t_span = 1 - torch.cos(t_span * 0.5 * torch.pi)\n        return self.solve_euler(z, t_span=t_span, mu=mu, mask=mask, spks=spks, cond=cond, streaming=streaming), None\n"
  },
  {
    "path": "cosyvoice/flow/length_regulator.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu, Zhihao Du)\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.\nfrom typing import Tuple\nimport torch.nn as nn\nimport torch\nfrom torch.nn import functional as F\nfrom cosyvoice.utils.mask import make_pad_mask\n\n\nclass InterpolateRegulator(nn.Module):\n    def __init__(\n            self,\n            channels: int,\n            sampling_ratios: Tuple,\n            out_channels: int = None,\n            groups: int = 1,\n    ):\n        super().__init__()\n        self.sampling_ratios = sampling_ratios\n        out_channels = out_channels or channels\n        model = nn.ModuleList([])\n        if len(sampling_ratios) > 0:\n            for _ in sampling_ratios:\n                module = nn.Conv1d(channels, channels, 3, 1, 1)\n                norm = nn.GroupNorm(groups, channels)\n                act = nn.Mish()\n                model.extend([module, norm, act])\n        model.append(\n            nn.Conv1d(channels, out_channels, 1, 1)\n        )\n        self.model = nn.Sequential(*model)\n\n    def forward(self, x, ylens=None):\n        # x in (B, T, D)\n        mask = (~make_pad_mask(ylens)).to(x).unsqueeze(-1)\n        x = F.interpolate(x.transpose(1, 2).contiguous(), size=ylens.max(), mode='linear')\n        out = self.model(x).transpose(1, 2).contiguous()\n        olens = ylens\n        return out * mask, olens\n\n    def inference(self, x1, x2, mel_len1, mel_len2, input_frame_rate=50):\n        # in inference mode, interploate prompt token and token(head/mid/tail) seprately, so we can get a clear separation point of mel\n        # NOTE 20 corresponds to token_overlap_len in cosyvoice/cli/model.py\n        # x in (B, T, D)\n        if x2.shape[1] > 40:\n            x2_head = F.interpolate(x2[:, :20].transpose(1, 2).contiguous(), size=int(20 / input_frame_rate * 22050 / 256), mode='linear')\n            x2_mid = F.interpolate(x2[:, 20:-20].transpose(1, 2).contiguous(), size=mel_len2 - int(20 / input_frame_rate * 22050 / 256) * 2,\n                                   mode='linear')\n            x2_tail = F.interpolate(x2[:, -20:].transpose(1, 2).contiguous(), size=int(20 / input_frame_rate * 22050 / 256), mode='linear')\n            x2 = torch.concat([x2_head, x2_mid, x2_tail], dim=2)\n        else:\n            x2 = F.interpolate(x2.transpose(1, 2).contiguous(), size=mel_len2, mode='linear')\n        if x1.shape[1] != 0:\n            x1 = F.interpolate(x1.transpose(1, 2).contiguous(), size=mel_len1, mode='linear')\n            x = torch.concat([x1, x2], dim=2)\n        else:\n            x = x2\n        out = self.model(x).transpose(1, 2).contiguous()\n        return out, mel_len1 + mel_len2\n"
  },
  {
    "path": "cosyvoice/hifigan/discriminator.py",
    "content": "import torch\nimport torch.nn as nn\nimport torch.nn.functional as F\ntry:\n    from torch.nn.utils.parametrizations import weight_norm, spectral_norm\nexcept ImportError:\n    from torch.nn.utils import weight_norm, spectral_norm\nfrom typing import List, Optional, Tuple\nfrom einops import rearrange\nfrom torchaudio.transforms import Spectrogram\n\nLRELU_SLOPE = 0.1\n\n\nclass MultipleDiscriminator(nn.Module):\n    def __init__(\n            self, mpd: nn.Module, mrd: nn.Module\n    ):\n        super().__init__()\n        self.mpd = mpd\n        self.mrd = mrd\n\n    def forward(self, y: torch.Tensor, y_hat: torch.Tensor):\n        y_d_rs, y_d_gs, fmap_rs, fmap_gs = [], [], [], []\n        this_y_d_rs, this_y_d_gs, this_fmap_rs, this_fmap_gs = self.mpd(y.unsqueeze(dim=1), y_hat.unsqueeze(dim=1))\n        y_d_rs += this_y_d_rs\n        y_d_gs += this_y_d_gs\n        fmap_rs += this_fmap_rs\n        fmap_gs += this_fmap_gs\n        this_y_d_rs, this_y_d_gs, this_fmap_rs, this_fmap_gs = self.mrd(y, y_hat)\n        y_d_rs += this_y_d_rs\n        y_d_gs += this_y_d_gs\n        fmap_rs += this_fmap_rs\n        fmap_gs += this_fmap_gs\n        return y_d_rs, y_d_gs, fmap_rs, fmap_gs\n\n\nclass MultiResolutionDiscriminator(nn.Module):\n    def __init__(\n        self,\n        fft_sizes: Tuple[int, ...] = (2048, 1024, 512),\n        num_embeddings: Optional[int] = None,\n    ):\n        \"\"\"\n        Multi-Resolution Discriminator module adapted from https://github.com/descriptinc/descript-audio-codec.\n        Additionally, it allows incorporating conditional information with a learned embeddings table.\n\n        Args:\n            fft_sizes (tuple[int]): Tuple of window lengths for FFT. Defaults to (2048, 1024, 512).\n            num_embeddings (int, optional): Number of embeddings. None means non-conditional discriminator.\n                Defaults to None.\n        \"\"\"\n\n        super().__init__()\n        self.discriminators = nn.ModuleList(\n            [DiscriminatorR(window_length=w, num_embeddings=num_embeddings) for w in fft_sizes]\n        )\n\n    def forward(\n        self, y: torch.Tensor, y_hat: torch.Tensor, bandwidth_id: torch.Tensor = None\n    ) -> Tuple[List[torch.Tensor], List[torch.Tensor], List[List[torch.Tensor]], List[List[torch.Tensor]]]:\n        y_d_rs = []\n        y_d_gs = []\n        fmap_rs = []\n        fmap_gs = []\n\n        for d in self.discriminators:\n            y_d_r, fmap_r = d(x=y, cond_embedding_id=bandwidth_id)\n            y_d_g, fmap_g = d(x=y_hat, cond_embedding_id=bandwidth_id)\n            y_d_rs.append(y_d_r)\n            fmap_rs.append(fmap_r)\n            y_d_gs.append(y_d_g)\n            fmap_gs.append(fmap_g)\n\n        return y_d_rs, y_d_gs, fmap_rs, fmap_gs\n\n\nclass DiscriminatorR(nn.Module):\n    def __init__(\n        self,\n        window_length: int,\n        num_embeddings: Optional[int] = None,\n        channels: int = 32,\n        hop_factor: float = 0.25,\n        bands: Tuple[Tuple[float, float], ...] = ((0.0, 0.1), (0.1, 0.25), (0.25, 0.5), (0.5, 0.75), (0.75, 1.0)),\n    ):\n        super().__init__()\n        self.window_length = window_length\n        self.hop_factor = hop_factor\n        self.spec_fn = Spectrogram(\n            n_fft=window_length, hop_length=int(window_length * hop_factor), win_length=window_length, power=None\n        )\n        n_fft = window_length // 2 + 1\n        bands = [(int(b[0] * n_fft), int(b[1] * n_fft)) for b in bands]\n        self.bands = bands\n        convs = lambda: nn.ModuleList(\n            [\n                weight_norm(nn.Conv2d(2, channels, (3, 9), (1, 1), padding=(1, 4))),\n                weight_norm(nn.Conv2d(channels, channels, (3, 9), (1, 2), padding=(1, 4))),\n                weight_norm(nn.Conv2d(channels, channels, (3, 9), (1, 2), padding=(1, 4))),\n                weight_norm(nn.Conv2d(channels, channels, (3, 9), (1, 2), padding=(1, 4))),\n                weight_norm(nn.Conv2d(channels, channels, (3, 3), (1, 1), padding=(1, 1))),\n            ]\n        )\n        self.band_convs = nn.ModuleList([convs() for _ in range(len(self.bands))])\n\n        if num_embeddings is not None:\n            self.emb = torch.nn.Embedding(num_embeddings=num_embeddings, embedding_dim=channels)\n            torch.nn.init.zeros_(self.emb.weight)\n\n        self.conv_post = weight_norm(nn.Conv2d(channels, 1, (3, 3), (1, 1), padding=(1, 1)))\n\n    def spectrogram(self, x):\n        # Remove DC offset\n        x = x - x.mean(dim=-1, keepdims=True)\n        # Peak normalize the volume of input audio\n        x = 0.8 * x / (x.abs().max(dim=-1, keepdim=True)[0] + 1e-9)\n        x = self.spec_fn(x)\n        x = torch.view_as_real(x)\n        x = rearrange(x, \"b f t c -> b c t f\")\n        # Split into bands\n        x_bands = [x[..., b[0]: b[1]] for b in self.bands]\n        return x_bands\n\n    def forward(self, x: torch.Tensor, cond_embedding_id: torch.Tensor = None):\n        x_bands = self.spectrogram(x)\n        fmap = []\n        x = []\n        for band, stack in zip(x_bands, self.band_convs):\n            for i, layer in enumerate(stack):\n                band = layer(band)\n                band = torch.nn.functional.leaky_relu(band, 0.1)\n                if i > 0:\n                    fmap.append(band)\n            x.append(band)\n        x = torch.cat(x, dim=-1)\n        if cond_embedding_id is not None:\n            emb = self.emb(cond_embedding_id)\n            h = (emb.view(1, -1, 1, 1) * x).sum(dim=1, keepdims=True)\n        else:\n            h = 0\n        x = self.conv_post(x)\n        fmap.append(x)\n        x += h\n\n        return x, fmap\n\n\nclass MultiResSpecDiscriminator(torch.nn.Module):\n\n    def __init__(self,\n                 fft_sizes=[1024, 2048, 512],\n                 hop_sizes=[120, 240, 50],\n                 win_lengths=[600, 1200, 240],\n                 window=\"hann_window\"):\n\n        super(MultiResSpecDiscriminator, self).__init__()\n        self.discriminators = nn.ModuleList([\n            SpecDiscriminator(fft_sizes[0], hop_sizes[0], win_lengths[0], window),\n            SpecDiscriminator(fft_sizes[1], hop_sizes[1], win_lengths[1], window),\n            SpecDiscriminator(fft_sizes[2], hop_sizes[2], win_lengths[2], window)])\n\n    def forward(self, y, y_hat):\n        y_d_rs = []\n        y_d_gs = []\n        fmap_rs = []\n        fmap_gs = []\n        for _, d in enumerate(self.discriminators):\n            y_d_r, fmap_r = d(y)\n            y_d_g, fmap_g = d(y_hat)\n            y_d_rs.append(y_d_r)\n            fmap_rs.append(fmap_r)\n            y_d_gs.append(y_d_g)\n            fmap_gs.append(fmap_g)\n\n        return y_d_rs, y_d_gs, fmap_rs, fmap_gs\n\n\ndef stft(x, fft_size, hop_size, win_length, window):\n    \"\"\"Perform STFT and convert to magnitude spectrogram.\n    Args:\n        x (Tensor): Input signal tensor (B, T).\n        fft_size (int): FFT size.\n        hop_size (int): Hop size.\n        win_length (int): Window length.\n        window (str): Window function type.\n    Returns:\n        Tensor: Magnitude spectrogram (B, #frames, fft_size // 2 + 1).\n    \"\"\"\n    x_stft = torch.stft(x, fft_size, hop_size, win_length, window, return_complex=True)\n\n    # NOTE(kan-bayashi): clamp is needed to avoid nan or inf\n    return torch.abs(x_stft).transpose(2, 1)\n\n\nclass SpecDiscriminator(nn.Module):\n    \"\"\"docstring for Discriminator.\"\"\"\n\n    def __init__(self, fft_size=1024, shift_size=120, win_length=600, window=\"hann_window\", use_spectral_norm=False):\n        super(SpecDiscriminator, self).__init__()\n        norm_f = weight_norm if use_spectral_norm is False else spectral_norm\n        self.fft_size = fft_size\n        self.shift_size = shift_size\n        self.win_length = win_length\n        self.window = getattr(torch, window)(win_length)\n        self.discriminators = nn.ModuleList([\n            norm_f(nn.Conv2d(1, 32, kernel_size=(3, 9), padding=(1, 4))),\n            norm_f(nn.Conv2d(32, 32, kernel_size=(3, 9), stride=(1, 2), padding=(1, 4))),\n            norm_f(nn.Conv2d(32, 32, kernel_size=(3, 9), stride=(1, 2), padding=(1, 4))),\n            norm_f(nn.Conv2d(32, 32, kernel_size=(3, 9), stride=(1, 2), padding=(1, 4))),\n            norm_f(nn.Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))),\n        ])\n\n        self.out = norm_f(nn.Conv2d(32, 1, 3, 1, 1))\n\n    def forward(self, y):\n\n        fmap = []\n        y = y.squeeze(1)\n        y = stft(y, self.fft_size, self.shift_size, self.win_length, self.window.to(y.device))\n        y = y.unsqueeze(1)\n        for _, d in enumerate(self.discriminators):\n            y = d(y)\n            y = F.leaky_relu(y, LRELU_SLOPE)\n            fmap.append(y)\n\n        y = self.out(y)\n        fmap.append(y)\n\n        return torch.flatten(y, 1, -1), fmap\n"
  },
  {
    "path": "cosyvoice/hifigan/f0_predictor.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu, Kai Hu)\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.\nimport torch\nimport torch.nn as nn\ntry:\n    from torch.nn.utils.parametrizations import weight_norm\nexcept ImportError:\n    from torch.nn.utils import weight_norm\nfrom cosyvoice.transformer.convolution import CausalConv1d\n\n\nclass ConvRNNF0Predictor(nn.Module):\n    def __init__(self,\n                 num_class: int = 1,\n                 in_channels: int = 80,\n                 cond_channels: int = 512\n                 ):\n        super().__init__()\n\n        self.num_class = num_class\n        self.condnet = nn.Sequential(\n            weight_norm(\n                nn.Conv1d(in_channels, cond_channels, kernel_size=3, padding=1)\n            ),\n            nn.ELU(),\n            weight_norm(\n                nn.Conv1d(cond_channels, cond_channels, kernel_size=3, padding=1)\n            ),\n            nn.ELU(),\n            weight_norm(\n                nn.Conv1d(cond_channels, cond_channels, kernel_size=3, padding=1)\n            ),\n            nn.ELU(),\n            weight_norm(\n                nn.Conv1d(cond_channels, cond_channels, kernel_size=3, padding=1)\n            ),\n            nn.ELU(),\n            weight_norm(\n                nn.Conv1d(cond_channels, cond_channels, kernel_size=3, padding=1)\n            ),\n            nn.ELU(),\n        )\n        self.classifier = nn.Linear(in_features=cond_channels, out_features=self.num_class)\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        x = self.condnet(x)\n        x = x.transpose(1, 2)\n        return torch.abs(self.classifier(x).squeeze(-1))\n\n\nclass CausalConvRNNF0Predictor(nn.Module):\n    def __init__(self,\n                 num_class: int = 1,\n                 in_channels: int = 80,\n                 cond_channels: int = 512\n                 ):\n        super().__init__()\n\n        self.num_class = num_class\n        self.condnet = nn.Sequential(\n            weight_norm(\n                CausalConv1d(in_channels, cond_channels, kernel_size=4, causal_type='right')\n            ),\n            nn.ELU(),\n            weight_norm(\n                CausalConv1d(cond_channels, cond_channels, kernel_size=3, causal_type='left')\n            ),\n            nn.ELU(),\n            weight_norm(\n                CausalConv1d(cond_channels, cond_channels, kernel_size=3, causal_type='left')\n            ),\n            nn.ELU(),\n            weight_norm(\n                CausalConv1d(cond_channels, cond_channels, kernel_size=3, causal_type='left')\n            ),\n            nn.ELU(),\n            weight_norm(\n                CausalConv1d(cond_channels, cond_channels, kernel_size=3, causal_type='left')\n            ),\n            nn.ELU(),\n        )\n        self.classifier = nn.Linear(in_features=cond_channels, out_features=self.num_class)\n\n    def forward(self, x: torch.Tensor, finalize: bool = True) -> torch.Tensor:\n        if finalize is True:\n            x = self.condnet[0](x)\n        else:\n            x = self.condnet[0](x[:, :, :-self.condnet[0].causal_padding], x[:, :, -self.condnet[0].causal_padding:])\n        for i in range(1, len(self.condnet)):\n            x = self.condnet[i](x)\n        x = x.transpose(1, 2)\n        return torch.abs(self.classifier(x).squeeze(-1))\n"
  },
  {
    "path": "cosyvoice/hifigan/generator.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu, Kai Hu)\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\"\"\"HIFI-GAN\"\"\"\n\nfrom typing import Dict, Optional, List\nimport numpy as np\nfrom scipy.signal import get_window\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom torch.nn import Conv1d\nfrom torch.nn import ConvTranspose1d\nfrom torch.nn.utils import remove_weight_norm\ntry:\n    from torch.nn.utils.parametrizations import weight_norm\nexcept ImportError:\n    from torch.nn.utils import weight_norm\nfrom torch.distributions.uniform import Uniform\nfrom cosyvoice.transformer.convolution import CausalConv1d, CausalConv1dDownSample, CausalConv1dUpsample\nfrom cosyvoice.transformer.activation import Snake\nfrom cosyvoice.utils.common import get_padding\nfrom cosyvoice.utils.common import init_weights\n\n\n\"\"\"hifigan based generator implementation.\n\nThis code is modified from https://github.com/jik876/hifi-gan\n ,https://github.com/kan-bayashi/ParallelWaveGAN and\n https://github.com/NVIDIA/BigVGAN\n\n\"\"\"\n\n\nclass ResBlock(torch.nn.Module):\n    \"\"\"Residual block module in HiFiGAN/BigVGAN.\"\"\"\n    def __init__(\n        self,\n        channels: int = 512,\n        kernel_size: int = 3,\n        dilations: List[int] = [1, 3, 5],\n        causal: bool = False,\n    ):\n        super(ResBlock, self).__init__()\n        self.causal = causal\n        self.convs1 = nn.ModuleList()\n        self.convs2 = nn.ModuleList()\n\n        for dilation in dilations:\n            self.convs1.append(\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=dilation,\n                        padding=get_padding(kernel_size, dilation)) if causal is False else\n                    CausalConv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=dilation,\n                        causal_type='left'\n                    )\n                )\n            )\n            self.convs2.append(\n                weight_norm(\n                    Conv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=1,\n                        padding=get_padding(kernel_size, 1)) if causal is False else\n                    CausalConv1d(\n                        channels,\n                        channels,\n                        kernel_size,\n                        1,\n                        dilation=1,\n                        causal_type='left'\n                    )\n                )\n            )\n        self.convs1.apply(init_weights)\n        self.convs2.apply(init_weights)\n        self.activations1 = nn.ModuleList([\n            Snake(channels, alpha_logscale=False)\n            for _ in range(len(self.convs1))\n        ])\n        self.activations2 = nn.ModuleList([\n            Snake(channels, alpha_logscale=False)\n            for _ in range(len(self.convs2))\n        ])\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        for idx in range(len(self.convs1)):\n            xt = self.activations1[idx](x)\n            xt = self.convs1[idx](xt)\n            xt = self.activations2[idx](xt)\n            xt = self.convs2[idx](xt)\n            x = xt + x\n        return x\n\n    def remove_weight_norm(self):\n        for idx in range(len(self.convs1)):\n            remove_weight_norm(self.convs1[idx])\n            remove_weight_norm(self.convs2[idx])\n\n\nclass SineGen(torch.nn.Module):\n    \"\"\" Definition of sine generator\n    SineGen(samp_rate, harmonic_num = 0,\n            sine_amp = 0.1, noise_std = 0.003,\n            voiced_threshold = 0,\n            flag_for_pulse=False)\n    samp_rate: sampling rate in Hz\n    harmonic_num: number of harmonic overtones (default 0)\n    sine_amp: amplitude of sine-wavefrom (default 0.1)\n    noise_std: std of Gaussian noise (default 0.003)\n    voiced_thoreshold: F0 threshold for U/V classification (default 0)\n    flag_for_pulse: this SinGen is used inside PulseGen (default False)\n    Note: when flag_for_pulse is True, the first time step of a voiced\n        segment is always sin(np.pi) or cos(0)\n    \"\"\"\n\n    def __init__(self, samp_rate, harmonic_num=0,\n                 sine_amp=0.1, noise_std=0.003,\n                 voiced_threshold=0):\n        super(SineGen, self).__init__()\n        self.sine_amp = sine_amp\n        self.noise_std = noise_std\n        self.harmonic_num = harmonic_num\n        self.sampling_rate = samp_rate\n        self.voiced_threshold = voiced_threshold\n\n    def _f02uv(self, f0):\n        # generate uv signal\n        uv = (f0 > self.voiced_threshold).type(torch.float32)\n        return uv\n\n    @torch.no_grad()\n    def forward(self, f0):\n        \"\"\" sine_tensor, uv = forward(f0)\n        input F0: tensor(batchsize=1, dim=1, length)\n                  f0 for unvoiced steps should be 0\n        output sine_tensor: tensor(batchsize=1, length, dim)\n        output uv: tensor(batchsize=1, length, 1)\n        \"\"\"\n        f0 = f0.transpose(1, 2)\n        F_mat = torch.zeros((f0.size(0), self.harmonic_num + 1, f0.size(-1))).to(f0.device)\n        for i in range(self.harmonic_num + 1):\n            F_mat[:, i: i + 1, :] = f0 * (i + 1) / self.sampling_rate\n\n        theta_mat = 2 * np.pi * (torch.cumsum(F_mat, dim=-1) % 1)\n        u_dist = Uniform(low=-np.pi, high=np.pi)\n        phase_vec = u_dist.sample(sample_shape=(f0.size(0), self.harmonic_num + 1, 1)).to(F_mat.device)\n        phase_vec[:, 0, :] = 0\n\n        # generate sine waveforms\n        sine_waves = self.sine_amp * torch.sin(theta_mat + phase_vec)\n\n        # generate uv signal\n        uv = self._f02uv(f0)\n\n        # noise: for unvoiced should be similar to sine_amp\n        #        std = self.sine_amp/3 -> max value ~ self.sine_amp\n        # .       for voiced regions is self.noise_std\n        noise_amp = uv * self.noise_std + (1 - uv) * self.sine_amp / 3\n        noise = noise_amp * torch.randn_like(sine_waves)\n\n        # first: set the unvoiced part to 0 by uv\n        # then: additive noise\n        sine_waves = sine_waves * uv + noise\n        return sine_waves.transpose(1, 2), uv.transpose(1, 2), noise\n\n\nclass SineGen2(torch.nn.Module):\n    \"\"\" Definition of sine generator\n    SineGen(samp_rate, harmonic_num = 0,\n            sine_amp = 0.1, noise_std = 0.003,\n            voiced_threshold = 0,\n            flag_for_pulse=False)\n    samp_rate: sampling rate in Hz\n    harmonic_num: number of harmonic overtones (default 0)\n    sine_amp: amplitude of sine-wavefrom (default 0.1)\n    noise_std: std of Gaussian noise (default 0.003)\n    voiced_thoreshold: F0 threshold for U/V classification (default 0)\n    flag_for_pulse: this SinGen is used inside PulseGen (default False)\n    Note: when flag_for_pulse is True, the first time step of a voiced\n        segment is always sin(np.pi) or cos(0)\n    \"\"\"\n\n    def __init__(self, samp_rate, upsample_scale, harmonic_num=0,\n                 sine_amp=0.1, noise_std=0.003,\n                 voiced_threshold=0,\n                 flag_for_pulse=False,\n                 causal=False):\n        super(SineGen2, self).__init__()\n        self.sine_amp = sine_amp\n        self.noise_std = noise_std\n        self.harmonic_num = harmonic_num\n        self.dim = self.harmonic_num + 1\n        self.sampling_rate = samp_rate\n        self.voiced_threshold = voiced_threshold\n        self.flag_for_pulse = flag_for_pulse\n        self.upsample_scale = upsample_scale\n        self.causal = causal\n        if causal is True:\n            self.rand_ini = torch.rand(1, 9)\n            self.rand_ini[:, 0] = 0\n            self.sine_waves = torch.rand(1, 300 * 24000, 9)\n\n    def _f02uv(self, f0):\n        # generate uv signal\n        uv = (f0 > self.voiced_threshold).type(torch.float32)\n        return uv\n\n    def _f02sine(self, f0_values):\n        \"\"\" f0_values: (batchsize, length, dim)\n            where dim indicates fundamental tone and overtones\n        \"\"\"\n        # convert to F0 in rad. The interger part n can be ignored\n        # because 2 * np.pi * n doesn't affect phase\n        rad_values = (f0_values / self.sampling_rate) % 1\n\n        # initial phase noise (no noise for fundamental component)\n        if self.training is False and self.causal is True:\n            rad_values[:, 0, :] = rad_values[:, 0, :] + self.rand_ini.to(rad_values.device)\n        else:\n            rand_ini = torch.rand(f0_values.shape[0], f0_values.shape[2], device=f0_values.device)\n            rand_ini[:, 0] = 0\n            rad_values[:, 0, :] = rad_values[:, 0, :] + rand_ini\n\n        # instantanouse phase sine[t] = sin(2*pi \\sum_i=1 ^{t} rad)\n        if not self.flag_for_pulse:\n            rad_values = torch.nn.functional.interpolate(rad_values.transpose(1, 2),\n                                                         scale_factor=1 / self.upsample_scale,\n                                                         mode=\"linear\").transpose(1, 2)\n\n            phase = torch.cumsum(rad_values, dim=1) * 2 * np.pi\n            phase = torch.nn.functional.interpolate(phase.transpose(1, 2) * self.upsample_scale,\n                                                    scale_factor=self.upsample_scale, mode=\"nearest\" if self.causal is True else 'linear').transpose(1, 2)\n            sines = torch.sin(phase)\n        else:\n            # If necessary, make sure that the first time step of every\n            # voiced segments is sin(pi) or cos(0)\n            # This is used for pulse-train generation\n\n            # identify the last time step in unvoiced segments\n            uv = self._f02uv(f0_values)\n            uv_1 = torch.roll(uv, shifts=-1, dims=1)\n            uv_1[:, -1, :] = 1\n            u_loc = (uv < 1) * (uv_1 > 0)\n\n            # get the instantanouse phase\n            tmp_cumsum = torch.cumsum(rad_values, dim=1)\n            # different batch needs to be processed differently\n            for idx in range(f0_values.shape[0]):\n                temp_sum = tmp_cumsum[idx, u_loc[idx, :, 0], :]\n                temp_sum[1:, :] = temp_sum[1:, :] - temp_sum[0:-1, :]\n                # stores the accumulation of i.phase within\n                # each voiced segments\n                tmp_cumsum[idx, :, :] = 0\n                tmp_cumsum[idx, u_loc[idx, :, 0], :] = temp_sum\n\n            # rad_values - tmp_cumsum: remove the accumulation of i.phase\n            # within the previous voiced segment.\n            i_phase = torch.cumsum(rad_values - tmp_cumsum, dim=1)\n\n            # get the sines\n            sines = torch.cos(i_phase * 2 * np.pi)\n        return sines\n\n    def forward(self, f0):\n        \"\"\" sine_tensor, uv = forward(f0)\n        input F0: tensor(batchsize=1, length, dim=1)\n                  f0 for unvoiced steps should be 0\n        output sine_tensor: tensor(batchsize=1, length, dim)\n        output uv: tensor(batchsize=1, length, 1)\n        \"\"\"\n        # fundamental component\n        fn = torch.multiply(f0, torch.FloatTensor([[range(1, self.harmonic_num + 2)]]).to(f0.device))\n\n        # generate sine waveforms\n        sine_waves = self._f02sine(fn) * self.sine_amp\n\n        # generate uv signal\n        uv = self._f02uv(f0)\n\n        # noise: for unvoiced should be similar to sine_amp\n        #        std = self.sine_amp/3 -> max value ~ self.sine_amp\n        # .       for voiced regions is self.noise_std\n        noise_amp = uv * self.noise_std + (1 - uv) * self.sine_amp / 3\n        if self.training is False and self.causal is True:\n            noise = noise_amp * self.sine_waves[:, :sine_waves.shape[1]].to(sine_waves.device)\n        else:\n            noise = noise_amp * torch.randn_like(sine_waves)\n\n        # first: set the unvoiced part to 0 by uv\n        # then: additive noise\n        sine_waves = sine_waves * uv + noise\n        return sine_waves, uv, noise\n\n\nclass SourceModuleHnNSF(torch.nn.Module):\n    \"\"\" SourceModule for hn-nsf\n    SourceModule(sampling_rate, harmonic_num=0, sine_amp=0.1,\n                 add_noise_std=0.003, voiced_threshod=0)\n    sampling_rate: sampling_rate in Hz\n    harmonic_num: number of harmonic above F0 (default: 0)\n    sine_amp: amplitude of sine source signal (default: 0.1)\n    add_noise_std: std of additive Gaussian noise (default: 0.003)\n        note that amplitude of noise in unvoiced is decided\n        by sine_amp\n    voiced_threshold: threhold to set U/V given F0 (default: 0)\n    Sine_source, noise_source = SourceModuleHnNSF(F0_sampled)\n    F0_sampled (batchsize, length, 1)\n    Sine_source (batchsize, length, 1)\n    noise_source (batchsize, length 1)\n    uv (batchsize, length, 1)\n    \"\"\"\n\n    def __init__(self, sampling_rate, upsample_scale, harmonic_num=0, sine_amp=0.1,\n                 add_noise_std=0.003, voiced_threshod=0, sinegen_type='1', causal=False):\n        super(SourceModuleHnNSF, self).__init__()\n\n        self.sine_amp = sine_amp\n        self.noise_std = add_noise_std\n\n        # to produce sine waveforms\n        if sinegen_type == '1':\n            self.l_sin_gen = SineGen(sampling_rate, harmonic_num, sine_amp, add_noise_std, voiced_threshod)\n        else:\n            self.l_sin_gen = SineGen2(sampling_rate, upsample_scale, harmonic_num, sine_amp, add_noise_std, voiced_threshod, causal=causal)\n\n        # to merge source harmonics into a single excitation\n        self.l_linear = torch.nn.Linear(harmonic_num + 1, 1)\n        self.l_tanh = torch.nn.Tanh()\n        self.causal = causal\n        if causal is True:\n            self.uv = torch.rand(1, 300 * 24000, 1)\n\n    def forward(self, x):\n        \"\"\"\n        Sine_source, noise_source = SourceModuleHnNSF(F0_sampled)\n        F0_sampled (batchsize, length, 1)\n        Sine_source (batchsize, length, 1)\n        noise_source (batchsize, length 1)\n        \"\"\"\n        # source for harmonic branch\n        with torch.no_grad():\n            sine_wavs, uv, _ = self.l_sin_gen(x)\n        sine_merge = self.l_tanh(self.l_linear(sine_wavs))\n\n        # source for noise branch, in the same shape as uv\n        if self.training is False and self.causal is True:\n            noise = self.uv[:, :uv.shape[1]] * self.sine_amp / 3\n        else:\n            noise = torch.randn_like(uv) * self.sine_amp / 3\n        return sine_merge, noise, uv\n\n\nclass HiFTGenerator(nn.Module):\n    \"\"\"\n    HiFTNet Generator: Neural Source Filter + ISTFTNet\n    https://arxiv.org/abs/2309.09493\n    \"\"\"\n    def __init__(\n            self,\n            in_channels: int = 80,\n            base_channels: int = 512,\n            nb_harmonics: int = 8,\n            sampling_rate: int = 22050,\n            nsf_alpha: float = 0.1,\n            nsf_sigma: float = 0.003,\n            nsf_voiced_threshold: float = 10,\n            upsample_rates: List[int] = [8, 8],\n            upsample_kernel_sizes: List[int] = [16, 16],\n            istft_params: Dict[str, int] = {\"n_fft\": 16, \"hop_len\": 4},\n            resblock_kernel_sizes: List[int] = [3, 7, 11],\n            resblock_dilation_sizes: List[List[int]] = [[1, 3, 5], [1, 3, 5], [1, 3, 5]],\n            source_resblock_kernel_sizes: List[int] = [7, 11],\n            source_resblock_dilation_sizes: List[List[int]] = [[1, 3, 5], [1, 3, 5]],\n            lrelu_slope: float = 0.1,\n            audio_limit: float = 0.99,\n            f0_predictor: torch.nn.Module = None,\n    ):\n        super(HiFTGenerator, self).__init__()\n\n        self.out_channels = 1\n        self.nb_harmonics = nb_harmonics\n        self.sampling_rate = sampling_rate\n        self.istft_params = istft_params\n        self.lrelu_slope = lrelu_slope\n        self.audio_limit = audio_limit\n\n        self.num_kernels = len(resblock_kernel_sizes)\n        self.num_upsamples = len(upsample_rates)\n        # NOTE in CosyVoice2, we use the original SineGen implementation\n        self.m_source = SourceModuleHnNSF(\n            sampling_rate=sampling_rate,\n            upsample_scale=np.prod(upsample_rates) * istft_params[\"hop_len\"],\n            harmonic_num=nb_harmonics,\n            sine_amp=nsf_alpha,\n            add_noise_std=nsf_sigma,\n            voiced_threshod=nsf_voiced_threshold,\n            sinegen_type='1' if self.sampling_rate == 22050 else '2',\n            causal=False)\n        self.f0_upsamp = torch.nn.Upsample(scale_factor=np.prod(upsample_rates) * istft_params[\"hop_len\"])\n\n        self.conv_pre = weight_norm(\n            Conv1d(in_channels, base_channels, 7, 1, padding=3)\n        )\n\n        # Up\n        self.ups = nn.ModuleList()\n        for i, (u, k) in enumerate(zip(upsample_rates, upsample_kernel_sizes)):\n            self.ups.append(\n                weight_norm(\n                    ConvTranspose1d(\n                        base_channels // (2**i),\n                        base_channels // (2**(i + 1)),\n                        k,\n                        u,\n                        padding=(k - u) // 2,\n                    )\n                )\n            )\n\n        # Down\n        self.source_downs = nn.ModuleList()\n        self.source_resblocks = nn.ModuleList()\n        downsample_rates = [1] + upsample_rates[::-1][:-1]\n        downsample_cum_rates = np.cumprod(downsample_rates)\n        for i, (u, k, d) in enumerate(zip(downsample_cum_rates[::-1], source_resblock_kernel_sizes, source_resblock_dilation_sizes)):\n            if u == 1:\n                self.source_downs.append(\n                    Conv1d(istft_params[\"n_fft\"] + 2, base_channels // (2 ** (i + 1)), 1, 1)\n                )\n            else:\n                self.source_downs.append(\n                    Conv1d(istft_params[\"n_fft\"] + 2, base_channels // (2 ** (i + 1)), u * 2, u, padding=(u // 2))\n                )\n\n            self.source_resblocks.append(\n                ResBlock(base_channels // (2 ** (i + 1)), k, d)\n            )\n\n        self.resblocks = nn.ModuleList()\n        for i in range(len(self.ups)):\n            ch = base_channels // (2**(i + 1))\n            for _, (k, d) in enumerate(zip(resblock_kernel_sizes, resblock_dilation_sizes)):\n                self.resblocks.append(ResBlock(ch, k, d))\n\n        self.conv_post = weight_norm(Conv1d(ch, istft_params[\"n_fft\"] + 2, 7, 1, padding=3))\n        self.ups.apply(init_weights)\n        self.conv_post.apply(init_weights)\n        self.reflection_pad = nn.ReflectionPad1d((1, 0))\n        self.stft_window = torch.from_numpy(get_window(\"hann\", istft_params[\"n_fft\"], fftbins=True).astype(np.float32))\n        self.f0_predictor = f0_predictor\n\n    def remove_weight_norm(self):\n        print('Removing weight norm...')\n        for l in self.ups:\n            remove_weight_norm(l)\n        for l in self.resblocks:\n            l.remove_weight_norm()\n        remove_weight_norm(self.conv_pre)\n        remove_weight_norm(self.conv_post)\n        self.m_source.remove_weight_norm()\n        for l in self.source_downs:\n            remove_weight_norm(l)\n        for l in self.source_resblocks:\n            l.remove_weight_norm()\n\n    def _stft(self, x):\n        spec = torch.stft(\n            x,\n            self.istft_params[\"n_fft\"], self.istft_params[\"hop_len\"], self.istft_params[\"n_fft\"], window=self.stft_window.to(x.device),\n            return_complex=True)\n        spec = torch.view_as_real(spec)  # [B, F, TT, 2]\n        return spec[..., 0], spec[..., 1]\n\n    def _istft(self, magnitude, phase):\n        magnitude = torch.clip(magnitude, max=1e2)\n        real = magnitude * torch.cos(phase)\n        img = magnitude * torch.sin(phase)\n        inverse_transform = torch.istft(torch.complex(real, img), self.istft_params[\"n_fft\"], self.istft_params[\"hop_len\"],\n                                        self.istft_params[\"n_fft\"], window=self.stft_window.to(magnitude.device))\n        return inverse_transform\n\n    def decode(self, x: torch.Tensor, s: torch.Tensor = torch.zeros(1, 1, 0)) -> torch.Tensor:\n        s_stft_real, s_stft_imag = self._stft(s.squeeze(1))\n        s_stft = torch.cat([s_stft_real, s_stft_imag], dim=1)\n\n        x = self.conv_pre(x)\n        for i in range(self.num_upsamples):\n            x = F.leaky_relu(x, self.lrelu_slope)\n            x = self.ups[i](x)\n\n            if i == self.num_upsamples - 1:\n                x = self.reflection_pad(x)\n\n            # fusion\n            si = self.source_downs[i](s_stft)\n            si = self.source_resblocks[i](si)\n            x = x + si\n\n            xs = None\n            for j in range(self.num_kernels):\n                if xs is None:\n                    xs = self.resblocks[i * self.num_kernels + j](x)\n                else:\n                    xs += self.resblocks[i * self.num_kernels + j](x)\n            x = xs / self.num_kernels\n\n        x = F.leaky_relu(x)\n        x = self.conv_post(x)\n        magnitude = torch.exp(x[:, :self.istft_params[\"n_fft\"] // 2 + 1, :])\n        phase = torch.sin(x[:, self.istft_params[\"n_fft\"] // 2 + 1:, :])  # actually, sin is redundancy\n\n        x = self._istft(magnitude, phase)\n        x = torch.clamp(x, -self.audio_limit, self.audio_limit)\n        return x\n\n    def forward(\n            self,\n            batch: dict,\n            device: torch.device,\n    ) -> Dict[str, Optional[torch.Tensor]]:\n        speech_feat = batch['speech_feat'].transpose(1, 2).to(device)\n        # mel->f0\n        f0 = self.f0_predictor(speech_feat)\n        # f0->source\n        s = self.f0_upsamp(f0[:, None]).transpose(1, 2)  # bs,n,t\n        s, _, _ = self.m_source(s)\n        s = s.transpose(1, 2)\n        # mel+source->speech\n        generated_speech = self.decode(x=speech_feat, s=s)\n        return generated_speech, f0\n\n    @torch.inference_mode()\n    def inference(self, speech_feat: torch.Tensor, cache_source: torch.Tensor = torch.zeros(1, 1, 0)) -> torch.Tensor:\n        # mel->f0\n        f0 = self.f0_predictor(speech_feat)\n        # f0->source\n        s = self.f0_upsamp(f0[:, None]).transpose(1, 2)  # bs,n,t\n        s, _, _ = self.m_source(s)\n        s = s.transpose(1, 2)\n        # use cache_source to avoid glitch\n        if cache_source.shape[2] != 0:\n            s[:, :, :cache_source.shape[2]] = cache_source\n        generated_speech = self.decode(x=speech_feat, s=s)\n        return generated_speech, s\n\n\nclass CausalHiFTGenerator(HiFTGenerator):\n    \"\"\"\n    HiFTNet Generator: Neural Source Filter + ISTFTNet\n    https://arxiv.org/abs/2309.09493\n    \"\"\"\n    def __init__(\n            self,\n            in_channels: int = 80,\n            base_channels: int = 512,\n            nb_harmonics: int = 8,\n            sampling_rate: int = 22050,\n            nsf_alpha: float = 0.1,\n            nsf_sigma: float = 0.003,\n            nsf_voiced_threshold: float = 10,\n            upsample_rates: List[int] = [8, 8],\n            upsample_kernel_sizes: List[int] = [16, 16],\n            istft_params: Dict[str, int] = {\"n_fft\": 16, \"hop_len\": 4},\n            resblock_kernel_sizes: List[int] = [3, 7, 11],\n            resblock_dilation_sizes: List[List[int]] = [[1, 3, 5], [1, 3, 5], [1, 3, 5]],\n            source_resblock_kernel_sizes: List[int] = [7, 11],\n            source_resblock_dilation_sizes: List[List[int]] = [[1, 3, 5], [1, 3, 5]],\n            lrelu_slope: float = 0.1,\n            audio_limit: float = 0.99,\n            conv_pre_look_right: int = 4,\n            f0_predictor: torch.nn.Module = None,\n    ):\n        torch.nn.Module.__init__(self)\n\n        self.out_channels = 1\n        self.nb_harmonics = nb_harmonics\n        self.sampling_rate = sampling_rate\n        self.istft_params = istft_params\n        self.lrelu_slope = lrelu_slope\n        self.audio_limit = audio_limit\n\n        self.num_kernels = len(resblock_kernel_sizes)\n        self.num_upsamples = len(upsample_rates)\n        self.m_source = SourceModuleHnNSF(\n            sampling_rate=sampling_rate,\n            upsample_scale=np.prod(upsample_rates) * istft_params[\"hop_len\"],\n            harmonic_num=nb_harmonics,\n            sine_amp=nsf_alpha,\n            add_noise_std=nsf_sigma,\n            voiced_threshod=nsf_voiced_threshold,\n            sinegen_type='1' if self.sampling_rate == 22050 else '2',\n            causal=True)\n        self.upsample_rates = upsample_rates\n        self.f0_upsamp = torch.nn.Upsample(scale_factor=np.prod(upsample_rates) * istft_params[\"hop_len\"])\n\n        self.conv_pre = weight_norm(\n            CausalConv1d(in_channels, base_channels, conv_pre_look_right + 1, 1, causal_type='right')\n        )\n\n        # Up\n        self.ups = nn.ModuleList()\n        for i, (u, k) in enumerate(zip(upsample_rates, upsample_kernel_sizes)):\n            self.ups.append(\n                weight_norm(\n                    CausalConv1dUpsample(\n                        base_channels // (2**i),\n                        base_channels // (2**(i + 1)),\n                        k,\n                        u,\n                    )\n                )\n            )\n\n        # Down\n        self.source_downs = nn.ModuleList()\n        self.source_resblocks = nn.ModuleList()\n        downsample_rates = [1] + upsample_rates[::-1][:-1]\n        downsample_cum_rates = np.cumprod(downsample_rates)\n        for i, (u, k, d) in enumerate(zip(downsample_cum_rates[::-1], source_resblock_kernel_sizes, source_resblock_dilation_sizes)):\n            if u == 1:\n                self.source_downs.append(\n                    CausalConv1d(istft_params[\"n_fft\"] + 2, base_channels // (2 ** (i + 1)), 1, 1, causal_type='left')\n                )\n            else:\n                self.source_downs.append(\n                    CausalConv1dDownSample(istft_params[\"n_fft\"] + 2, base_channels // (2 ** (i + 1)), u * 2, u)\n                )\n\n            self.source_resblocks.append(\n                ResBlock(base_channels // (2 ** (i + 1)), k, d, causal=True)\n            )\n\n        self.resblocks = nn.ModuleList()\n        for i in range(len(self.ups)):\n            ch = base_channels // (2**(i + 1))\n            for _, (k, d) in enumerate(zip(resblock_kernel_sizes, resblock_dilation_sizes)):\n                self.resblocks.append(ResBlock(ch, k, d, causal=True))\n\n        self.conv_post = weight_norm(CausalConv1d(ch, istft_params[\"n_fft\"] + 2, 7, 1, causal_type='left'))\n        self.ups.apply(init_weights)\n        self.conv_post.apply(init_weights)\n        self.reflection_pad = nn.ReflectionPad1d((1, 0))\n        self.stft_window = torch.from_numpy(get_window(\"hann\", istft_params[\"n_fft\"], fftbins=True).astype(np.float32))\n        self.conv_pre_look_right = conv_pre_look_right\n        self.f0_predictor = f0_predictor\n\n    def decode(self, x: torch.Tensor, s: torch.Tensor = torch.zeros(1, 1, 0), finalize: bool = True) -> torch.Tensor:\n        s_stft_real, s_stft_imag = self._stft(s.squeeze(1))\n        if finalize is True:\n            x = self.conv_pre(x)\n        else:\n            x = self.conv_pre(x[:, :, :-self.conv_pre_look_right], x[:, :, -self.conv_pre_look_right:])\n            s_stft_real = s_stft_real[:, :, :-int(np.prod(self.upsample_rates) * self.conv_pre_look_right)]\n            s_stft_imag = s_stft_imag[:, :, :-int(np.prod(self.upsample_rates) * self.conv_pre_look_right)]\n        s_stft = torch.cat([s_stft_real, s_stft_imag], dim=1)\n\n        for i in range(self.num_upsamples):\n            x = F.leaky_relu(x, self.lrelu_slope)\n            x = self.ups[i](x)\n\n            if i == self.num_upsamples - 1:\n                x = self.reflection_pad(x)\n\n            # fusion\n            si = self.source_downs[i](s_stft)\n            si = self.source_resblocks[i](si)\n            x = x + si\n\n            xs = None\n            for j in range(self.num_kernels):\n                if xs is None:\n                    xs = self.resblocks[i * self.num_kernels + j](x)\n                else:\n                    xs += self.resblocks[i * self.num_kernels + j](x)\n            x = xs / self.num_kernels\n\n        x = F.leaky_relu(x)\n        x = self.conv_post(x)\n        magnitude = torch.exp(x[:, :self.istft_params[\"n_fft\"] // 2 + 1, :])\n        phase = torch.sin(x[:, self.istft_params[\"n_fft\"] // 2 + 1:, :])  # actually, sin is redundancy\n\n        x = self._istft(magnitude, phase)\n        if finalize is False:\n            x = x[:, :-int(np.prod(self.upsample_rates) * self.istft_params['hop_len'])]\n        x = torch.clamp(x, -self.audio_limit, self.audio_limit)\n        return x\n\n    @torch.inference_mode()\n    def inference(self, speech_feat: torch.Tensor, finalize: bool = True) -> torch.Tensor:\n        # mel->f0 NOTE f0_predictor precision is crucial for causal inference, move self.f0_predictor to cpu if necessary\n        self.f0_predictor.to(torch.float64)\n        f0 = self.f0_predictor(speech_feat.to(torch.float64), finalize=finalize).to(speech_feat)\n        # f0->source\n        s = self.f0_upsamp(f0[:, None]).transpose(1, 2)  # bs,n,t\n        s, _, _ = self.m_source(s)\n        s = s.transpose(1, 2)\n        if finalize is True:\n            generated_speech = self.decode(x=speech_feat, s=s, finalize=finalize)\n        else:\n            generated_speech = self.decode(x=speech_feat[:, :, :-self.f0_predictor.condnet[0].causal_padding], s=s, finalize=finalize)\n        return generated_speech, s\n\n\nif __name__ == '__main__':\n    torch.backends.cudnn.deterministic = True\n    torch.backends.cudnn.benchmark = False\n    from hyperpyyaml import load_hyperpyyaml\n    with open('./pretrained_models/Fun-CosyVoice3-0.5B/cosyvoice3.yaml', 'r') as f:\n        configs = load_hyperpyyaml(f, overrides={'llm': None, 'flow': None})\n    model = configs['hift']\n    device = 'cuda' if torch.cuda.is_available() else 'cpu'\n    model.to(device)\n    model.eval()\n    max_len, chunk_size, context_size = 300, 30, 8\n    mel = torch.rand(1, 80, max_len).to(device)\n    pred_gt, _ = model.inference(mel)\n    for i in range(0, max_len, chunk_size):\n        finalize = True if i + chunk_size + context_size >= max_len else False\n        pred_chunk, _ = model.inference(mel[:, :, : i + chunk_size + context_size], finalize=finalize)\n        pred_chunk = pred_chunk[:, i * 480:]\n        print((pred_gt[:, i * 480:i * 480 + pred_chunk.shape[1]] - pred_chunk).abs().max().item())\n"
  },
  {
    "path": "cosyvoice/hifigan/hifigan.py",
    "content": "from typing import Dict, Optional\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom matcha.hifigan.models import feature_loss, generator_loss, discriminator_loss\nfrom cosyvoice.utils.losses import tpr_loss, mel_loss\n\n\nclass HiFiGan(nn.Module):\n    def __init__(self, generator, discriminator, mel_spec_transform,\n                 multi_mel_spectral_recon_loss_weight=45, feat_match_loss_weight=2.0,\n                 tpr_loss_weight=1.0, tpr_loss_tau=0.04):\n        super(HiFiGan, self).__init__()\n        self.generator = generator\n        self.discriminator = discriminator\n        self.mel_spec_transform = mel_spec_transform\n        self.multi_mel_spectral_recon_loss_weight = multi_mel_spectral_recon_loss_weight\n        self.feat_match_loss_weight = feat_match_loss_weight\n        self.tpr_loss_weight = tpr_loss_weight\n        self.tpr_loss_tau = tpr_loss_tau\n\n    def forward(\n            self,\n            batch: dict,\n            device: torch.device,\n    ) -> Dict[str, Optional[torch.Tensor]]:\n        if batch['turn'] == 'generator':\n            return self.forward_generator(batch, device)\n        else:\n            return self.forward_discriminator(batch, device)\n\n    def forward_generator(self, batch, device):\n        real_speech = batch['speech'].to(device)\n        pitch_feat = batch['pitch_feat'].to(device)\n        # 1. calculate generator outputs\n        generated_speech, generated_f0 = self.generator(batch, device)\n        # 2. calculate discriminator outputs\n        y_d_rs, y_d_gs, fmap_rs, fmap_gs = self.discriminator(real_speech, generated_speech)\n        # 3. calculate generator losses, feature loss, mel loss, tpr losses [Optional]\n        loss_gen, _ = generator_loss(y_d_gs)\n        loss_fm = feature_loss(fmap_rs, fmap_gs)\n        loss_mel = mel_loss(real_speech, generated_speech, self.mel_spec_transform)\n        if self.tpr_loss_weight != 0:\n            loss_tpr = tpr_loss(y_d_gs, y_d_rs, self.tpr_loss_tau)\n        else:\n            loss_tpr = torch.zeros(1).to(device)\n        loss_f0 = F.l1_loss(generated_f0, pitch_feat)\n        loss = loss_gen + self.feat_match_loss_weight * loss_fm + \\\n            self.multi_mel_spectral_recon_loss_weight * loss_mel + \\\n            self.tpr_loss_weight * loss_tpr + loss_f0\n        return {'loss': loss, 'loss_gen': loss_gen, 'loss_fm': loss_fm, 'loss_mel': loss_mel, 'loss_tpr': loss_tpr, 'loss_f0': loss_f0}\n\n    def forward_discriminator(self, batch, device):\n        real_speech = batch['speech'].to(device)\n        # 1. calculate generator outputs\n        with torch.no_grad():\n            generated_speech, generated_f0 = self.generator(batch, device)\n        # 2. calculate discriminator outputs\n        y_d_rs, y_d_gs, fmap_rs, fmap_gs = self.discriminator(real_speech, generated_speech.detach())\n        # 3. calculate discriminator losses, tpr losses [Optional]\n        loss_disc, _, _ = discriminator_loss(y_d_rs, y_d_gs)\n        if self.tpr_loss_weight != 0:\n            loss_tpr = tpr_loss(y_d_rs, y_d_gs, self.tpr_loss_tau)\n        else:\n            loss_tpr = torch.zeros(1).to(device)\n        loss = loss_disc + self.tpr_loss_weight * loss_tpr\n        return {'loss': loss, 'loss_disc': loss_disc, 'loss_tpr': loss_tpr}\n"
  },
  {
    "path": "cosyvoice/llm/llm.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu, Zhihao Du)\n#               2025 Alibaba Inc (authors: Xiang Lyu, Yabin Li, Qihua, Shengqiang Li)\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.\nimport os, queue\nimport random\nimport time\nimport threading\nfrom typing import Dict, Optional, Callable, List, Generator\nimport numpy as np\nimport torch\nfrom torch import nn\nimport torch.nn.functional as F\nfrom transformers import Qwen2ForCausalLM\nfrom torch.nn.utils.rnn import pad_sequence, unpad_sequence\nfrom cosyvoice.utils.common import IGNORE_ID\nfrom cosyvoice.transformer.label_smoothing_loss import LabelSmoothingLoss\nfrom cosyvoice.utils.common import th_accuracy\nfrom cosyvoice.utils.file_utils import logging\nfrom cosyvoice.utils.mask import make_pad_mask\nfrom cosyvoice.utils.onnx import SpeechTokenExtractor, online_feature, onnx_path\n\n\nclass TransformerLM(torch.nn.Module):\n    def __init__(\n            self,\n            text_encoder_input_size: int,\n            llm_input_size: int,\n            llm_output_size: int,\n            text_token_size: int,\n            speech_token_size: int,\n            text_encoder: torch.nn.Module,\n            llm: torch.nn.Module,\n            sampling: Callable,\n            length_normalized_loss: bool = True,\n            lsm_weight: float = 0.0,\n            spk_embed_dim: int = 192,\n    ):\n        super().__init__()\n        self.llm_input_size = llm_input_size\n        self.speech_token_size = speech_token_size\n        # 1. build text token inputs related modules\n        self.text_embedding = torch.nn.Embedding(text_token_size, text_encoder_input_size)\n        self.text_encoder = text_encoder\n        self.text_encoder_affine_layer = nn.Linear(\n            self.text_encoder.output_size(),\n            llm_input_size\n        )\n\n        # 2. build speech token language model related modules\n        self.sos = 0\n        self.task_id = 1\n        self.eos_token = self.speech_token_size\n        self.llm_embedding = torch.nn.Embedding(2, llm_input_size)\n        self.llm = llm\n        self.llm_decoder = nn.Linear(llm_output_size, speech_token_size + 1)\n        self.criterion_ce = LabelSmoothingLoss(\n            size=speech_token_size + 1,\n            padding_idx=IGNORE_ID,\n            smoothing=lsm_weight,\n            normalize_length=length_normalized_loss,\n        )\n\n        # 3. [Optional] build speech token related modules\n        self.speech_embedding = torch.nn.Embedding(speech_token_size, llm_input_size)\n        self.spk_embed_affine_layer = torch.nn.Linear(spk_embed_dim, llm_input_size)\n\n        # 4. sampling method\n        self.sampling = sampling\n\n    def encode(\n            self,\n            text: torch.Tensor,\n            text_lengths: torch.Tensor,\n    ):\n        encoder_out, encoder_mask = self.text_encoder(text, text_lengths, decoding_chunk_size=1, num_decoding_left_chunks=-1)\n        encoder_out_lens = encoder_mask.squeeze(1).sum(1)\n        encoder_out = self.text_encoder_affine_layer(encoder_out)\n        return encoder_out, encoder_out_lens\n\n    def pad_unpad_sequence(self, sos_emb, embedding, text_token, text_token_len, task_id_emb, speech_token, speech_token_len):\n        text_token = unpad_sequence(text_token, text_token_len.cpu(), batch_first=True)\n        speech_token = unpad_sequence(speech_token, speech_token_len.cpu(), batch_first=True)\n        lm_input = [torch.concat([sos_emb.squeeze(dim=0), embedding[i], text_token[i], task_id_emb.squeeze(dim=0), speech_token[i]], dim=0)\n                    for i in range(len(text_token))]\n        lm_input_len = torch.tensor([i.size(0) for i in lm_input], dtype=torch.int32)\n        lm_input = pad_sequence(lm_input, batch_first=True, padding_value=IGNORE_ID)\n        return lm_input, lm_input_len\n\n    def forward(\n            self,\n            batch: dict,\n            device: torch.device,\n    ) -> Dict[str, Optional[torch.Tensor]]:\n        \"\"\"\n        Args:\n            text: (B, L, D)\n            text_lengths: (B,)\n            audio: (B, T, N) or (B, T)\n            audio_lengths: (B,)\n        \"\"\"\n        text_token = batch['text_token'].to(device)\n        text_token_len = batch['text_token_len'].to(device)\n        speech_token = batch['speech_token'].to(device)\n        speech_token_len = batch['speech_token_len'].to(device)\n        embedding = batch['embedding'].to(device)\n\n        # 1. prepare llm_target\n        lm_target = [torch.tensor([IGNORE_ID] * (2 + text_token_len[i]) + speech_token[i, :speech_token_len[i]].tolist() +\n                                  [self.speech_token_size]) for i in range(text_token.size(0))]\n        lm_target = pad_sequence(lm_target, batch_first=True, padding_value=IGNORE_ID).to(device)\n\n        # 1. encode text_token\n        text_token = self.text_embedding(text_token)\n        text_token, text_token_len = self.encode(text_token, text_token_len)\n\n        # 2. embedding projection\n        embedding = F.normalize(embedding, dim=1)\n        embedding = self.spk_embed_affine_layer(embedding)\n        embedding = embedding.unsqueeze(1)\n\n        # 3. sos and task_id\n        sos_emb = self.llm_embedding.weight[self.sos].reshape(1, 1, -1)\n        task_id_emb = self.llm_embedding.weight[self.task_id].reshape(1, 1, -1)\n\n        # 4. encode speech_token\n        speech_token = self.speech_embedding(speech_token)\n\n        # 5. unpad and pad\n        lm_input, lm_input_len = self.pad_unpad_sequence(sos_emb, embedding, text_token, text_token_len,\n                                                         task_id_emb, speech_token, speech_token_len)\n\n        # 6. run lm forward\n        lm_output, lm_output_mask = self.llm(lm_input, lm_input_len.to(device))\n        logits = self.llm_decoder(lm_output)\n        loss = self.criterion_ce(logits, lm_target)\n        acc = th_accuracy(logits.view(-1, self.speech_token_size + 1), lm_target, ignore_label=IGNORE_ID)\n        return {'loss': loss, 'acc': acc}\n\n    def sampling_ids(\n            self,\n            weighted_scores: torch.Tensor,\n            decoded_tokens: List,\n            sampling: int,\n            ignore_eos: bool = True,\n    ):\n        if ignore_eos is True:\n            weighted_scores[self.speech_token_size] = -float('inf')\n        top_ids = self.sampling(weighted_scores, decoded_tokens, sampling)\n        return top_ids\n\n    @torch.inference_mode()\n    def inference(\n            self,\n            text: torch.Tensor,\n            text_len: torch.Tensor,\n            prompt_text: torch.Tensor,\n            prompt_text_len: torch.Tensor,\n            prompt_speech_token: torch.Tensor,\n            prompt_speech_token_len: torch.Tensor,\n            embedding: torch.Tensor,\n            sampling: int = 25,\n            max_token_text_ratio: float = 20,\n            min_token_text_ratio: float = 2,\n            uuid: str = '',\n    ) -> Generator[torch.Tensor, None, None]:\n        device = text.device\n        text = torch.concat([prompt_text, text], dim=1)\n        text_len += prompt_text_len\n        text = self.text_embedding(text)\n\n        # 1. encode text\n        text, text_len = self.encode(text, text_len)\n\n        # 2. encode embedding\n        if embedding.shape[0] != 0:\n            embedding = F.normalize(embedding, dim=1)\n            embedding = self.spk_embed_affine_layer(embedding)\n            embedding = embedding.unsqueeze(dim=1)\n        else:\n            embedding = torch.zeros(1, 0, self.llm_input_size, dtype=text.dtype).to(device).to(text.dtype)\n\n        # 3. concat llm_input\n        sos_emb = self.llm_embedding.weight[self.sos].reshape(1, 1, -1)\n        task_id_emb = self.llm_embedding.weight[self.task_id].reshape(1, 1, -1)\n        if prompt_speech_token_len != 0:\n            prompt_speech_token_emb = self.speech_embedding(prompt_speech_token)\n        else:\n            prompt_speech_token_emb = torch.zeros(1, 0, self.llm_input_size, dtype=text.dtype).to(device)\n        lm_input = torch.concat([sos_emb, embedding, text, task_id_emb, prompt_speech_token_emb], dim=1)\n\n        # 4. cal min/max_length\n        min_len = int((text_len - prompt_text_len) * min_token_text_ratio)\n        max_len = int((text_len - prompt_text_len) * max_token_text_ratio)\n\n        # 5. step by step decode\n        out_tokens = []\n        offset = 0\n        att_cache, cnn_cache = torch.zeros((0, 0, 0, 0), device=lm_input.device), torch.zeros((0, 0, 0, 0), device=lm_input.device)\n        for i in range(max_len):\n            y_pred, att_cache, cnn_cache = self.llm.forward_chunk(lm_input, offset=offset, required_cache_size=-1,\n                                                                  att_cache=att_cache, cnn_cache=cnn_cache,\n                                                                  att_mask=torch.tril(torch.ones((1, lm_input.shape[1], lm_input.shape[1]),\n                                                                                                 device=lm_input.device)).to(torch.bool))\n            logp = self.llm_decoder(y_pred[:, -1]).log_softmax(dim=-1)\n            top_ids = self.sampling_ids(logp.squeeze(dim=0), out_tokens, sampling, ignore_eos=True if i < min_len else False)\n            if top_ids == self.eos_token:\n                break\n            # in stream mode, yield token one by one\n            yield top_ids\n            out_tokens.append(top_ids)\n            offset += lm_input.size(1)\n            lm_input = self.speech_embedding.weight[top_ids].reshape(1, 1, -1)\n\n\nclass Qwen2Encoder(torch.nn.Module):\n    def __init__(self, pretrain_path):\n        super().__init__()\n        self.model = Qwen2ForCausalLM.from_pretrained(pretrain_path)\n\n    def forward(self, xs: torch.Tensor, xs_lens: torch.Tensor):\n        T = xs.size(1)\n        masks = ~make_pad_mask(xs_lens, T)\n        outs = self.model(\n            inputs_embeds=xs,\n            attention_mask=masks,\n            output_hidden_states=True,\n            return_dict=True,\n        )\n        return outs.hidden_states[-1], masks.unsqueeze(1)\n\n    def forward_one_step(self, xs, masks, cache=None):\n        input_masks = masks[:, -1, :]\n        outs = self.model(\n            inputs_embeds=xs,\n            attention_mask=input_masks,\n            output_hidden_states=True,\n            return_dict=True,\n            use_cache=True,\n            past_key_values=cache,\n        )\n        xs = outs.hidden_states[-1]\n        new_cache = outs.past_key_values\n        return xs, new_cache\n\n\nclass Qwen2LM(TransformerLM):\n    def __init__(\n            self,\n            llm_input_size: int,\n            llm_output_size: int,\n            speech_token_size: int,\n            llm: torch.nn.Module,\n            sampling: Callable,\n            length_normalized_loss: bool = True,\n            lsm_weight: float = 0.0,\n            mix_ratio: List[int] = [5, 15],\n    ):\n        torch.nn.Module.__init__(self)\n        self.llm_input_size = llm_input_size\n        self.llm_output_size = llm_output_size\n        self.speech_token_size = speech_token_size\n        # 2. build speech token language model related modules\n        self.sos = 0\n        self.task_id = 1\n        self.eos_token = speech_token_size\n        self.fill_token = speech_token_size + 2\n\n        self.llm_embedding = torch.nn.Embedding(2, llm_input_size)\n        self.llm = llm\n        self.llm_decoder = nn.Linear(llm_output_size, speech_token_size + 3)\n        self.criterion_ce = LabelSmoothingLoss(\n            size=speech_token_size + 3,\n            padding_idx=IGNORE_ID,\n            smoothing=lsm_weight,\n            normalize_length=length_normalized_loss,\n        )\n\n        # 3. [Optional] build speech token related modules\n        self.speech_embedding = torch.nn.Embedding(speech_token_size + 3, llm_input_size)\n\n        # 4. sampling method\n        self.sampling = sampling\n        self.mix_ratio = mix_ratio\n\n        # 5. vllm related\n        self.stop_token_ids = [speech_token_size + i for i in range(3)]\n        self.vllm_output_queue = {}\n        if online_feature is True:\n            self.speech_token_extractor = SpeechTokenExtractor(model_path=os.path.join(onnx_path, 'speech_tokenizer_v2.batch.onnx'))\n\n    def prepare_lm_input_target(self, sos_emb, text_token, text_token_emb, text_token_len, task_id_emb, speech_token, speech_token_emb, speech_token_len, instruct_token=None, instruct_token_emb=None, instruct_token_len=None):\n        lm_target, lm_input = [], []\n        text_token = unpad_sequence(text_token, text_token_len.cpu(), batch_first=True)\n        speech_token = unpad_sequence(speech_token, speech_token_len.cpu(), batch_first=True)\n        text_token_emb = unpad_sequence(text_token_emb, text_token_len.cpu(), batch_first=True)\n        speech_token_emb = unpad_sequence(speech_token_emb, speech_token_len.cpu(), batch_first=True)\n        # NOTE add instruct_token in CosyVoice3\n        if instruct_token is not None and instruct_token_emb is not None and instruct_token_len is not None:\n            instruct_token = unpad_sequence(instruct_token, instruct_token_len.cpu(), batch_first=True)\n            instruct_token_emb = unpad_sequence(instruct_token_emb, instruct_token_len.cpu(), batch_first=True)\n        else:\n            instruct_token = [torch.empty(0).to(text_token[0])] * len(text_token)\n            instruct_token_emb = [torch.empty(0, 896).to(text_token_emb[0])] * len(text_token)\n            instruct_token_len = torch.zeros(len(text_token)).to(text_token_len)\n        for i in range(len(text_token)):\n            # bistream sequence\n            if random.random() < 0.5 and speech_token_len[i] / text_token_len[i] > self.mix_ratio[1] / self.mix_ratio[0]:\n                this_lm_target, this_lm_input = [IGNORE_ID], [sos_emb.squeeze(dim=0)]\n                this_lm_target += [IGNORE_ID] * instruct_token_len[i]\n                this_lm_input.append(instruct_token_emb[i])\n                for j in range(((text_token_len[i] + 1) / self.mix_ratio[0]).ceil().int().item()):\n                    this_text_token = text_token[i][j * self.mix_ratio[0]: (j + 1) * self.mix_ratio[0]].tolist()\n                    this_speech_token = speech_token[i][j * self.mix_ratio[1]: (j + 1) * self.mix_ratio[1]].tolist()\n                    if len(this_text_token) == self.mix_ratio[0]:\n                        assert len(this_speech_token) == self.mix_ratio[1]\n                        this_lm_target += [IGNORE_ID] * (self.mix_ratio[0] - 1)\n                        this_lm_target += this_speech_token\n                        this_lm_target.append(self.fill_token)\n                        this_lm_input.append(text_token_emb[i][j * self.mix_ratio[0]: (j + 1) * self.mix_ratio[0]])\n                        this_lm_input.append(speech_token_emb[i][j * self.mix_ratio[1]: (j + 1) * self.mix_ratio[1]])\n                    else:\n                        this_lm_target += [-1] * len(this_text_token)\n                        this_lm_target += speech_token[i][j * self.mix_ratio[1]:].tolist()\n                        this_lm_target.append(self.eos_token)\n                        this_lm_input.append(text_token_emb[i][j * self.mix_ratio[0]:])\n                        this_lm_input.append(task_id_emb.squeeze(dim=0))\n                        this_lm_input.append(speech_token_emb[i][j * self.mix_ratio[1]:])\n                this_lm_target, this_lm_input = torch.tensor(this_lm_target), torch.concat(this_lm_input, dim=0)\n            # unistream sequence\n            else:\n                this_lm_target = torch.tensor([IGNORE_ID] * (1 + instruct_token_len[i] + text_token_len[i]) + speech_token[i].tolist() + [self.eos_token])\n                this_lm_input = torch.concat([sos_emb.squeeze(dim=0), instruct_token_emb[i], text_token_emb[i], task_id_emb.squeeze(dim=0), speech_token_emb[i]], dim=0)\n            lm_target.append(this_lm_target)\n            lm_input.append(this_lm_input)\n        lm_input_len = torch.tensor([i.size(0) for i in lm_input], dtype=torch.int32)\n        lm_input = pad_sequence(lm_input, batch_first=True, padding_value=IGNORE_ID)\n        lm_target = pad_sequence(lm_target, batch_first=True, padding_value=IGNORE_ID)\n        return lm_target, lm_input, lm_input_len\n\n    def forward(\n            self,\n            batch: dict,\n            device: torch.device,\n    ) -> Dict[str, Optional[torch.Tensor]]:\n        \"\"\"\n        Args:\n            text: (B, L, D)\n            text_lengths: (B,)\n            audio: (B, T, N) or (B, T)\n            audio_lengths: (B,)\n        \"\"\"\n        # 1. encode text_token\n        text_token = batch['text_token'].to(device)\n        text_token_len = batch['text_token_len'].to(device)\n        text_token_emb = self.llm.model.model.embed_tokens(text_token)\n\n        # 2. encode speech_token\n        if 'speech_token' not in batch:\n            speech_token, speech_token_len = self.speech_token_extractor.inference(batch['whisper_feat'], batch['whisper_feat_len'], device)\n        else:\n            speech_token = batch['speech_token'].to(device)\n            speech_token_len = batch['speech_token_len'].to(device)\n        speech_token_emb = self.speech_embedding(speech_token)\n\n        # 3. sos and task_id\n        if self.__class__.__name__ == 'CosyVoice3LM':\n            sos_emb = self.speech_embedding.weight[self.sos].reshape(1, 1, -1)\n            task_id_emb = self.speech_embedding.weight[self.task_id].reshape(1, 1, -1)\n        elif self.__class__.__name__ == 'Qwen2LM':\n            sos_emb = self.llm_embedding.weight[self.sos].reshape(1, 1, -1)\n            task_id_emb = self.llm_embedding.weight[self.task_id].reshape(1, 1, -1)\n        else:\n            raise ValueError\n\n        # 4. prepare llm_input/target\n        if self.__class__.__name__ == 'CosyVoice3LM':\n            instruct_token = batch['instruct_token'].to(device)\n            instruct_token_len = batch['instruct_token_len'].to(device)\n            instruct_token_emb = self.llm.model.model.embed_tokens(instruct_token)\n            lm_target, lm_input, lm_input_len = self.prepare_lm_input_target(sos_emb, text_token, text_token_emb, text_token_len, task_id_emb,\n                                                                             speech_token, speech_token_emb, speech_token_len, instruct_token, instruct_token_emb, instruct_token_len)\n        elif self.__class__.__name__ == 'Qwen2LM':\n            lm_target, lm_input, lm_input_len = self.prepare_lm_input_target(sos_emb, text_token, text_token_emb, text_token_len, task_id_emb,\n                                                                             speech_token, speech_token_emb, speech_token_len)\n        else:\n            raise ValueError\n        lm_target = lm_target.to(device)\n\n        # 4. run lm forward\n        lm_output, lm_output_mask = self.llm(lm_input, lm_input_len.to(device))\n        logits = self.llm_decoder(lm_output)\n        loss = self.criterion_ce(logits, lm_target.to(device))\n        acc = th_accuracy(logits.view(-1, self.llm_decoder.out_features), lm_target, ignore_label=IGNORE_ID)\n        return {'loss': loss, 'acc': acc}\n\n    def forward_dpo(\n            self,\n            batch: dict,\n            device: torch.device,\n    ) -> Dict[str, Optional[torch.Tensor]]:\n        text_token = batch['text_token'].to(device)\n        text_token_len = batch['text_token_len'].to(device)\n        speech_token = batch['speech_token'].to(device)\n        speech_token_len = batch['speech_token_len'].to(device)\n        reject_speech_token = batch['reject_speech_token'].to(device)\n        reject_speech_token_len = batch['reject_speech_token_len'].to(device)\n\n        # 1. encode text_token\n        text_token_emb = self.llm.model.model.embed_tokens(text_token)\n\n        # 3. sos and task_id\n        sos_emb = self.llm_embedding.weight[self.sos].reshape(1, 1, -1)\n        task_id_emb = self.llm_embedding.weight[self.task_id].reshape(1, 1, -1)\n\n        # 2. encode speech_token\n        speech_token = unpad_sequence(speech_token, speech_token_len.cpu(), batch_first=True)\n        reject_speech_token = unpad_sequence(reject_speech_token, reject_speech_token_len.cpu(), batch_first=True)\n        speech_token_combined = speech_token + reject_speech_token\n        speech_token_combined = pad_sequence(speech_token_combined, batch_first=True, padding_value=0)\n        speech_token_combined_len = torch.concat([speech_token_len, reject_speech_token_len], dim=0)\n        speech_token_combined_emb = self.speech_embedding(speech_token_combined)\n\n        # 3. prepare llm_input/target\n        lm_target, lm_input, lm_input_len = self.prepare_lm_input_target(sos_emb, text_token.repeat(2, 1), text_token_emb.repeat(2, 1, 1), text_token_len.repeat(2),\n                                                                         task_id_emb, speech_token_combined, speech_token_combined_emb, speech_token_combined_len)\n        lm_target = lm_target.to(device)\n\n        # 4. run lm forward\n        lm_output, lm_output_mask = self.llm(lm_input, lm_input_len.to(device))\n        logits = self.llm_decoder(lm_output)\n        chosen_logits = logits[:text_token.shape[0]]\n        rejected_logits = logits[text_token.shape[0]:]\n        chosen_lm_target = lm_target[:text_token.shape[0]]\n        rejected_lm_target = lm_target[text_token.shape[0]:]\n        loss = self.criterion_ce(chosen_logits, chosen_lm_target.to(device))\n        acc = th_accuracy(chosen_logits.view(-1, self.speech_token_size + 3), chosen_lm_target, ignore_label=IGNORE_ID)\n\n        # 5. calculate dpo logits\n        chosen_lm_mask = chosen_lm_target == IGNORE_ID\n        rejected_lm_mask = rejected_lm_target == IGNORE_ID\n        chosen_logps = torch.gather(chosen_logits.log_softmax(dim=-1), dim=2, index=chosen_lm_target.masked_fill(chosen_lm_mask, 0).unsqueeze(dim=-1)).squeeze(dim=-1)\n        rejected_logps = torch.gather(rejected_logits.log_softmax(dim=-1), dim=2, index=rejected_lm_target.masked_fill(rejected_lm_mask, 0).unsqueeze(dim=-1)).squeeze(dim=-1)\n        chosen_logps = (chosen_logps * chosen_lm_mask).sum(dim=-1) / chosen_lm_mask.sum(dim=-1)\n        rejected_logps = (rejected_logps * rejected_lm_mask).sum(dim=-1) / rejected_lm_mask.sum(dim=-1)\n        return {'loss': loss, 'acc': acc, 'chosen_logps': chosen_logps, 'rejected_logps': rejected_logps}\n\n    @torch.inference_mode()\n    def inference(\n            self,\n            text: torch.Tensor,\n            text_len: torch.Tensor,\n            prompt_text: torch.Tensor,\n            prompt_text_len: torch.Tensor,\n            prompt_speech_token: torch.Tensor,\n            prompt_speech_token_len: torch.Tensor,\n            embedding: torch.Tensor,\n            sampling: int = 25,\n            max_token_text_ratio: float = 20,\n            min_token_text_ratio: float = 2,\n            uuid: str = '',\n    ) -> Generator[torch.Tensor, None, None]:\n        device = text.device\n        text = torch.concat([prompt_text, text], dim=1)\n        text_len += prompt_text_len\n        text_emb = self.llm.model.model.embed_tokens(text)\n        if self.__class__.__name__ == 'CosyVoice3LM':\n            # NOTE temporary hardcode, 151646 is <|endofprompt|> token\n            assert 151646 in text, '<|endofprompt|> not detected in CosyVoice3 text or prompt_text, check your input!'\n\n        # 3. concat llm_input\n        if self.__class__.__name__ == 'CosyVoice3LM':\n            sos_emb = self.speech_embedding.weight[self.sos].reshape(1, 1, -1)\n            task_id_emb = self.speech_embedding.weight[self.task_id].reshape(1, 1, -1)\n        elif self.__class__.__name__ == 'Qwen2LM':\n            sos_emb = self.llm_embedding.weight[self.sos].reshape(1, 1, -1)\n            task_id_emb = self.llm_embedding.weight[self.task_id].reshape(1, 1, -1)\n        else:\n            raise ValueError\n        if prompt_speech_token_len != 0:\n            prompt_speech_token_emb = self.speech_embedding(prompt_speech_token)\n        else:\n            prompt_speech_token_emb = torch.zeros(1, 0, self.llm_input_size, dtype=text_emb.dtype).to(device)\n        lm_input = torch.concat([sos_emb, text_emb, task_id_emb, prompt_speech_token_emb], dim=1)\n\n        # 4. cal min/max_length\n        min_len = int((text_len - prompt_text_len) * min_token_text_ratio)\n        max_len = int((text_len - prompt_text_len) * max_token_text_ratio)\n\n        # 5. step by step decode\n        for token in self.inference_wrapper(lm_input, sampling, min_len, max_len, uuid):\n            yield token\n\n    @torch.inference_mode()\n    def inference_wrapper(self, lm_input, sampling, min_len, max_len, uuid):\n        if hasattr(self, 'vllm'):\n            from vllm import SamplingParams, RequestOutput\n            sampling_params = SamplingParams(top_k=sampling,\n                                             stop_token_ids=self.stop_token_ids,\n                                             min_tokens=min_len,\n                                             max_tokens=max_len)\n            with self.lock:\n                self.vllm.add_request(uuid, {\"prompt_embeds\": lm_input.squeeze(0).to(torch.bfloat16).to(lm_input.device)}, sampling_params)\n                self.vllm_output_queue[uuid] = queue.Queue()\n            out_tokens = []\n            while True:\n                with self.lock:\n                    if self.vllm_output_queue[uuid].empty() is True:\n                        request_outputs: List[RequestOutput] = self.vllm.step()\n                        for request_output in request_outputs:\n                            top_ids = list(request_output.outputs[0].token_ids)[-1]\n                            self.vllm_output_queue[request_output.request_id].put(top_ids)\n                if self.vllm_output_queue[uuid].empty() is False:\n                    top_ids = self.vllm_output_queue[uuid].get()\n                    if top_ids in self.stop_token_ids:\n                        break\n                    # in stream mode, yield token one by one\n                    yield top_ids\n                    out_tokens.append(top_ids)\n                    if len(out_tokens) == max_len:\n                        break\n                time.sleep(0.001)\n            with self.lock:\n                self.vllm_output_queue.pop(uuid)\n        else:\n            out_tokens = []\n            cache = None\n            for i in range(max_len):\n                y_pred, cache = self.llm.forward_one_step(lm_input,\n                                                          masks=torch.tril(torch.ones((1, lm_input.shape[1], lm_input.shape[1]), device=lm_input.device)).to(torch.bool),\n                                                          cache=cache)\n                logp = self.llm_decoder(y_pred[:, -1]).log_softmax(dim=-1)\n                top_ids = self.sampling_ids(logp.squeeze(dim=0), out_tokens, sampling, ignore_eos=True if i < min_len else False)\n                if top_ids in self.stop_token_ids:\n                    break\n                # in stream mode, yield token one by one\n                yield top_ids\n                out_tokens.append(top_ids)\n                lm_input = self.speech_embedding.weight[top_ids].reshape(1, 1, -1)\n\n    @torch.inference_mode()\n    def inference_bistream(\n            self,\n            text: Generator,\n            prompt_text: torch.Tensor,\n            prompt_text_len: torch.Tensor,\n            prompt_speech_token: torch.Tensor,\n            prompt_speech_token_len: torch.Tensor,\n            embedding: torch.Tensor,\n            sampling: int = 25,\n            max_token_text_ratio: float = 20,\n            min_token_text_ratio: float = 2,\n    ) -> Generator[torch.Tensor, None, None]:\n\n        device = prompt_text.device\n        # 1. prepare input\n        if self.__class__.__name__ == 'CosyVoice3LM':\n            sos_emb = self.speech_embedding.weight[self.sos].reshape(1, 1, -1)\n            task_id_emb = self.speech_embedding.weight[self.task_id].reshape(1, 1, -1)\n        elif self.__class__.__name__ == 'Qwen2LM':\n            sos_emb = self.llm_embedding.weight[self.sos].reshape(1, 1, -1)\n            task_id_emb = self.llm_embedding.weight[self.task_id].reshape(1, 1, -1)\n        else:\n            raise ValueError\n        if prompt_speech_token_len != 0:\n            prompt_speech_token_emb = self.speech_embedding(prompt_speech_token)\n        else:\n            prompt_speech_token_emb = torch.zeros(1, 0, self.llm_input_size, dtype=prompt_text.dtype).to(device)\n        lm_input = torch.concat([sos_emb], dim=1)\n\n        # 2. iterate text\n        out_tokens = []\n        cache = None\n        # NOTE init prompt_text as text_cache as it is basically impossible prompt_speech_token/prompt_text < 15/5\n        if self.__class__.__name__ == 'CosyVoice3LM':\n            # NOTE temporary hardcode, 151646 is <|endofprompt|> token\n            assert 151646 in prompt_text, '<|endofprompt|> not detected in CosyVoice3 prompt_text, check your input!'\n            eop_index = prompt_text.flatten().tolist().index(151646)\n            lm_input = torch.concat([lm_input, self.llm.model.model.embed_tokens(prompt_text[:, :eop_index + 1])], dim=1)\n            prompt_text = prompt_text[:, eop_index + 1:]\n        text_cache = self.llm.model.model.embed_tokens(prompt_text)\n        next_fill_index = (int(prompt_speech_token.shape[1] / self.mix_ratio[1]) + 1) * self.mix_ratio[1] - prompt_speech_token.shape[1]\n        for this_text in text:\n            text_cache = torch.concat([text_cache, self.llm.model.model.embed_tokens(this_text)], dim=1)\n            # prompt_speech_token_emb not empty, try append to lm_input\n            while prompt_speech_token_emb.size(1) != 0:\n                if text_cache.size(1) >= self.mix_ratio[0]:\n                    lm_input_text, lm_input_speech = text_cache[:, :self.mix_ratio[0]], prompt_speech_token_emb[:, :self.mix_ratio[1]]\n                    logging.info('append {} text token {} speech token'.format(lm_input_text.size(1), lm_input_speech.size(1)))\n                    lm_input = torch.concat([lm_input, lm_input_text, lm_input_speech], dim=1)\n                    text_cache, prompt_speech_token_emb = text_cache[:, self.mix_ratio[0]:], prompt_speech_token_emb[:, self.mix_ratio[1]:]\n                else:\n                    logging.info('not enough text token to decode, wait for more')\n                    break\n            # no prompt_speech_token_emb remain, can decode some speech token\n            if prompt_speech_token_emb.size(1) == 0:\n                if (len(out_tokens) != 0 and out_tokens[-1] == self.fill_token) or (len(out_tokens) == 0 and lm_input.size(1) == 1):\n                    logging.info('get fill token, need to append more text token')\n                    if text_cache.size(1) >= self.mix_ratio[0]:\n                        lm_input_text = text_cache[:, :self.mix_ratio[0]]\n                        logging.info('append {} text token'.format(lm_input_text.size(1)))\n                        if len(out_tokens) != 0 and out_tokens[-1] == self.fill_token:\n                            lm_input = lm_input_text\n                        else:\n                            lm_input = torch.concat([lm_input, lm_input_text], dim=1)\n                        text_cache = text_cache[:, self.mix_ratio[0]:]\n                    else:\n                        logging.info('not enough text token to decode, wait for more')\n                        continue\n                while True:\n                    seq_len = lm_input.shape[1] if cache is None else lm_input.shape[1] + cache[0][0].size(2)\n                    y_pred, cache = self.llm.forward_one_step(lm_input,\n                                                              masks=torch.tril(torch.ones((1, seq_len, seq_len), device=lm_input.device)).to(torch.bool),\n                                                              cache=cache)\n                    logp = self.llm_decoder(y_pred[:, -1]).log_softmax(dim=-1)\n                    if next_fill_index != -1 and len(out_tokens) == next_fill_index:\n                        top_ids = self.fill_token\n                        next_fill_index += (self.mix_ratio[1] + 1)\n                    else:\n                        top_ids = self.sampling_ids(logp.squeeze(dim=0), out_tokens, sampling, ignore_eos=True)\n                    if top_ids == self.fill_token:\n                        next_fill_index = len(out_tokens) + self.mix_ratio[1] + 1\n                        logging.info('fill_token index {} next fill_token index {}'.format(len(out_tokens), next_fill_index))\n                    out_tokens.append(top_ids)\n                    if top_ids >= self.speech_token_size:\n                        if top_ids == self.fill_token:\n                            break\n                        else:\n                            raise ValueError('should not get token {}'.format(top_ids))\n                    yield top_ids\n                    lm_input = self.speech_embedding.weight[top_ids].reshape(1, 1, -1)\n\n        # 3. final decode\n        lm_input = torch.concat([lm_input, text_cache, task_id_emb], dim=1)\n        logging.info('no more text token, decode until met eos')\n        while True:\n            seq_len = lm_input.shape[1] if cache is None else lm_input.shape[1] + cache[0][0].size(2)\n            y_pred, cache = self.llm.forward_one_step(lm_input,\n                                                      masks=torch.tril(torch.ones((1, seq_len, seq_len), device=lm_input.device)).to(torch.bool),\n                                                      cache=cache)\n            logp = self.llm_decoder(y_pred[:, -1]).log_softmax(dim=-1)\n            top_ids = self.sampling_ids(logp.squeeze(dim=0), out_tokens, sampling, ignore_eos=False)\n            out_tokens.append(top_ids)\n            if top_ids >= self.speech_token_size:\n                if top_ids == self.eos_token:\n                    break\n                else:\n                    raise ValueError('should not get token {}'.format(top_ids))\n            # in stream mode, yield token one by one\n            yield top_ids\n            lm_input = self.speech_embedding.weight[top_ids].reshape(1, 1, -1)\n\n\nclass CosyVoice3LM(Qwen2LM):\n    def __init__(\n            self,\n            llm_input_size: int,\n            llm_output_size: int,\n            speech_token_size: int,\n            llm: torch.nn.Module,\n            sampling: Callable,\n            length_normalized_loss: bool = True,\n            lsm_weight: float = 0.0,\n            mix_ratio: List[int] = [5, 15],\n    ):\n        torch.nn.Module.__init__(self)\n        self.llm_input_size = llm_input_size\n        self.llm_output_size = llm_output_size\n        self.speech_token_size = speech_token_size\n        # 2. build speech token language model related modules\n        self.sos = speech_token_size + 0\n        self.eos_token = speech_token_size + 1\n        self.task_id = speech_token_size + 2\n        self.fill_token = speech_token_size + 3\n\n        self.llm = llm\n        self.llm_decoder = nn.Linear(llm_output_size, speech_token_size + 200, bias=False)\n        self.criterion_ce = LabelSmoothingLoss(\n            size=speech_token_size + 200,\n            padding_idx=IGNORE_ID,\n            smoothing=lsm_weight,\n            normalize_length=length_normalized_loss,\n        )\n\n        # 3. [Optional] build speech token related modules\n        self.speech_embedding = torch.nn.Embedding(speech_token_size + 200, llm_input_size)\n\n        # 4. sampling method\n        self.sampling = sampling\n        self.mix_ratio = mix_ratio\n\n        # 5. vllm related\n        self.stop_token_ids = [speech_token_size + i for i in range(200)]\n        self.vllm_output_queue = {}\n        if online_feature is True:\n            self.speech_token_extractor = SpeechTokenExtractor(model_path=os.path.join(onnx_path, 'speech_tokenizer_v3.batch.onnx'))"
  },
  {
    "path": "cosyvoice/tokenizer/assets/multilingual_zh_ja_yue_char_del.tiktoken",
    "content": "IQ== 0\nIg== 1\nIw== 2\nJA== 3\nJQ== 4\nJg== 5\nJw== 6\nKA== 7\nKQ== 8\nKg== 9\nKw== 10\nLA== 11\nLQ== 12\nLg== 13\nLw== 14\nMA== 15\nMQ== 16\nMg== 17\nMw== 18\nNA== 19\nNQ== 20\nNg== 21\nNw== 22\nOA== 23\nOQ== 24\nOg== 25\nOw== 26\nPA== 27\nPQ== 28\nPg== 29\nPw== 30\nQA== 31\nQQ== 32\nQg== 33\nQw== 34\nRA== 35\nRQ== 36\nRg== 37\nRw== 38\nSA== 39\nSQ== 40\nSg== 41\nSw== 42\nTA== 43\nTQ== 44\nTg== 45\nTw== 46\nUA== 47\nUQ== 48\nUg== 49\nUw== 50\nVA== 51\nVQ== 52\nVg== 53\nVw== 54\nWA== 55\nWQ== 56\nWg== 57\nWw== 58\nXA== 59\nXQ== 60\nXg== 61\nXw== 62\nYA== 63\nYQ== 64\nYg== 65\nYw== 66\nZA== 67\nZQ== 68\nZg== 69\nZw== 70\naA== 71\naQ== 72\nag== 73\naw== 74\nbA== 75\nbQ== 76\nbg== 77\nbw== 78\ncA== 79\ncQ== 80\ncg== 81\ncw== 82\ndA== 83\ndQ== 84\ndg== 85\ndw== 86\neA== 87\neQ== 88\neg== 89\new== 90\nfA== 91\nfQ== 92\nfg== 93\noQ== 94\nog== 95\now== 96\npA== 97\npQ== 98\npg== 99\npw== 100\nqA== 101\nqQ== 102\nqg== 103\nqw== 104\nrA== 105\nrg== 106\nrw== 107\nsA== 108\nsQ== 109\nsg== 110\nsw== 111\ntA== 112\ntQ== 113\ntg== 114\ntw== 115\nuA== 116\nuQ== 117\nug== 118\nuw== 119\nvA== 120\nvQ== 121\nvg== 122\nvw== 123\nwA== 124\nwQ== 125\nwg== 126\nww== 127\nxA== 128\nxQ== 129\nxg== 130\nxw== 131\nyA== 132\nyQ== 133\nyg== 134\nyw== 135\nzA== 136\nzQ== 137\nzg== 138\nzw== 139\n0A== 140\n0Q== 141\n0g== 142\n0w== 143\n1A== 144\n1Q== 145\n1g== 146\n1w== 147\n2A== 148\n2Q== 149\n2g== 150\n2w== 151\n3A== 152\n3Q== 153\n3g== 154\n3w== 155\n4A== 156\n4Q== 157\n4g== 158\n4w== 159\n5A== 160\n5Q== 161\n5g== 162\n5w== 163\n6A== 164\n6Q== 165\n6g== 166\n6w== 167\n7A== 168\n7Q== 169\n7g== 170\n7w== 171\n8A== 172\n8Q== 173\n8g== 174\n8w== 175\n9A== 176\n9Q== 177\n9g== 178\n9w== 179\n+A== 180\n+Q== 181\n+g== 182\n+w== 183\n/A== 184\n/Q== 185\n/g== 186\n/w== 187\nAA== 188\nAQ== 189\nAg== 190\nAw== 191\nBA== 192\nBQ== 193\nBg== 194\nBw== 195\nCA== 196\nCQ== 197\nCg== 198\nCw== 199\nDA== 200\nDQ== 201\nDg== 202\nDw== 203\nEA== 204\nEQ== 205\nEg== 206\nEw== 207\nFA== 208\nFQ== 209\nFg== 210\nFw== 211\nGA== 212\nGQ== 213\nGg== 214\nGw== 215\nHA== 216\nHQ== 217\nHg== 218\nHw== 219\nIA== 220\nfw== 221\ngA== 222\ngQ== 223\ngg== 224\ngw== 225\nhA== 226\nhQ== 227\nhg== 228\nhw== 229\niA== 230\niQ== 231\nig== 232\niw== 233\njA== 234\njQ== 235\njg== 236\njw== 237\nkA== 238\nkQ== 239\nkg== 240\nkw== 241\nlA== 242\nlQ== 243\nlg== 244\nlw== 245\nmA== 246\nmQ== 247\nmg== 248\nmw== 249\nnA== 250\nnQ== 251\nng== 252\nnw== 253\noA== 254\nrQ== 255\nIHQ= 256\nIGE= 257\nIHRo 258\naW4= 259\nZXI= 260\nIHc= 261\nIHM= 262\nb3U= 263\nIHRoZQ== 264\ncmU= 265\nb24= 266\nYXQ= 267\nZW4= 268\nIGM= 269\naXQ= 270\naXM= 271\nIGI= 272\nbmQ= 273\nIGQ= 274\nIG0= 275\nIGg= 276\nIG8= 277\naW5n 278\nZXM= 279\nIHA= 280\nIHRv 281\nYW4= 282\nIGY= 283\nb3I= 284\nbGw= 285\nIEk= 286\nIGw= 287\nIHk= 288\nYXI= 289\nIGc= 290\nIHlvdQ== 291\nZWQ= 292\nIGFuZA== 293\nIGlu 294\nIG9m 295\nYXM= 296\nIG4= 297\nb20= 298\naWM= 299\nIHRoYXQ= 300\ndXM= 301\nZXQ= 302\ndmU= 303\nYWw= 304\nb3c= 305\nbGU= 306\nIGlz 307\nIGU= 308\nIGl0 309\nb3Q= 310\nJ3M= 311\nIGJl 312\naW9u 313\nIFQ= 314\nIHdo 315\nIEE= 316\nZW50 317\nIFM= 318\nIHJl 319\nYXk= 320\nIHdl 321\nIG9u 322\nZXJl 323\nIGhh 324\ndXQ= 325\nYWM= 326\naWQ= 327\naWc= 328\nb3M= 329\na2U= 330\ndmVy 331\naW0= 332\nINA= 333\nIFRo 334\nYW0= 335\nYWxs 336\nIGZvcg== 337\nZWw= 338\nY2g= 339\ncm8= 340\nIHRoaXM= 341\nIHN0 342\nIFc= 343\nIHU= 344\nYWQ= 345\nb3V0 346\naXI= 347\nbGQ= 348\nY3Q= 349\nIGs= 350\naWY= 351\nIGdv 352\nLi4= 353\n0L4= 354\naXRo 355\nbHk= 356\naHQ= 357\ncXU= 358\nIC0= 359\nIGRv 360\nIGo= 361\nIGhhdmU= 362\nIEI= 363\nIGFu 364\nIHdpdGg= 365\nIGFyZQ== 366\nIHI= 367\nIGRl 368\nIHNl 369\nIHNv 370\nIHY= 371\nc3Q= 372\naWxs 373\ndXI= 374\nIGxp 375\nIE0= 376\nZXN0 377\nb2Q= 378\nYWxseQ== 379\nJ3Q= 380\ndXN0 381\nIGFz 382\nIEM= 383\nY2U= 384\nIG1l 385\n0LA= 386\n0LU= 387\naWw= 388\nIEg= 389\nIHdhcw== 390\ndGVy 391\ndGg= 392\nIGNhbg== 393\nYW50 394\nIGNvbQ== 395\nb3Vy 396\naWdodA== 397\nIFk= 398\nYXRpb24= 399\nIEFuZA== 400\nb2w= 401\nIHNo 402\n0YI= 403\nb3A= 404\nc2U= 405\nIG5vdA== 406\nIFNv 407\nIG5l 408\ndW4= 409\nIGFi 410\nIGxpa2U= 411\nIGF0 412\nIEQ= 413\naWU= 414\nIGhl 415\nIGNvbg== 416\nIGNo 417\nb3Jl 418\nIGFs 419\nIG9y 420\nIHF1 421\nIE8= 422\nb21l 423\ncmE= 424\ndWw= 425\nIE4= 426\ncHA= 427\nIHlvdXI= 428\nb3VsZA== 429\nIFA= 430\nIGZy 431\nZ2U= 432\nZXJz 433\nJ3Jl 434\n0Lg= 435\nIHRoZXk= 436\nIHdoYXQ= 437\ndXNl 438\nIGFsbA== 439\nIFRoZQ== 440\nIEw= 441\nZXNz 442\nZW0= 443\nIGtu 444\nIGp1c3Q= 445\nYXJ0 446\nIHBybw== 447\ndmVyeQ== 448\ndW0= 449\nIGxv 450\nIOw= 451\nIG15 452\nb2s= 453\nIGV4 454\nYWI= 455\nIHRoZXJl 456\nIGJ1dA== 457\nIGtub3c= 458\nIHN1 459\nIEc= 460\n0YE= 461\nIEU= 462\nIG1h 463\n0L7Q 464\nIGVu 465\nIGFib3V0 466\nIEl0 467\naXN0 468\nIHdvcg== 469\ncmk= 470\naW5k 471\nIG9uZQ== 472\nYXRl 473\nYW5k 474\naW5r 475\nIGxl 476\nb3J0 477\nJ20= 478\nIEY= 479\naWNo 480\n0YA= 481\naWRl 482\nIGdldA== 483\nIG91dA== 484\nLi4u 485\nIHdpbGw= 486\n44E= 487\naXZl 488\n0L0= 489\nIGZyb20= 490\nYWlu 491\nIFdl 492\nIHVw 493\ncGU= 494\ncmVz 495\nY2E= 496\nIFI= 497\nIGlm 498\nIHBs 499\nIGRvbg== 500\nYWNr 501\nIDE= 502\nICI= 503\nIHRy 504\nIHVz 505\nIFdo 506\naXR5 507\nIEo= 508\nIFlvdQ== 509\nIGhlcmU= 510\naGVy 511\nIHNvbWU= 512\nb3Vn 513\nYWs= 514\nYXJk 515\nIGdvaW5n 516\nIHVu 517\nbWVudA== 518\nIHRoaW5r 519\nIHBl 520\nZW5k 521\nICg= 522\nY2F1c2U= 523\nIHRpbQ== 524\nYXN0 525\nw6k= 526\nIG91cg== 527\nIHdhbnQ= 528\nYW1l 529\naWVz 530\nIOs= 531\ndWQ= 532\naW5l 533\nIHJlYWxseQ== 534\nIHRl 535\nIHNlZQ== 536\nY2k= 537\nIGJ5 538\nc28= 539\ndXJl 540\nb3Nl 541\nIFs= 542\nYXJl 543\nIG1vcmU= 544\nYWg= 545\nb25l 546\nY2s= 547\nb3BsZQ== 548\n0LDQ 549\nIHRoZW4= 550\nIHRoaW5n 551\nIHRoZW0= 552\ndmVu 553\nb3VuZA== 554\nb3N0 555\nb25n 556\nZWN0 557\nIHJpZ2h0 558\nYWc= 559\nIGludA== 560\nIHBlb3BsZQ== 561\nIHdoZW4= 562\nb3Vz 563\ncGw= 564\nIHRpbWU= 565\nIGlt 566\nIHdobw== 567\nIDI= 568\nYXA= 569\nIGJlY2F1c2U= 570\naGluZw== 571\nIG5v 572\naWNl 573\nIGxvb2s= 574\nIGhhcw== 575\nIHdvdWxk 576\nIGhvdw== 577\nYWN0 578\nIGZl 579\nbnQ= 580\nb3VnaA== 581\nIHBy 582\nIEJ1dA== 583\nIHNheQ== 584\n0YM= 585\nIG5vdw== 586\nIG1hbg== 587\nIHZlcnk= 588\nIHdvcms= 589\naXo= 590\nIEs= 591\naXY= 592\naXR0 593\nIGFy 594\nZXA= 595\nIGNs 596\nIHdoaWNo 597\nIGNv 598\nYW5z 599\nJ3Zl 600\nIHNh 601\nZmY= 602\nJ2xs 603\nIGFueQ== 604\nIGFjdA== 605\nIHll 606\nYmVy 607\nYWNo 608\nYWdl 609\ncGVy 610\nIGFsc28= 611\nZmVy 612\nIHRoZXNl 613\nIGFk 614\n0LXQ 615\ndGhlcg== 616\nYWNl 617\naWNr 618\nYWtl 619\ncmVhdA== 620\naXJl 621\ndWU= 622\nIGFn 623\nIFU= 624\ndWNo 625\naW9ucw== 626\ncnk= 627\nMDA= 628\nbmE= 629\nIGRpZA== 630\nIHF1ZQ== 631\nIGhhZA== 632\nIGV2ZXJ5 633\nIEhl 634\nIGxh 635\nIHdheQ== 636\nIHNw 637\nYmxl 638\nIFRoaXM= 639\nYXNz 640\nIHRoZWly 641\naXRl 642\nIG5lZWQ= 643\nIHBhcnQ= 644\nIHdlcmU= 645\nIGJhY2s= 646\naXA= 647\nb3du 648\nb21ldA== 649\nYmU= 650\nYXNl 651\nIG1ha2U= 652\naXJzdA== 653\naWE= 654\nZW5jZQ== 655\nYW5n 656\nYW5r 657\nIGdvdA== 658\nIHByZQ== 659\nIGNvbnQ= 660\nIG90aGVy 661\ncHQ= 662\nIFRoYXQ= 663\nb2c= 664\nIGdvb2Q= 665\nIGludG8= 666\nYWxr 667\nIGJlZW4= 668\nIGFt 669\nIG92ZXI= 670\ndWFsbHk= 671\nIOI= 672\n7J0= 673\nIHVuZA== 674\naGU= 675\nd2F5 676\nIGdy 677\n0Yw= 678\nIGRpZg== 679\nIHBlcg== 680\n0Y8= 681\nIElu 682\nIHR3 683\nb25k 684\nYXJz 685\naW50 686\nb3Jt 687\nIGxvdA== 688\nIHdoZXJl 689\nIMM= 690\nIFY= 691\nIHNvbWV0 692\n0Ls= 693\nZW5z 694\nIGd1 695\nIGFj 696\ndWc= 697\n0Ys= 698\nxLE= 699\nIGZpcnN0 700\ncmVl 701\nIGhpcw== 702\naXR0bGU= 703\nIGltcA== 704\nIG1v 705\nYXY= 706\nIGxpdHRsZQ== 707\nIFdoYXQ= 708\nIG11Y2g= 709\nIHo= 710\nIOo= 711\nYWJsZQ== 712\nINC/ 713\nIHBv 714\nIGNvbXA= 715\nbmU= 716\nIGRpcw== 717\nIGxldA== 718\nYW5jZQ== 719\nIGhlcg== 720\nIHRoaW5ncw== 721\nIHN0YXJ0 722\ndWx0 723\nIGFwcA== 724\nIHJlcw== 725\nIGZv 726\nIGNvdWxk 727\nIGludGVy 728\nIHRob3Nl 729\nIGRlcw== 730\nIHdlbGw= 731\nIHR3bw== 732\nIGtpbmQ= 733\neHQ= 734\ncmVzcw== 735\nZWx5 736\nw6Q= 737\nIGJy 738\nIHRocg== 739\nINCy 740\nIGk= 741\naXNo 742\nIGRpZmZlcg== 743\nIHJv 744\nIFN0 745\nIHNvbWV0aGluZw== 746\nIHRha2U= 747\nIGJv 748\neXM= 749\nIHNoZQ== 750\nIHRhbGs= 751\nbG8= 752\n0Yc= 753\nIGV2ZW4= 754\n0Lo= 755\n44A= 756\nINC9 757\nIGJ1 758\nIElm 759\nIGRvd24= 760\nIENo 761\nYWRl 762\nYXRpb25z 763\nIHVzZQ== 764\nb3Jk 765\nIG9mZg== 766\nIGFjdHVhbGx5 767\nIHNwZQ== 768\nZHU= 769\nYXRlZA== 770\nYXRlcg== 771\nb3Nz 772\nbmluZw== 773\nw7w= 774\nIGRvZXM= 775\nINGB 776\nIG5ldw== 777\nIGJldA== 778\ndmVs 779\nY2Vzcw== 780\ncGxl 781\nIGhhcHA= 782\ndGluZw== 783\nb25uYQ== 784\nIGVz 785\nIGRheQ== 786\nIG9ubHk= 787\naWdu 788\na2F5 789\nc2Vs 790\nZW50cw== 791\nb3VudA== 792\naWxk 793\naWxl 794\nIHNj 795\nIGhpbQ== 796\nIGFnYWlu 797\ndmluZw== 798\nIGdvbm5h 799\nIGNvbW0= 800\nIGhlbA== 801\nb3RoZXI= 802\nIGtl 803\naWNhbA== 804\nIDM= 805\nIGVs 806\nIHRocm91Z2g= 807\nIGNvbWU= 808\nYXJr 809\nZGF5 810\naWVy 811\nw7M= 812\nIHRoYW4= 813\nIFRoZXk= 814\nIG1heQ== 815\nIHNlcg== 816\n7ZU= 817\nIGNhbGw= 818\nIGRpZmZlcmVudA== 819\nIHNob3VsZA== 820\nIFRoZXJl 821\nYXJ5 822\nIE5vdw== 823\n44I= 824\ndGhpbmc= 825\nd2U= 826\nb3J5 827\nZnRlcg== 828\nIHB1dA== 829\nb3Jz 830\naWFs 831\n64s= 832\nIHVuZGVy 833\nIGluYw== 834\nIFll 835\ndWI= 836\nZm9ybQ== 837\nIHZpZGU= 838\n4Lg= 839\ndmVycw== 840\nIGZlZWw= 841\nw6E= 842\nb2R5 843\nZnQ= 844\nZm9yZQ== 845\nIGVt 846\nZ2V0 847\nIHNhaWQ= 848\naXRpb24= 849\nIHJlYw== 850\naW91cw== 851\nYXRjaA== 852\nIHRyeQ== 853\nIGhlbHA= 854\nIHNob3c= 855\n0LQ= 856\nIGJpdA== 857\ndWxs 858\n0LI= 859\n0YLQvg== 860\nZ3I= 861\nIHBsYXk= 862\naWZl 863\nYWls 864\nIFllYWg= 865\nIHF1ZXN0 866\nIG1hbnk= 867\nIHBlcnM= 868\nIGdyZWF0 869\nw60= 870\nIGVzdA== 871\nbmc= 872\nIOKZ 873\ndHk= 874\nbGE= 875\nIE9o 876\nINc= 877\n4K4= 878\nIEJl 879\nYWR5 880\nIG1vc3Q= 881\nY3Rpb24= 882\nIE5v 883\nIGRvaW5n 884\nIGJlaW5n 885\nIHRvbw== 886\nY2Vz 887\nIGJs 888\nLiI= 889\nIHJlbQ== 890\naXNz 891\nb25z 892\nPj4= 893\ncnU= 894\nd24= 895\nb250 896\naWI= 897\nZWxs 898\nIHNt 899\nb3Ro 900\ndWFs 901\nID4+ 902\nIHBo 903\nbGVz 904\nb2M= 905\nZnVs 906\nIHNlYw== 907\naXNl 908\nIGFkZA== 909\naWdo 910\nZXJ0 911\nIHNhbWU= 912\n4oA= 913\nIG1lYW4= 914\nIGZpbmQ= 915\nZWs= 916\nIGVuZA== 917\nLS0= 918\n0Lw= 919\nIHN0aWxs 920\nYXo= 921\nICc= 922\nIG1pbg== 923\nIHllYXJz 924\ndXJu 925\nIGFyb3VuZA== 926\nc2VsZg== 927\nIHdy 928\nYnM= 929\nb3VnaHQ= 930\nIOKZqg== 931\nIGZs 932\nYW5nZQ== 933\nIGFmdGVy 934\nIHBvaW50 935\nbWVy 936\ndmVk 937\nIGxvbmc= 938\nb3k= 939\n5Lg= 940\nIGNy 941\nd2F5cw== 942\nIHN5 943\nIHRyYQ== 944\nIDIw 945\nYXZl 946\nIGNoZQ== 947\nIGVudA== 948\nIGJlZm9yZQ== 949\ncGg= 950\nIGF0dA== 951\naWFu 952\naWx5 953\nIHBlcnNvbg== 954\nIGJpZw== 955\nIHNjaA== 956\nIHJlYWw= 957\nIG5leHQ= 958\nIGxvdmU= 959\nIHZpZGVv 960\nIExldA== 961\nIGZpbg== 962\nIG1haw== 963\naWJsZQ== 964\nIHRvZGF5 965\nZXJt 966\nIEFs 967\nb3dlcg== 968\nYW5u 969\naXg= 970\nIHBhcg== 971\nIHN0dWQ= 972\nw7Y= 973\nIGltcG9ydA== 974\ndGU= 975\nIGdpdmU= 976\ndmVz 977\nIGRpZQ== 978\nIGRlYw== 979\nIHRlbGw= 980\nINC6 981\n0YHRgg== 982\nIHdoeQ== 983\naWNhbGx5 984\naWN0 985\ncmVk 986\nIGJhcw== 987\nIHN1cmU= 988\nIGJlbA== 989\nYXRpbmc= 990\nIHRhaw== 991\nIHNldA== 992\nIGxpZmU= 993\nIGRpZG4= 994\n2Kc= 995\nb2I= 996\ndW5k 997\nYXRo 998\nIG9w 999\nINC+ 1000\nYWl0 1001\nIHdvcmxk 1002\nIHN1cHA= 1003\naW8= 1004\nIGNvdXI= 1005\nINC4 1006\nd2FyZA== 1007\n0LXQvQ== 1008\nIGFsd2F5cw== 1009\ndXA= 1010\nIGhhbmQ= 1011\nIEhvdw== 1012\nY2lhbA== 1013\nIGNvbnM= 1014\nINE= 1015\nIGluZA== 1016\nIDQ= 1017\nIEFz 1018\nIGZ1bg== 1019\namVjdA== 1020\nIGltcG9ydGFudA== 1021\nIHN1cg== 1022\nZXc= 1023\nYXRlcw== 1024\nIDU= 1025\nIGRp 1026\nIG1hZGU= 1027\nIGlucw== 1028\nIGFzaw== 1029\nIGV0 1030\nIG51bQ== 1031\nIGNhcg== 1032\nIE9rYXk= 1033\nIHNpbQ== 1034\naWs= 1035\nIGxhc3Q= 1036\nIEdv 1037\nIG11cw== 1038\nIHJlbA== 1039\ndWxhcg== 1040\ntOw= 1041\nIFdlbGw= 1042\ncGVjdA== 1043\nIFRoYW5r 1044\nIHRocmVl 1045\nw6M= 1046\n44M= 1047\nIGludg== 1048\nIGdlbg== 1049\nbGlj 1050\nIGhhcHBlbg== 1051\n64o= 1052\naWVu 1053\nZXZlcg== 1054\n0L7Qsg== 1055\nIHN0cg== 1056\nIEFsbA== 1057\nIGluc3Q= 1058\nIOKA 1059\nIGRlZg== 1060\nIHNs 1061\nIG1pZ2h0 1062\ndW5n 1063\nIHllYXI= 1064\nIG93bg== 1065\nIGtlZXA= 1066\nYm9keQ== 1067\nZGVy 1068\nINGC 1069\nINC0 1070\nIGFub3RoZXI= 1071\nIG1vZA== 1072\nIGV2 1073\nIGd1eXM= 1074\nIGFibGU= 1075\nw6Nv 1076\ncXVl 1077\naWRlbnQ= 1078\nIFllcw== 1079\nIGl0cw== 1080\nIHBsYWNl 1081\nIHByb2R1 1082\nYXJu 1083\nINC8 1084\nIHJlcA== 1085\nIGV4cGVy 1086\nIGZhbQ== 1087\naXRpZXM= 1088\naWZpYw== 1089\nIGhpZ2g= 1090\naWVk 1091\nb29s 1092\naWV3 1093\n0LXRgg== 1094\ncmVu 1095\nIGRvbmU= 1096\nIC4uLg== 1097\n64qU 1098\nc3RlbQ== 1099\nIFNl 1100\nIGJldHRlcg== 1101\nY29tZQ== 1102\nIGRlbA== 1103\nIHR5 1104\nIHVt 1105\nIGhv 1106\nIEFu 1107\nIG1vbg== 1108\naW5ncw== 1109\nIHNr 1110\nIG9i 1111\nY29t 1112\nYmxlbQ== 1113\nb3Bl 1114\nc3RhbmQ= 1115\nJ2Q= 1116\nbWVudHM= 1117\nIGVsZQ== 1118\nIElz 1119\nIGRh 1120\nIHJlZw== 1121\nbGVhc2U= 1122\naWtl 1123\nYWxz 1124\naXpl 1125\n6rA= 1126\nIGNhcmU= 1127\nIG5ldmVy 1128\n7J20 1129\nZXNl 1130\nIG1ldA== 1131\nb2xvZw== 1132\nIFdoZW4= 1133\ndWNr 1134\n0LXRgA== 1135\nIMOp 1136\nIGRhdA== 1137\nw6c= 1138\nIGV4YW0= 1139\naWxpdHk= 1140\nIGRldA== 1141\nY3Jp 1142\nIHVzZWQ= 1143\nIERv 1144\nIHRyYW5z 1145\nZWc= 1146\ndGVu 1147\n0Y4= 1148\nY3Vz 1149\nIHNlY29uZA== 1150\nIGJlc3Q= 1151\nIGhhcmQ= 1152\nIGlkZQ== 1153\nIHByb2JsZW0= 1154\n6rM= 1155\nIFVu 1156\n0YU= 1157\nIM4= 1158\nIHdhdGNo 1159\nIFNo 1160\nYXR0ZXI= 1161\nIHByZXQ= 1162\nIGRlcg== 1163\nIGNvdXJzZQ== 1164\nxZ8= 1165\nYXRpdmU= 1166\naWNz 1167\nIHF1ZXN0aW9u 1168\ndXRl 1169\n7Jc= 1170\nIEZvcg== 1171\nYXRoZXI= 1172\nIGNvbA== 1173\naWVuZA== 1174\nIO0= 1175\nIFo= 1176\nIGRvZXNu 1177\nYXJjaA== 1178\nIGludGVyZXN0 1179\nIHBvbA== 1180\nIGNvcg== 1181\naWVuY2U= 1182\nIHByZXM= 1183\nIGVhY2g= 1184\nIHN5c3RlbQ== 1185\nIGZhY3Q= 1186\naWVs 1187\nYWJseQ== 1188\nIGVy 1189\nIHJ1bg== 1190\nIOyd 1191\nIHRvcA== 1192\nbmVy 1193\nIHRob3VnaHQ= 1194\nIGVhcw== 1195\naWVudA== 1196\nIGNyZQ== 1197\n0Yg= 1198\nIGNvbW11bg== 1199\neWU= 1200\ncmVhZHk= 1201\nbGxvdw== 1202\nIGV2ZXJ5dGhpbmc= 1203\nb21t 1204\nIG1lZA== 1205\nmpQ= 1206\nIGNvdW50 1207\naXRz 1208\nIGNvbXBs 1209\naGlw 1210\n2YQ= 1211\nb29r 1212\nIHRvZ2V0 1213\nIHRvZ2V0aGVy 1214\nYW1w 1215\nIGdhbWU= 1216\nIGFscmVhZHk= 1217\n0LDQuw== 1218\nIGNhbGxlZA== 1219\nYWxl 1220\nxYI= 1221\nIE15 1222\nIHVuZGVyc3RhbmQ= 1223\nIGRy 1224\nIG1vbQ== 1225\naXRlZA== 1226\n0L7Quw== 1227\nIHVzaW5n 1228\nenk= 1229\nIG51bWJlcg== 1230\n44CB 1231\nY2Vk 1232\nIGNsZQ== 1233\n0L3Qvg== 1234\n64uk 1235\naW5jZQ== 1236\nIGxvb2tpbmc= 1237\nIHByZXR0eQ== 1238\nIHByb2I= 1239\nIFNoZQ== 1240\nIHZl 1241\nIGdldHRpbmc= 1242\nIHdlZWs= 1243\nIGVmZg== 1244\ndWZm 1245\nYWly 1246\ndWVz 1247\nZXJu 1248\nIFE= 1249\nb3Vw 1250\nZW50aW9u 1251\nIHNpZGU= 1252\n0L7QvA== 1253\nIGZvcm0= 1254\nIGJ1cw== 1255\nIGFzcw== 1256\nIGVk 1257\nYXNvbg== 1258\nd2Vlbg== 1259\n4oCm 1260\nIHR1cm4= 1261\nIGN1cg== 1262\nIGNvbGw= 1263\nIGRpcmU= 1264\nIEdvZA== 1265\nIDEw 1266\nIGVxdQ== 1267\nINCx 1268\nIG9wZW4= 1269\nIHN1Y2g= 1270\naXJk 1271\n0LDQug== 1272\nIGVhcg== 1273\nxJk= 1274\nZ2Fu 1275\nIHBhcnRpYw== 1276\nIGZyaWVuZA== 1277\nIGV4cA== 1278\nIGV4dA== 1279\nIGhvbWU= 1280\nIHdhdGVy 1281\nIE9u 1282\n0YLRjA== 1283\nb3Jr 1284\nINC/0YA= 1285\nIG1vdmU= 1286\nbmVzcw== 1287\nZW5zZQ== 1288\naG8= 1289\nIGNoYXI= 1290\nY28= 1291\naW5z 1292\nIGJvdGg= 1293\nIDE5 1294\nIGdyYQ== 1295\nIGJldHdlZW4= 1296\n4bs= 1297\nIOyV 1298\nYXNo 1299\nIFJl 1300\nYWk= 1301\nYWx0aA== 1302\ndXJlcw== 1303\nZW1iZXI= 1304\nIGF2 1305\nIHZlcg== 1306\nw6o= 1307\nb25leQ== 1308\nIHRoYW5r 1309\nIG1heWJl 1310\ndWM= 1311\naW1l 1312\n6rOg 1313\nIGF3YXk= 1314\nIG5hbWU= 1315\nb3VzZQ== 1316\nIGFjYw== 1317\nIG11c2lj 1318\nIGNoYW5nZQ== 1319\nIHBhc3M= 1320\nZ2Vy 1321\nIGJ1aWxk 1322\nIHZhbA== 1323\naW5lc3M= 1324\nYW55 1325\nIGZldw== 1326\ntOs= 1327\ndGE= 1328\nIGxpc3Q= 1329\nw6U= 1330\nIG9sZA== 1331\nIOye 1332\nIHNvcnQ= 1333\nIG1lbQ== 1334\nIGNh 1335\nY2VwdA== 1336\nIGdlbmVy 1337\nIHllYWg= 1338\nIHdoaWxl 1339\nIGFueXRoaW5n 1340\ncmlj 1341\nZ3JhbQ== 1342\nIGVpbg== 1343\nY3k= 1344\ndXJpbmc= 1345\nIERl 1346\nIHBvd2Vy 1347\nIGNvbWluZw== 1348\nIHdvcmQ= 1349\nIC0t 1350\nIGJlbGll 1351\nIGZvdW5k 1352\ndG8= 1353\n0L8= 1354\nIG1lYW5z 1355\nIGluZm9ybQ== 1356\nINg= 1357\nINGH 1358\nIHNtYWxs 1359\nMDAw 1360\nIGNhbWU= 1361\nIO2V 1362\nd2g= 1363\nIHdvcmtpbmc= 1364\nIGV4YW1wbGU= 1365\nIHBvcw== 1366\nIGRlcA== 1367\n6rI= 1368\n5Lo= 1369\nb3Rl 1370\nIGRlbQ== 1371\n7Kc= 1372\ndHM= 1373\nIHZhcg== 1374\nYXV0 1375\nIHRyaQ== 1376\nY2hu 1377\nIGhlYWQ= 1378\nIHdob2xl 1379\n15k= 1380\nemU= 1381\nIHRyeWluZw== 1382\nIHRlbQ== 1383\nIGNvdQ== 1384\nZXRz 1385\nIDY= 1386\nIGZpbA== 1387\ndmVsb3A= 1388\nIGNhc2U= 1389\n4K8= 1390\nIHByb2JhYmx5 1391\nIG9rYXk= 1392\nIHBsYW4= 1393\nIHNpdA== 1394\nIHNjaG9vbA== 1395\nIFRoZW4= 1396\nuOs= 1397\nbWU= 1398\nIHByb2Nlc3M= 1399\nIGZhcg== 1400\nIHJlYWQ= 1401\nIHBvc3M= 1402\nIGJyZQ== 1403\nIHNvbA== 1404\naWNodA== 1405\nIHN1cHBvcnQ= 1406\nIFRv 1407\nZXJ0YWlu 1408\nIHN0YXJ0ZWQ= 1409\nIGNhcA== 1410\nIGxlZnQ= 1411\nIGRhdGE= 1412\nIHRpbWVz 1413\n0LXQuw== 1414\nIHdhbnRlZA== 1415\n0LDQvQ== 1416\nIHRhbGtpbmc= 1417\nIGlzdA== 1418\nIGhhdmluZw== 1419\ndW1w 1420\nIGNvbnRpbg== 1421\nIHN1Yg== 1422\nINC3 1423\ncHI= 1424\n64uI 1425\naW5h 1426\nxbw= 1427\nIGNyZWF0 1428\nb2Rl 1429\n15U= 1430\n5pg= 1431\nISE= 1432\nIHRlcm0= 1433\naXNt 1434\n0L7QtA== 1435\nIEJlY2F1c2U= 1436\nIHdlbnQ= 1437\naWRlcg== 1438\nIHByb3Y= 1439\nIGNoaWxk 1440\nIGRlbg== 1441\nIGxpZ2h0 1442\nYnI= 1443\ns9C+ 1444\nb2g= 1445\nIGJvb2s= 1446\nINk= 1447\ndXRpb24= 1448\nIEp1c3Q= 1449\nZW5l 1450\nIGZvdXI= 1451\nIHZpcw== 1452\n6rCA 1453\nIGhvcGU= 1454\nIG1ha2luZw== 1455\nIExl 1456\n7JU= 1457\nIG9wcA== 1458\nYXU= 1459\nIG1vbmV5 1460\nIHByb2dyYW0= 1461\nw6g= 1462\nIHN0YW5k 1463\nSU4= 1464\nIHNpZ24= 1465\nIGxlYXJu 1466\nw6A= 1467\nIERvbg== 1468\nIHRlYW0= 1469\nINC90LA= 1470\nbHVk 1471\nIHJlc3Q= 1472\naWNlcw== 1473\n5pw= 1474\nINGA 1475\nIGF1dA== 1476\nIGxlYWQ= 1477\nYXRpb25hbA== 1478\nZGU= 1479\nZ3k= 1480\nIG5pY2U= 1481\nIGRhcw== 1482\nIGRpc3Q= 1483\nIGh1bQ== 1484\nIE9uZQ== 1485\n5og= 1486\nIGNvbWVz 1487\nIGpv 1488\nIGNlbnQ= 1489\nIGV4cGw= 1490\nIG1hcms= 1491\ncmVlbg== 1492\nbGVk 1493\nZ2lu 1494\n7JqU 1495\nIGxldmVs 1496\nIGNvbmY= 1497\ndXNo 1498\nIGRldmVsb3A= 1499\nIHRlc3Q= 1500\nZW5n 1501\ndmlvdXM= 1502\nYXR1cmU= 1503\n0LXQvA== 1504\ncmV0 1505\nIGpl 1506\nIHN0dWZm 1507\nIGNsYXNz 1508\nb3dz 1509\nIOq3 1510\nIHNp 1511\nIGxlcw== 1512\ncm9w 1513\n55o= 1514\nIHBvcg== 1515\nIHdhcg== 1516\n7JeQ 1517\nIGV2ZXJ5b25l 1518\nIGdl 1519\nIGNoZWNr 1520\nb3R0 1521\nIHNpbmc= 1522\nIGFydA== 1523\nIGZvbGxvdw== 1524\nIDIwMQ== 1525\nIEZy 1526\nYWlz 1527\n7JY= 1528\nzrE= 1529\n5bA= 1530\nIMOg 1531\naW1lcw== 1532\nIHJldA== 1533\nIGNoYW5n 1534\nIHB1Yg== 1535\nIGluZg== 1536\nIHRlY2hu 1537\nYWRh 1538\naXZlcw== 1539\nIGJlaA== 1540\nIGxvb2tz 1541\n44CC 1542\n0Lc= 1543\nIFdoeQ== 1544\nIGVub3VnaA== 1545\nIGJyYQ== 1546\naXRjaA== 1547\n5Ls= 1548\nIGFkdg== 1549\n0LE= 1550\nIHdpdGhvdXQ= 1551\nd2Vy 1552\nbWVyaWM= 1553\nZGVu 1554\nIGNvbXBsZXQ= 1555\nIGlkZWE= 1556\ndGVycw== 1557\nb2Nr 1558\nIGRlZmlu 1559\nIGV2ZXI= 1560\nIGds 1561\nIG9uY2U= 1562\nIGJyaW5n 1563\nIHNheWluZw== 1564\nIGFucw== 1565\nIGhlYXI= 1566\nbmVjdA== 1567\nIGxlc3M= 1568\nZ28= 1569\ncmVhbQ== 1570\nYWRv 1571\n7J4= 1572\nIG1pbmQ= 1573\nZW50ZQ== 1574\nIGZ1bGw= 1575\nIGJhZA== 1576\nIHdvbQ== 1577\nIHNvbWVvbmU= 1578\nIGR1 1579\nIHdvbg== 1580\nIGNvbnRybw== 1581\nb3J0dW4= 1582\nIGhlYWx0aA== 1583\nIGNobw== 1584\nIEFy 1585\nIGNvbmM= 1586\nIGluZm9ybWF0aW9u 1587\nIHN0b3A= 1588\nYXR0 1589\nYXRlbHk= 1590\n5L0= 1591\nIGdyb3Vw 1592\nINGD 1593\nIHF1aXRl 1594\nIHJlc3A= 1595\nRVI= 1596\ndWdodA== 1597\n6rg= 1598\nbWFu 1599\naXplZA== 1600\nIEJy 1601\nIHJlbWVtYmVy 1602\nIGZhbWlseQ== 1603\nIGJ1c2luZXNz 1604\nYXc= 1605\nIHNwZWM= 1606\nIGF1 1607\nIE9y 1608\nxIU= 1609\nIHNlZW4= 1610\nIGxhcg== 1611\nIDc= 1612\nZ2c= 1613\nYmVycw== 1614\nIGRyYQ== 1615\nIG1vbnRo 1616\nIHNheXM= 1617\nIGlzcw== 1618\nIGxpdmU= 1619\nIGxpbmU= 1620\nIG1vbWVudA== 1621\nIGV4Yw== 1622\nZWxz 1623\nIHNvdW5k 1624\nIGNvb2w= 1625\nIGxvYw== 1626\nIGNlcnRhaW4= 1627\nIGRyaQ== 1628\n0L7Rgg== 1629\nYW1lcw== 1630\nIG11c3Q= 1631\nbnk= 1632\n0LjRgg== 1633\nIGtpZA== 1634\nIGluY2x1ZA== 1635\n7J2E 1636\nYXRvcg== 1637\nxJ8= 1638\naGE= 1639\nYXJlZA== 1640\nIHNlZW0= 1641\n0Lk= 1642\n7IQ= 1643\nIGVsc2U= 1644\nIOyg 1645\naXJs 1646\nIDg= 1647\nIHZv 1648\nIHF1ZXN0aW9ucw== 1649\naW5lcw== 1650\nZWU= 1651\nw7xy 1652\nIEFtZXJpYw== 1653\nIHN0b3J5 1654\nIHNlcnY= 1655\ndmVybg== 1656\nYWdlcw== 1657\nbGFuZA== 1658\nIOKAkw== 1659\nZXJh 1660\nIENhbg== 1661\nIHBvcA== 1662\nZXRoZXI= 1663\nIG5h 1664\nIG9yZGVy 1665\nIG1ha2Vz 1666\nIHNpbmNl 1667\nY29u 1668\nY3Rvcg== 1669\nIHRob3VnaA== 1670\nIHByb2R1Y3Q= 1671\n0LvQuA== 1672\nIGxlZw== 1673\nIG1lZXQ= 1674\nYWxm 1675\n0YHRjw== 1676\ndW5jaA== 1677\naXRlcg== 1678\nb3Zl 1679\n15XX 1680\naWV0 1681\n0LDQvA== 1682\naXRhbA== 1683\nIHN1cGVy 1684\nbGluZw== 1685\nIHBheQ== 1686\nIHBhcmE= 1687\nIGpvYg== 1688\nIEhlcmU= 1689\nIHN3 1690\na3M= 1691\ncHRpb24= 1692\nbWE= 1693\nIGJlbGlldmU= 1694\nrOs= 1695\nIHdhaXQ= 1696\n0L7QuQ== 1697\nIHVudA== 1698\nIHF1aWNr 1699\naHI= 1700\nINGN 1701\nIFBybw== 1702\nIG1lbg== 1703\n4Lk= 1704\nIGRheXM= 1705\nIGdvZXM= 1706\nIHNwZWFr 1707\nIEF0 1708\nZW1lbnQ= 1709\nIG1pc3M= 1710\nIGF3 1711\nIGRlc2lnbg== 1712\nIHByb2plY3Q= 1713\n0L7RgA== 1714\naWo= 1715\nYW50cw== 1716\nYXRz 1717\nIENocg== 1718\nIDk= 1719\nIGN1dA== 1720\nIHJlcXU= 1721\nINC90LU= 1722\nIE5vdA== 1723\nYXN0ZXI= 1724\nIG1pbGw= 1725\nIHBhcnRpY3VsYXI= 1726\nIHBpZQ== 1727\nIHN0dWRlbnRz 1728\nIGZpdmU= 1729\nb3Vu 1730\nIE5l 1731\nIGdp 1732\nIHBhcw== 1733\nIGZyZWU= 1734\nIFNw 1735\nbGljaA== 1736\nIHByb2Y= 1737\nIGVuZw== 1738\nIHByb3Q= 1739\nIExpa2U= 1740\nb3NlZA== 1741\nIGNvbm5lY3Q= 1742\nYXBw 1743\nIOun 1744\naXRpbmc= 1745\nIGJsbw== 1746\nIGxvcw== 1747\naXN0cw== 1748\nIGV4cGVyaWVuY2U= 1749\ncmVudA== 1750\nIHN0YXk= 1751\nIGZvb2Q= 1752\ndG9u 1753\ncnVjdA== 1754\nIGhpc3Q= 1755\ndmlldw== 1756\naW5pbmc= 1757\nbW9zdA== 1758\naXZlcnM= 1759\nYm8= 1760\nIFRy 1761\nZ2Vu 1762\nIHBsZWFzZQ== 1763\nIGNvbW11bml0eQ== 1764\nIGNl 1765\nQU4= 1766\nbm8= 1767\nIGJvZHk= 1768\nIGhvdXI= 1769\nIHZlcnM= 1770\n4bo= 1771\nY2Vy 1772\nIOqw 1773\nIHJlYXNvbg== 1774\nIFJpZ2h0 1775\nIGxhdGVy 1776\nz4Q= 1777\nIGhvdXNl 1778\nIFg= 1779\n0L7QvQ== 1780\nIHN0YXRl 1781\nZmlj 1782\n5aQ= 1783\nxZs= 1784\naWVsZA== 1785\nIHByaQ== 1786\nIHBhc3Q= 1787\nIHdhbGs= 1788\nb2xvZ3k= 1789\nZXJpbmc= 1790\nYW5uYQ== 1791\nIHRlcg== 1792\nIGhvbGQ= 1793\nIG9yZ2Fu 1794\nYmVu 1795\nzr8= 1796\nw7Nu 1797\nIGVmZmVjdA== 1798\nIHlvdXJzZWxm 1799\nIHBsdXM= 1800\nYWo= 1801\nYW5kbw== 1802\ndXJhbA== 1803\nIHJvb20= 1804\nbGVjdA== 1805\n6rKM 1806\nPyI= 1807\nc2lkZQ== 1808\nIGJlY29tZQ== 1809\n0YY= 1810\nIMI= 1811\nb29k 1812\nIGNvbnN0 1813\nIG5pZ2h0 1814\ndXRlcw== 1815\n0LY= 1816\nIGJyZWFr 1817\nIHBhaW4= 1818\nIHN0ZXA= 1819\naXJlZA== 1820\nIG5vdGhpbmc= 1821\nIHVudGls 1822\n0ZY= 1823\n0LDQsg== 1824\n2Yo= 1825\nIGR1cmluZw== 1826\n7KeA 1827\nbGVzcw== 1828\nb2xs 1829\n0L3Riw== 1830\nzrk= 1831\nZmVjdA== 1832\naXZlcg== 1833\nj4Q= 1834\naXRoZXI= 1835\neWluZw== 1836\nIGJlZ2lu 1837\n15nX 1838\naXZpZA== 1839\nIMOn 1840\nIHNhbA== 1841\nIHRh 1842\nIHBvdA== 1843\nICQ= 1844\nIG1hcg== 1845\nIGNsZWFy 1846\nIGZhY2U= 1847\nIGdyb3c= 1848\nICo= 1849\nIGluc2lkZQ== 1850\nIGZyaWVuZHM= 1851\nIGxlYXZl 1852\nZW5u 1853\nIGVhc3k= 1854\nIGFyZWE= 1855\nYWxpdHk= 1856\nb3Vk 1857\nIGVhdA== 1858\n2YY= 1859\nIHB1cg== 1860\nb3Ju 1861\nIHNhdw== 1862\nIGFuc3dlcg== 1863\nIGZyb250 1864\nIGJlYXV0 1865\nvOs= 1866\nIG1hdHRlcg== 1867\nIHNvbg== 1868\nIE5ldw== 1869\nIHJlc3VsdA== 1870\naWRlcw== 1871\nY2hl 1872\nIGZ1dA== 1873\ncHM= 1874\nIGZvY3Vz 1875\nIGludGVyZXN0aW5n 1876\n5aU= 1877\nIGFw 1878\nIi4= 1879\nIGNyZWF0ZQ== 1880\n0L7RgQ== 1881\nIHByZXNz 1882\ncm9zcw== 1883\nIHBpY2s= 1884\nbGluZQ== 1885\nIHRvb2s= 1886\nIE1heQ== 1887\ncm93 1888\nIGljaA== 1889\nmOs= 1890\nIHJlZg== 1891\nIG1vcg== 1892\ncmFjdA== 1893\nYXJlbnQ= 1894\nQVI= 1895\nIGV4YWN0 1896\nIHNwYWNl 1897\nd29yaw== 1898\n0L3QuA== 1899\nIGJpcg== 1900\nIGRldg== 1901\n0LM= 1902\nIHRvbGQ= 1903\nIHB1YmxpYw== 1904\nY2lhbGx5 1905\nIHZpZXc= 1906\nIEhleQ== 1907\nbWVk 1908\nbGxv 1909\nY2M= 1910\nIGZhYw== 1911\nIGNvdXBsZQ== 1912\nIGhlYXJ0 1913\nbGVy 1914\nIHJlYWR5 1915\nIGFsbW9zdA== 1916\nYXJpbmc= 1917\nIGhhbGY= 1918\nIE1l 1919\nYXZvcg== 1920\naXF1ZQ== 1921\nIGNoYXJhYw== 1922\nIHByYWN0 1923\nT04= 1924\nYW5l 1925\nIGls 1926\n0L3QsA== 1927\nIHZp 1928\nbGlzaA== 1929\naGVhZA== 1930\nIGxlYXN0 1931\nIGJhc2ljYWxseQ== 1932\nYXNlZA== 1933\ncmlnaHQ= 1934\nIHlldA== 1935\nIHRha2luZw== 1936\nIGNvdW50cnk= 1937\nIHdpbg== 1938\nIGlzbg== 1939\nIHBvc3NpYmxl 1940\nIGNhbQ== 1941\nIGluY3Jl 1942\nIHBhdA== 1943\nIHdhbm5h 1944\nIGNvbnNpZGVy 1945\nIGFicw== 1946\nIHdpdGhpbg== 1947\nIGh1bWFu 1948\nIHRoaW5raW5n 1949\nIG9o 1950\noZw= 1951\nIHF1aQ== 1952\nYXNlcw== 1953\nIDA= 1954\naXRlbHk= 1955\nIGtpbGw= 1956\nIG1pbA== 1957\nIGludmVzdA== 1958\naXN0ZXI= 1959\nIHN1Yw== 1960\naW9uYWw= 1961\nZWxm 1962\nIHdoZXRoZXI= 1963\nIGNvbnRyb2w= 1964\nIGFnYWluc3Q= 1965\nb3Rz 1966\n64uI64uk 1967\naW9y 1968\nIHByZXNlbnQ= 1969\nINin 1970\nIHdhdGNoaW5n 1971\ndWJl 1972\nZXJ2 1973\nIG5pY2h0 1974\nIGdvdmVybg== 1975\nIFRoZXNl 1976\nIDo= 1977\ndWl0 1978\ndWdo 1979\nIHdvcmtz 1980\nb28= 1981\nIHdpcg== 1982\nIGFpcg== 1983\nIFRl 1984\n0LDQtw== 1985\naXNpb24= 1986\nd2hlcmU= 1987\nIHRvdA== 1988\nam95 1989\n7Is= 1990\nIHZvbA== 1991\nINC1 1992\nIGNsb3Nl 1993\nIEFk 1994\n0Yk= 1995\naW5lZA== 1996\nIHVuYQ== 1997\nIOq3uOs= 1998\nsOs= 1999\nb3JyeQ== 2000\nIGJybw== 2001\nIGZpbG0= 2002\naWZ0 2003\nMjA= 2004\nIHR5cGU= 2005\nIGhhcHBlbmVk 2006\nIEFt 2007\nIGdpcmw= 2008\nIEFyZQ== 2009\nd2FyZHM= 2010\nIHBvdXI= 2011\nIGNvbG9y 2012\nZWx0 2013\n0LDRgQ== 2014\nIHNlbnNl 2015\nbGV4 2016\nIFdpdGg= 2017\ndXNz 2018\ncmli 2019\nIHJlc2U= 2020\nIG5vcm0= 2021\nIGZ1dHVyZQ== 2022\nIGRlYWw= 2023\nZW5kaW5n 2024\nZXk= 2025\nIHg= 2026\nZXJv 2027\nIENs 2028\ndWs= 2029\nIHdoYXRldmVy 2030\nc2VsdmVz 2031\nIHlvdW5n 2032\n7Io= 2033\nIE1hcg== 2034\nIENocmlzdA== 2035\nIGd1ZXNz 2036\nIHBlcmZvcm0= 2037\nIGVuZXI= 2038\ncm9u 2039\nIGhpdA== 2040\nIHdvbmQ= 2041\nIGRpcmVjdA== 2042\nIEV2ZXJ5 2043\nIG9mdGVu 2044\nIGZh 2045\nIGFsb25n 2046\nIGNsaWNr 2047\nIExvb2s= 2048\nIHNpdHU= 2049\nIGhhcHB5 2050\nZWFk 2051\nIGFnbw== 2052\nIGVuYw== 2053\nIG15c2VsZg== 2054\nIGNvdmVy 2055\n0L7QsQ== 2056\nIG1pZA== 2057\nIGNvc3Q= 2058\nIHRlbg== 2059\nIFNjaA== 2060\nIGV4cGVjdA== 2061\nIHdhc24= 2062\nIHN0cm9uZw== 2063\naWZ1bA== 2064\nIG9wcG9ydHVu 2065\naW5hbA== 2066\neWxl 2067\nIHNoYXJl 2068\nIHRydWU= 2069\nIGFwcHJv 2070\nIGNoYWxs 2071\nIG1pbnV0ZXM= 2072\nIGNoYW5u 2073\nIOuC 2074\nzrU= 2075\nbGk= 2076\nIG1lc3M= 2077\nb3JpZXM= 2078\ncGVjaWFsbHk= 2079\nIHdyb25n 2080\nIHllcw== 2081\nIOyX 2082\naXJvbg== 2083\nIGFsbG93 2084\nIHN1YnM= 2085\nIGZvcmU= 2086\nIGZpZ2h0 2087\nIHNvY2lhbA== 2088\nIGNyYQ== 2089\nYW5h 2090\nIGFmZg== 2091\nIGVzcw== 2092\nIHdheXM= 2093\nIHNob3J0 2094\nIGZhbGw= 2095\nIGxhdw== 2096\nIFdobw== 2097\nIGVuam95 2098\nIGNhbA== 2099\nIGFjY2Vzcw== 2100\nZmU= 2101\nIG5vbg== 2102\nIGFjcm9zcw== 2103\nZXJ5 2104\ndmlvdXNseQ== 2105\nIEV4 2106\naWRlZA== 2107\nIGxpbms= 2108\nIFBy 2109\nIHRlcm1z 2110\nYWNlcw== 2111\nIGxhbmQ= 2112\nYXppbmc= 2113\nIDE1 2114\nIG11bHQ= 2115\nIHNwZWNpYWw= 2116\n5YA= 2117\naXZpbmc= 2118\n7J2A 2119\nIHR5cA== 2120\nIHN0ZQ== 2121\nIMQ= 2122\nIGZvcndhcmQ= 2123\n5Y8= 2124\nIGZyZQ== 2125\nIHJlc2VhcmNo 2126\n4K+N 2127\n0LDRgg== 2128\nIG1haW4= 2129\nIHJlY29yZA== 2130\nIGh1 2131\nIGRlZmluaXRlbHk= 2132\nIGVpdGhlcg== 2133\nIGxpc3Rlbg== 2134\nIGtleQ== 2135\nIG1hcmtldA== 2136\nINGH0YLQvg== 2137\naXphdGlvbg== 2138\nIHZpZGVvcw== 2139\nIGd1eQ== 2140\nIGZpZw== 2141\nIHN0cmE= 2142\nIFBs 2143\ndWxseQ== 2144\nYW1vcw== 2145\nIG1lbnRpb24= 2146\nIHNvbmc= 2147\nIGludGVybg== 2148\ncmFs 2149\ndXJz 2150\nIGhvbg== 2151\nIHZhbHVl 2152\nIGJhcg== 2153\nY2xl 2154\n0L7Qtg== 2155\nxIc= 2156\nnOs= 2157\nIHp1 2158\n0LjQvA== 2159\nIHNpbmdsZQ== 2160\nIGF1Y2g= 2161\nY3Vzcw== 2162\nIGdldHM= 2163\nIHNvbWV0aW1lcw== 2164\n5b4= 2165\nYW1i 2166\nbW0= 2167\nY2luZw== 2168\nIHBlcmZlY3Q= 2169\nIEJs 2170\nb3V0aA== 2171\n7KA= 2172\nIHNjaQ== 2173\ncGFy 2174\nIHJlZA== 2175\nIHBvc3Q= 2176\nIG1vdA== 2177\nIGVsZWN0 2178\nIEV1 2179\naXRpdmU= 2180\nIFNvbWU= 2181\nIGRlc2NyaQ== 2182\nIGN1cnJlbnQ= 2183\nw6lz 2184\nIHRyZQ== 2185\nIEVu 2186\nIG1pdA== 2187\nRU4= 2188\niOs= 2189\naXVt 2190\nIGhlYXJk 2191\nIHNpbXBsZQ== 2192\nbGFy 2193\nIGV2ZXJ5Ym9keQ== 2194\naWxhcg== 2195\nIG5lZWRz 2196\nIGRpZmZpYw== 2197\nIEdvb2Q= 2198\ndW1lbnQ= 2199\nY2VudA== 2200\nIG9wZXI= 2201\n0LDRgtGM 2202\nZXR5 2203\nIGJsYWNr 2204\nIGdpdmVu 2205\nb25lcw== 2206\nIHdlbA== 2207\n6YA= 2208\nIOyVhA== 2209\nIDMw 2210\nQVQ= 2211\nIHN0YXQ= 2212\nb3VjaA== 2213\nIE1y 2214\n0LDRgA== 2215\nIHNobw== 2216\nIGNvbmQ= 2217\n15Q= 2218\nbXk= 2219\nIGNoaWxkcmVu 2220\nIGV1 2221\n0LXQtA== 2222\n7JWE 2223\ndGVybg== 2224\nIHVo 2225\nIGhhcg== 2226\nIHByb20= 2227\nIHB1bGw= 2228\ncmV3 2229\nIGNvbXBhbnk= 2230\nIGJlYXV0aWZ1bA== 2231\ndXN0b20= 2232\n7ZWY 2233\n0LrQuA== 2234\nIHN0cmU= 2235\nIGFtYXppbmc= 2236\ncmllcw== 2237\nIHN1Y2Nlc3M= 2238\nIG1hY2g= 2239\nbm90 2240\nIGRpc2N1c3M= 2241\nIG5hdA== 2242\npqw= 2243\nIHVuZQ== 2244\nIGRpZmZpY3VsdA== 2245\nIHJpcw== 2246\nzr0= 2247\nIGNhbXA= 2248\nIGJ1eQ== 2249\nIG1hZw== 2250\ncG8= 2251\nIFlvdXI= 2252\nIGJlaGluZA== 2253\naWNh 2254\nxLFu 2255\nIE9L 2256\nIGxhbmc= 2257\nIHdvbWVu 2258\nIGVudg== 2259\nIHJlY2U= 2260\nIGNoYW5uZWw= 2261\naWFsbHk= 2262\ndWxl 2263\nIDEy 2264\ndGhlcnM= 2265\nIGJvdHQ= 2266\nIHJlcG9ydA== 2267\nZW50bHk= 2268\nZnVsbHk= 2269\nVGhl 2270\nIHNlbnQ= 2271\nIGV2ZW50 2272\nIGVuZXJneQ== 2273\nbHQ= 2274\nIHdvcmRz 2275\nYXJy 2276\nZGxl 2277\nIGFoZWFk 2278\nYXJkcw== 2279\n2LE= 2280\nIHRvb2w= 2281\nY29ub20= 2282\n0LXRgQ== 2283\nIGV4YWN0bHk= 2284\nIGZhdm9y 2285\nIGxvdw== 2286\nIHByb3Blcg== 2287\nIOyeiA== 2288\nICE= 2289\nIHJlbGF0aW9ucw== 2290\nIG1hcw== 2291\nIGtpZHM= 2292\nIGVudGlyZQ== 2293\ndWRl 2294\n2YU= 2295\nIFdoZXJl 2296\nIG9uZXM= 2297\nIGNpdHk= 2298\nb2x1dA== 2299\nIHNpeA== 2300\nYWJpbGl0eQ== 2301\nw7Zy 2302\naWxp 2303\nIEVz 2304\nIGhhcHBlbnM= 2305\nYWlucw== 2306\nIG1vZGVs 2307\nIHBpY3Q= 2308\nIGVzcGVjaWFsbHk= 2309\nIDEwMA== 2310\na3Q= 2311\nIHNvb24= 2312\nYnk= 2313\ncm9kdQ== 2314\nIGFubg== 2315\nIHN1YnNjcmk= 2316\nIFF1 2317\nIGF2YWls 2318\naW1lbnQ= 2319\nIHZvYw== 2320\na2E= 2321\nIDIwMA== 2322\nYXBlcg== 2323\nIEluZA== 2324\nIOyn 2325\naG9y 2326\njbA= 2327\nam9y 2328\n0LjQuw== 2329\nIHNxdQ== 2330\nQVU= 2331\nYXJuaW5n 2332\nINCz 2333\nSVM= 2334\nINC7 2335\n0LXQuQ== 2336\neWVz 2337\n5YU= 2338\nINCS 2339\nIG9yaWc= 2340\n0L7Qs9C+ 2341\nIGFza2Vk 2342\naWx0 2343\n0L7Qsw== 2344\nIGNvbnRpbnVl 2345\nIOyY 2346\ncmFt 2347\nIG90aGVycw== 2348\nRVM= 2349\nb2hu 2350\nIGxheQ== 2351\nIGJhc2Vk 2352\nIHB1 2353\nIGFwcGU= 2354\nIGxpbQ== 2355\nIHByb3A= 2356\ngOs= 2357\nbWlu 2358\nIGhvdA== 2359\nIExh 2360\nIGZhc3Q= 2361\nIHByb3RlY3Q= 2362\nIGFtb3VudA== 2363\nIGFxdQ== 2364\nIGZ1bmQ= 2365\nIGN1c3RvbQ== 2366\nIGN1bHQ= 2367\nIGhhbmRz 2368\nIGhhdmVu 2369\nIGF1ZA== 2370\nIG91dHNpZGU= 2371\nIEFmdGVy 2372\nYXBz 2373\nIGFuaW0= 2374\ncGxveQ== 2375\nIGhhdA== 2376\nIEZpcnN0 2377\nIHRyZWF0 2378\nIGVw 2379\nIG1hdGVy 2380\nIGJ1aWxkaW5n 2381\nIOuw 2382\n5ZA= 2383\n7ISc 2384\nemE= 2385\ndWdodGVy 2386\nIFBl 2387\nbmV5 2388\nZXRlcg== 2389\nYXRpYw== 2390\nIGVkdWM= 2391\n6riw 2392\nIG1vdg== 2393\nk6Q= 2394\nYW1h 2395\ncmF0aW9u 2396\nIHNu 2397\n2Yg= 2398\nIHN1bQ== 2399\nIHBob3Q= 2400\nINCd 2401\nIC4= 2402\nIGZpbmlzaA== 2403\naXR0aW5n 2404\n5a4= 2405\nIGxhcmdl 2406\nIOyW 2407\nIHdoaXRl 2408\nYXJh 2409\nIG1haXM= 2410\nIEhp 2411\nIGRhbQ== 2412\nINin2YQ= 2413\nIGJveA== 2414\nIEhlbGxv 2415\nIHNsZQ== 2416\nIG9wdA== 2417\ncmllZA== 2418\npbw= 2419\nIGFjdGl2 2420\nIG7Do28= 2421\nIENvbQ== 2422\nIHBsYXlpbmc= 2423\nVGg= 2424\nIGF2YWlsYWJsZQ== 2425\nIHBvcnQ= 2426\n5Yg= 2427\nIEFo 2428\nIGxhcw== 2429\nIGVhcmx5 2430\nIHdvbmRlcg== 2431\nsbA= 2432\nIDE4 2433\nY3Vs 2434\nIGZ1bmN0aW9u 2435\nIG1vcm5pbmc= 2436\nbGxl 2437\naWVudHM= 2438\ndXg= 2439\nIGNpcg== 2440\naXRpb25z 2441\nIGRlZXA= 2442\nIHBvbGl0 2443\neW9y 2444\nbXA= 2445\nYWtpbmc= 2446\njOs= 2447\nIE1hbg== 2448\nIG1pbGxpb24= 2449\nIC8= 2450\nIGluZGl2aWQ= 2451\nIHBhbg== 2452\nIGdvdmVybm1lbnQ= 2453\nIHdyaXRl 2454\nIFRvZA== 2455\nYW1lbnQ= 2456\nIM8= 2457\nIHdpbmQ= 2458\nIEVuZw== 2459\nY2hlbg== 2460\nV2g= 2461\n7Jw= 2462\nIGlkZW50 2463\ndmVudA== 2464\ndXJjaA== 2465\nIGh5 2466\nIHlh 2467\nIHRyYWQ= 2468\nIHJlbGF0aW9uc2hpcA== 2469\nw7o= 2470\nIGRvdQ== 2471\nT1I= 2472\nIHN3ZQ== 2473\nIG5lZw== 2474\naW5hdGlvbg== 2475\nIHRleHQ= 2476\naXBw 2477\nIGZpbmU= 2478\nw6Fz 2479\nIERy 2480\nIENvbWU= 2481\nIG1vbnRocw== 2482\nLCI= 2483\n0LXQvdC4 2484\nIGhvdXJz 2485\nIHBvZA== 2486\naXJ0 2487\nIGludm9s 2488\nIGNvbGxlY3Q= 2489\nIGF1Zg== 2490\nIHBh 2491\nIGhpc3Rvcnk= 2492\nbWI= 2493\naWZ5 2494\nID8= 2495\nIGJlbG93 2496\nYXN1cmU= 2497\nYWJ5 2498\nIGxhbmd1 2499\nIGFudA== 2500\nIGNvbWI= 2501\nYXRv 2502\nIGV4aXN0 2503\nIOuL 2504\nIHRha2Vz 2505\nIGNoYXJhY3Rlcg== 2506\nYWZm 2507\nIGZpZWxk 2508\nIGVjb25vbQ== 2509\naWVm 2510\nIHBpZWNl 2511\n5Zw= 2512\nIHJlYWNo 2513\nIOqy 2514\nb255 2515\nIG1hdGVyaWFs 2516\nIGRpZw== 2517\nIHBoeXM= 2518\nIGltcHJv 2519\nIHNpbWlsYXI= 2520\nSUM= 2521\nIG5ldA== 2522\neW4= 2523\nIHBvc2l0aW9u 2524\nw58= 2525\nIGJlbmU= 2526\ncmVhZA== 2527\nIGxlYXJuaW5n 2528\ndW1l 2529\nIGNsZWFu 2530\n0YLQvtGA 2531\nIGNvb2s= 2532\nIHNlZW1z 2533\nIG9s 2534\nIFVT 2535\nIEplcw== 2536\nIOCu 2537\nZW50aWFs 2538\naXZlcnNpdHk= 2539\nYWN5 2540\nINGP 2541\nb2x1dGVseQ== 2542\ncmVjdA== 2543\nIFBsZWFzZQ== 2544\nIHJlcHJlcw== 2545\nIHRvdWNo 2546\nbWVu 2547\nINCw 2548\nacOzbg== 2549\nIFRoYW5rcw== 2550\nIGFuZw== 2551\nIG1ham9y 2552\nIGl0c2VsZg== 2553\naWxscw== 2554\nIiw= 2555\naWFucw== 2556\nIHNjcmVlbg== 2557\nIGhvcg== 2558\nIGtub3du 2559\nIGVudmlyb24= 2560\nIGZpbmFs 2561\nIGZpZ3VyZQ== 2562\nIFR3 2563\nIGV5ZXM= 2564\nIGltYWc= 2565\nIHNlZWluZw== 2566\nIGhhaXI= 2567\ncmVt 2568\nIGFwcGxpYw== 2569\nZW5kcw== 2570\ncHV0 2571\nIG5ld3M= 2572\nIGNvbXBsZXRlbHk= 2573\ndWdocw== 2574\nIGtuZXc= 2575\naWZpZWQ= 2576\nIEpl 2577\nIERpZA== 2578\nIHNpdHVhdGlvbg== 2579\nIGZsbw== 2580\nbXM= 2581\nIHBob25l 2582\nIGJhbGw= 2583\nZG8= 2584\nIHBhcmVudA== 2585\nIHNvcnJ5 2586\ndXJ5 2587\n0LjQvQ== 2588\naXBz 2589\n0LDQtA== 2590\nIGluc3RlYWQ= 2591\nIGh1Z2U= 2592\nIHR1 2593\nIOOB 2594\nIEdy 2595\nIGRldGFpbA== 2596\nINCf 2597\nIGluZGl2aWR1YWw= 2598\nIGZpcmU= 2599\nIGNsb3M= 2600\nIHdlcg== 2601\ndW5l 2602\nIHJ1bm5pbmc= 2603\nIGNvbnZlcnM= 2604\nIHJlY29tbQ== 2605\nIGNvbW8= 2606\nIHNvbWVib2R5 2607\nIEpvaG4= 2608\nIOydtA== 2609\nIE91cg== 2610\ncGxlcw== 2611\nIFBo 2612\nIGFuYWw= 2613\nIDUw 2614\nIG9mZmVy 2615\nIDw= 2616\naXRpb25hbA== 2617\nZ2VzdA== 2618\nIHZvdXM= 2619\nbGV0 2620\naWN5 2621\nIGZlZWxpbmc= 2622\nTEU= 2623\ncm9z 2624\nIHRoaXJk 2625\n0L7Qug== 2626\nIHNlcmllcw== 2627\nIEFueQ== 2628\naXNlZA== 2629\nb2xk 2630\nIGRyYXc= 2631\nIHNlcnZpY2U= 2632\nIGNhbm5vdA== 2633\nYmFs 2634\nIGxpdmluZw== 2635\nxLFt 2636\nIGRpZmZlcmVuY2U= 2637\nIG9wcG9ydHVuaXR5 2638\nIG5lYXI= 2639\nb3J0aA== 2640\na2Vu 2641\nIGxvY2Fs 2642\n2Ko= 2643\nIENvbg== 2644\nIG9iamVjdA== 2645\nIGRhc3M= 2646\nkNc= 2647\nIHF1aWNrbHk= 2648\ncmFwaA== 2649\nIGlzc3Vlcw== 2650\nIEFtZXJpY2Fu 2651\nIHByZXA= 2652\nZW5jZXM= 2653\nIHByb2Zlc3M= 2654\nbGxpbmc= 2655\nb2Y= 2656\nIGZvb3Q= 2657\nYnJl 2658\nIHVzdWFsbHk= 2659\nIGdlbmVyYWw= 2660\nZGE= 2661\nYW5jZXM= 2662\nIGRlc3Q= 2663\nIG9jYw== 2664\nIG1lbWJlcnM= 2665\nIGRhbnM= 2666\nIGVxdWFs 2667\nenQ= 2668\nIGJlY29t 2669\nIG1vdmluZw== 2670\nIHNwZWNpZmlj 2671\nw61h 2672\nIGZ1cg== 2673\nIG5lY2Vzcw== 2674\nIGNvbW1vbg== 2675\nIGF0dGFjaw== 2676\nINGN0YLQvg== 2677\nIFRvZGF5 2678\nIHVucw== 2679\nIEd1 2680\naW9k 2681\nIGFjY291bnQ= 2682\nIGdyYW5k 2683\nIHNlbGY= 2684\nIEVs 2685\nIHRhc3Q= 2686\nIGNvbnRlbnQ= 2687\nIGN1 2688\nhOs= 2689\nIE1heWJl 2690\nIEplc3Vz 2691\nb3Jlcw== 2692\ncG9ydA== 2693\nqbQ= 2694\nIGdpdmVz 2695\nIG5vcm1hbA== 2696\n0YDRgw== 2697\nIGltcGFjdA== 2698\nw6Ry 2699\nIGRpZXM= 2700\nIGxhYg== 2701\nc2g= 2702\naW9z 2703\nIFByZXM= 2704\nIFVuZA== 2705\nIE9m 2706\nIGZpbmFsbHk= 2707\nIGRvbGw= 2708\nIHZvY8Oq 2709\ncGx5 2710\nIEFn 2711\nIHRha2Vu 2712\nIGdyb3VuZA== 2713\nZm9ydA== 2714\nIGdhdmU= 2715\nIEluc3Q= 2716\nIGxvc3Q= 2717\nIHdvcmtlZA== 2718\nIGxpdGVy 2719\nIGlzc3Vl 2720\nIGluZHVzdA== 2721\nIHJldHVybg== 2722\nIGhhcHBlbmluZw== 2723\nIHdhbnRz 2724\n0LjQsg== 2725\nIHByb2JsZW1z 2726\nIENhcg== 2727\nnbw= 2728\nIEFsc28= 2729\nIHNpemU= 2730\nIG9idmlvdXNseQ== 2731\nIFN1 2732\nIFNj 2733\nIHJlY29tbWVuZA== 2734\nb3VyY2Vz 2735\nYXN0aWM= 2736\nLi4uLg== 2737\nIG1p 2738\nbGllcg== 2739\nIEV2ZW4= 2740\nY2lh 2741\nIGh1cg== 2742\ndmE= 2743\nIG1hc3M= 2744\nIHdvdWxkbg== 2745\ndW50 2746\nY2tz 2747\nIGZlbHQ= 2748\nb3Nw 2749\nbGlnaHQ= 2750\n0L7Qu9GM 2751\nbmll 2752\nIGJvdHRvbQ== 2753\nINCx0Ys= 2754\nb3JlZA== 2755\naXNvbg== 2756\nIGdyYWQ= 2757\nIHVtYQ== 2758\nIHZh 2759\nIOyC 2760\ncmVzc2lvbg== 2761\ndWxhdGlvbg== 2762\nSUQ= 2763\naWRlbmNl 2764\nIGJ1cg== 2765\nIGdvbmU= 2766\nbHU= 2767\n7Ja07A== 2768\nIHJlZHU= 2769\nIGph 2770\n7J2Y 2771\naXRh 2772\nIHNvZnQ= 2773\nIMOnYQ== 2774\naWNv 2775\nZXJhbA== 2776\nw7E= 2777\nYWY= 2778\nIHBvaW50cw== 2779\nZ3U= 2780\nIGTDqQ== 2781\nYXB0 2782\nYXg= 2783\nIEFscmlnaHQ= 2784\nIGNhbWVyYQ== 2785\nIGFjaA== 2786\nINC/0L4= 2787\nIHNldmVy 2788\nNTA= 2789\nIHNpZQ== 2790\nz4E= 2791\nIG1hbA== 2792\nIGNvbXB1dA== 2793\nIG1pZGRsZQ== 2794\nIGNvdWxkbg== 2795\nbWluZw== 2796\nIOyL 2797\nIEhpcw== 2798\nIGdhbWVz 2799\nIGludHJvZHU= 2800\nIGNlbGw= 2801\ncG9y 2802\nIHNsZWVw 2803\nIOuz 2804\naWRpbmc= 2805\nIG91 2806\nIGRlZw== 2807\nIGRyaW5r 2808\nIGVudmlyb25tZW50 2809\nIFVuaXRlZA== 2810\nIHRhbGtlZA== 2811\nIGNob29zZQ== 2812\nIGpvdXI= 2813\nZWdl 2814\nIE1pbg== 2815\nIGludGU= 2816\nIHJhdGhlcg== 2817\nIG9mZmlj 2818\n0LrQsA== 2819\nYWNoaW5n 2820\nIG1lbnRpb25lZA== 2821\nIGZpbGw= 2822\nIHRyYWNr 2823\nIG5pZQ== 2824\nIHV0 2825\nINCy0Ys= 2826\naWJpbGl0eQ== 2827\nIHZhYw== 2828\nIHJhZA== 2829\nIHBhY2s= 2830\nIHNlbmQ= 2831\nIERhcw== 2832\nIEFi 2833\nIGVuZ2luZQ== 2834\nIGNvbXBldA== 2835\nw7Q= 2836\nINCy0YE= 2837\nIGRvb3I= 2838\nIGxvbmdlcg== 2839\nIGxhbmd1YWdl 2840\nIGV4dHJh 2841\ncGxheQ== 2842\nIHdlYnM= 2843\ndW1i 2844\ncm9vbQ== 2845\n55w= 2846\nIGJlZ2lubmluZw== 2847\nIHJlZmVy 2848\nQU0= 2849\nbmVu 2850\naWdoZXI= 2851\nZmFjZQ== 2852\nZXJj 2853\nIGZvcmdldA== 2854\nIGNvbW1lbnQ= 2855\n0LXQug== 2856\n0LvRjw== 2857\ncm9y 2858\nxbxl 2859\nIEdl 2860\nIGRhcms= 2861\nIGFueW9uZQ== 2862\nYW50ZQ== 2863\nZ2Vz 2864\n7Iq1 2865\n0ZE= 2866\nYmVk 2867\namU= 2868\ncnVjdHVyZQ== 2869\nIHByaW0= 2870\naWRh 2871\n6KY= 2872\nIG1peA== 2873\nIHN0YXJ0aW5n 2874\nIOydtOs= 2875\nIHByb3ZpZGU= 2876\nYWN0aW9u 2877\nIG1vdGhlcg== 2878\nIHBlcmlvZA== 2879\nIHN0aWNr 2880\nIFlvdVQ= 2881\nIHRlY2hub2xvZ3k= 2882\n6rk= 2883\nIGJlZA== 2884\nIGdpdmluZw== 2885\nIGV4cGxhaW4= 2886\nemVu 2887\naW1hdGU= 2888\nIHJlcHJlc2VudA== 2889\nbG9hZA== 2890\nIEhvd2V2ZXI= 2891\nIGxpdmVz 2892\ndXRo 2893\naXJpdA== 2894\nb2du 2895\nIGxpaw== 2896\nIHJlc3BvbnM= 2897\nIHByaXY= 2898\nIHRvbQ== 2899\nw6fDo28= 2900\naWFt 2901\nIGV4Y2l0ZWQ= 2902\nIGNhcmQ= 2903\nZ3JvdW5k 2904\nINeU 2905\nIHNlbnM= 2906\nIHRlYWNo 2907\naWRv 2908\naG9k 2909\nIGVwaXM= 2910\nIHdlbGNvbWU= 2911\nIHdhbGw= 2912\n5Lk= 2913\nIGNoYW5jZQ== 2914\naGVu 2915\nINCh 2916\nIMSR 2917\nIHNpbXBseQ== 2918\nINGC0LDQug== 2919\ncmluZw== 2920\namE= 2921\nYm9vaw== 2922\nIHNldmVyYWw= 2923\nc3Rl 2924\nIGNyZWF0ZWQ= 2925\nINC+0YI= 2926\nIHB1c2g= 2927\nPT0= 2928\nIGhpZ2hlcg== 2929\ndWY= 2930\nb3VyY2U= 2931\nb2tl 2932\nIG9ubGluZQ== 2933\nIHJlbGU= 2934\nIHRvbg== 2935\nZW5zaXZl 2936\nIGZhdm9yaXRl 2937\n0YPQtA== 2938\nIGxvb2tlZA== 2939\nIHZvbg== 2940\n4oCU 2941\nIGbDvHI= 2942\nIGJ1dHRvbg== 2943\nIGJpbGw= 2944\nIGNoYW5nZXM= 2945\nISI= 2946\nIHNsb3c= 2947\nYWJsZXM= 2948\nIGRlYXRo 2949\nYW5kcw== 2950\nYXRlZw== 2951\nIHRoZW1zZWx2ZXM= 2952\nIGNvcA== 2953\nIHBlcnNvbmFs 2954\ndWdoaW5n 2955\nIDEx 2956\nZ2Fy 2957\nYWRlcw== 2958\nIG5lZWRlZA== 2959\nIHN0dWR5 2960\nYWdlZA== 2961\n0YHRgtCy 2962\naW5v 2963\nIGRpc2M= 2964\na2k= 2965\nIGFkZHJlc3M= 2966\n16g= 2967\naXR0ZW4= 2968\nZXNvbWU= 2969\nINC2 2970\npOs= 2971\ndXJh 2972\nIG11 2973\nIGNvbnRpbnU= 2974\nZm9y 2975\nIG1hdGNo 2976\nIHN0cmFpZ2h0 2977\nkOs= 2978\nbmVycw== 2979\nIGRvZw== 2980\nIGRlYg== 2981\nIENP 2982\nIG9z 2983\nZ2Vk 2984\nY2FtZQ== 2985\nIGNvcnJlY3Q= 2986\nZXR0ZQ== 2987\nIFNlZQ== 2988\nIGluY2x1ZGluZw== 2989\nIEV1cm8= 2990\nZXN0ZXI= 2991\nIGp1bXA= 2992\nIFdoaWNo 2993\nINC60LDQug== 2994\nc29u 2995\neWE= 2996\nSU5H 2997\nIGVpbmU= 2998\nb3No 2999\nZW5jeQ== 3000\nIG1lZGlh 3001\nIHN1YnNjcmliZQ== 3002\n6YI= 3003\nIHByaW4= 3004\nIGhhYg== 3005\nIFBlcg== 3006\nIFdhcw== 3007\nIHBhZ2U= 3008\naXRvcg== 3009\nIHRvd2FyZHM= 3010\nIHRyaWVk 3011\nZW5nZQ== 3012\nYXJ0bWVudA== 3013\nIHZhcmk= 3014\nIHBhcGVy 3015\nIHBpY3R1cmU= 3016\nIHZlcnNpb24= 3017\nIGJyb3VnaHQ= 3018\nd2FyZQ== 3019\nIFN0YXRlcw== 3020\nIHNpY2g= 3021\nbGVkZ2U= 3022\nIHBlcmNlbnQ= 3023\nIGdvZA== 3024\nZWM= 3025\nIENvbW0= 3026\nIGRlY2lkZWQ= 3027\nIHNlbGVjdA== 3028\n7ZWc 3029\nKS4= 3030\ndXJpdHk= 3031\nIGZ1cnRoZXI= 3032\nIGNvbW1lbnRz 3033\nbGVtZW50 3034\nIGRyZWFt 3035\nIGNlbnRlcg== 3036\nbWk= 3037\nIGNhcw== 3038\nIHdvbWFu 3039\nIHJvYWQ= 3040\nIGZhaWw= 3041\nIGJlY2FtZQ== 3042\nbHVz 3043\naWxpdGllcw== 3044\nIENv 3045\nIG1hbmFnZQ== 3046\nIHJlY29nbg== 3047\nIGFjdGlvbg== 3048\nIGJlbmVm 3049\nIGVhcmxpZXI= 3050\n15w= 3051\nIHNwZWVk 3052\nIG1lbnQ= 3053\nIHNvY2k= 3054\nIHNob290 3055\ndWk= 3056\nIMOk 3057\nIGFwcGx5 3058\ndm8= 3059\neGlt 3060\nIGNhdXNl 3061\nIHN1cnBy 3062\nIGhhYmVu 3063\nREk= 3064\nIGZhdGhlcg== 3065\nIE5leHQ= 3066\nIFlvdVR1YmU= 3067\nIGNvZGU= 3068\nIHJvbGU= 3069\nZ3Jlc3M= 3070\nIGdyZWVu 3071\nZXR0 3072\nIGJ1aWx0 3073\nIGZsb3c= 3074\nIGJhc2U= 3075\nIHRyYWluaW5n 3076\nIHJvdW5k 3077\nIFdpbGw= 3078\nIHBhdGg= 3079\nIFJv 3080\nIGludGVyZXN0ZWQ= 3081\n7Ja0 3082\nIHJlc3BlY3Q= 3083\nIGNoYW5nZWQ= 3084\naXNzaW9u 3085\nIHN0dWRlbnQ= 3086\nb2dyYXBo 3087\nIGFwcHJvYWNo 3088\nIHNob3dz 3089\nIHRhcg== 3090\nIGNyaXQ= 3091\nIGdsbw== 3092\n7Iq164uI64uk 3093\nIGRlYWQ= 3094\nIFByZXNpZGVudA== 3095\nIHRob3Vz 3096\nIGJhbA== 3097\nc3Rlcg== 3098\nZXg= 3099\nIGFic29sdXRlbHk= 3100\nIG1pYw== 3101\nIHByYWN0aWNl 3102\nIHF1YWxpdHk= 3103\nIGxvd2Vy 3104\nb2dsZQ== 3105\nIHNlcGFy 3106\nYmFsbA== 3107\nbWVkaQ== 3108\nIHJldmlldw== 3109\nIEFwcA== 3110\nIG9r 3111\n4oCL 3112\nIGV4cGVyaWVu 3113\nIGNvbmNlcm4= 3114\nZW50aWFsbHk= 3115\nbW9yZQ== 3116\nIEpv 3117\nYXBhbg== 3118\nIEljaA== 3119\naXN0aWM= 3120\nIGZhaXI= 3121\nIHdlYnNpdGU= 3122\naXJlcw== 3123\nIEJ5 3124\nIHRyYXZlbA== 3125\nIHJpc2s= 3126\nIG1pcg== 3127\nIGJvYXJk 3128\nIHNlbg== 3129\nIHBhcmVudHM= 3130\nIFdvdw== 3131\nIGZlZWQ= 3132\nIHNhdmU= 3133\nIHNlcmlvdXM= 3134\nIGluaXQ= 3135\nRUw= 3136\ndW5kcmVk 3137\nQVM= 3138\nIHZhbg== 3139\nb3Jyb3c= 3140\nIHdvcnRo 3141\nIHNlYXJjaA== 3142\nIDE2 3143\nIHBhcnRz 3144\n0YHRgtGM 3145\nIGNvbXBhbg== 3146\nIG1vdmll 3147\nIG1ldGhvZA== 3148\nIGlsbA== 3149\nIHdpc2g= 3150\nZHk= 3151\nIGl0ZW0= 3152\nIG1pbnVz 3153\nYW5nZXI= 3154\nIHZvaWNl 3155\nIHNraW4= 3156\nIGFyZWFz 3157\nIGVpZ2h0 3158\nIG9icw== 3159\nICw= 3160\n0LDQuQ== 3161\nIG9pbA== 3162\nIGN5 3163\nIGJhYnk= 3164\nc3k= 3165\nIGVtcGxveQ== 3166\nIEtl 3167\nIHBsYWNlcw== 3168\nIGZpeA== 3169\nIGVzdMOh 3170\naXZlZA== 3171\nIGxvdHM= 3172\nIHNlYXNvbg== 3173\ndW5r 3174\nYWx0 3175\nIHRhYmxl 3176\nINCi 3177\nw6I= 3178\nIGF0dGVudGlvbg== 3179\nIEhlcg== 3180\nIGFnZQ== 3181\nIHByYQ== 3182\nYmFjaw== 3183\nY2ls 3184\nIG5ldHdvcms= 3185\ncml0 3186\nIGRvYw== 3187\nIGFyZW4= 3188\naWdlbg== 3189\nIOuE 3190\n2K8= 3191\nZW5kZXI= 3192\nIHRvdGFs 3193\nIHByaWNl 3194\nIGNyYXp5 3195\n7Jo= 3196\naXF1 3197\ndGhvdWdo 3198\nWW91 3199\n2Yc= 3200\nz4U= 3201\nIHNhdA== 3202\nIGJp 3203\nIERpZQ== 3204\nIHNoYQ== 3205\nIHRoYW5rcw== 3206\ndWg= 3207\nIHN0YWdl 3208\n0LDQtg== 3209\nIEZs 3210\nIGxlYXY= 3211\nIGJveQ== 3212\nIGFm 3213\nw7Zu 3214\nIEdldA== 3215\nIGFjY2VwdA== 3216\nIGVudGVy 3217\nIHR1cg== 3218\nIHNpxJk= 3219\nIGhvbmVzdA== 3220\n44CM 3221\nIHNhbQ== 3222\nIHJlcGw= 3223\nZ2luZw== 3224\nIGRldmVsb3BtZW50 3225\nIEFjdA== 3226\nb3Jh 3227\n44CN 3228\n5L4= 3229\nIGtub3dz 3230\nIGltYWdl 3231\nIExvcmQ= 3232\n0LjRgtGM 3233\nIHdlZWtz 3234\nIHNleA== 3235\nlOs= 3236\nIGh1bmRyZWQ= 3237\nIHNvdW5kcw== 3238\nIGxlYXJuZWQ= 3239\nIGJ1ZA== 3240\nINGB0YI= 3241\nIGluY3JlZA== 3242\n4pk= 3243\nIG5vcw== 3244\nIGRyb3A= 3245\nIGJlbg== 3246\nINCY 3247\nIHNhZmU= 3248\nYXRh 3249\nIGZ1Y2s= 3250\nc29jaQ== 3251\nIGRhbg== 3252\nIGNyb3Nz 3253\nMTA= 3254\nbW8= 3255\ndmVydA== 3256\nIDE3 3257\nemll 3258\n5ZU= 3259\nIGRvbQ== 3260\nIEJv 3261\nIHNldHRpbmc= 3262\nIGludm9sdmVk 3263\nYXJpbHk= 3264\nIHNpbmQ= 3265\nIHN1cw== 3266\nIHdvcnJ5 3267\nZXRo 3268\n6rmM 3269\nIHN1bg== 3270\nIGhpZXI= 3271\nIGNlcnRhaW5seQ== 3272\nb3Vs 3273\nb3J0cw== 3274\nIEVy 3275\nIFVt 3276\nIGNhdXM= 3277\nIG5hdHVyYWw= 3278\nIMO8 3279\nIGNyeQ== 3280\nIFNlYw== 3281\nIHNvbQ== 3282\n5rI= 3283\nIGVkdWNhdGlvbg== 3284\n0LDQtdGC 3285\nIG11bHRpcA== 3286\nIGFsb25l 3287\nIGV5ZQ== 3288\nIHJhdGU= 3289\nIEV1cm9wZQ== 3290\n6L8= 3291\nbW9u 3292\nIGZpdA== 3293\naXppbmc= 3294\ncHBlZA== 3295\nIHByZXNzdXJl 3296\ndGhl 3297\n0LjRgQ== 3298\naXRlcw== 3299\nIEFm 3300\ncmVjaQ== 3301\nYXR0bGU= 3302\nIHNlcnZpY2Vz 3303\nIEdvb2dsZQ== 3304\n6YE= 3305\nIGNhc2Vz 3306\nIGRyaXZl 3307\nIGNoYWxsZW5n 3308\ndXo= 3309\nIE1v 3310\n7Jy86w== 3311\ndmFs 3312\nIGZvbA== 3313\nIOyi 3314\nZmZpYw== 3315\nIHJh 3316\nIHNpbg== 3317\nIGJsdWU= 3318\nIGFmZmVjdA== 3319\nIG1pcw== 3320\nIHNob3Q= 3321\nINC+0LE= 3322\nYXNpbmc= 3323\nIHNpZ25pZmlj 3324\nIENoZQ== 3325\nIOqz 3326\nIHBvc2l0aXZl 3327\n7KM= 3328\nIHdpZQ== 3329\nIDQw 3330\nb3JkaW5n 3331\nIEZyb20= 3332\n6rU= 3333\nIGJyYW5k 3334\nIHRydXN0 3335\nIHBsZQ== 3336\nIGNvbW11bmlj 3337\nIHdlaWdodA== 3338\nIGFza2luZw== 3339\nIHRheA== 3340\nIEphcGFu 3341\nIO2VmA== 3342\nb3Bz 3343\nz4I= 3344\nIHB1dHRpbmc= 3345\nIHJvbGw= 3346\nIEFtZXJpY2E= 3347\ncmVn 3348\nntc= 3349\nYXR1cmVz 3350\nZW5zaW9u 3351\nIFNvbWV0 3352\nIG9yaWdpbmFs 3353\ncGluZw== 3354\nIMWf 3355\nIHByb2R1Y3Rz 3356\nIGNvbnRhY3Q= 3357\nb2x1dGlvbg== 3358\nIGdvYWw= 3359\nIHBvdw== 3360\nIHBlcmZvcm1hbmNl 3361\nIGJsb29k 3362\nYXRvcnM= 3363\nIE1pY2g= 3364\nIHRlbXBlcg== 3365\nIERhbg== 3366\nIHN1Z2c= 3367\n0YLQuA== 3368\nIGltbQ== 3369\nIG9mZmljZQ== 3370\nIGFycmk= 3371\nIGNvbWZvcnQ= 3372\nINCU 3373\nIHN1Z2dlc3Q= 3374\nIHBsYXQ= 3375\ngpg= 3376\nMTk= 3377\nIG9t 3378\nIHNldmVu 3379\nIENlbnQ= 3380\naWxsZQ== 3381\nIGNvbmNlcHQ= 3382\nIGJhZw== 3383\nw7xu 3384\naXZlbHk= 3385\nIGRpdg== 3386\nbW9z 3387\n5ok= 3388\nIGZlZWxz 3389\nIGly 3390\nYWtlcw== 3391\nbGV5 3392\nIHBhcnRpY2lw 3393\nINCa 3394\nZmw= 3395\nanVzdA== 3396\nIHNpbA== 3397\nIFBh 3398\nQUw= 3399\nIGdvdHRh 3400\nIGZhbg== 3401\nIGNoYWxsZW5nZQ== 3402\nIGNvbXBhbmllcw== 3403\nIFBlb3BsZQ== 3404\nPC8= 3405\n0L7Qtw== 3406\nIHBlbg== 3407\naXNpbmc= 3408\nIGF1cw== 3409\nZW1pYw== 3410\nYW1lbnRl 3411\nIG1lZXRpbmc= 3412\nIHZpc2l0 3413\nIHN1cHBvc2Vk 3414\nIE9uY2U= 3415\n0LTQsA== 3416\nb3JsZA== 3417\nMzA= 3418\nVVM= 3419\nIHZpb2w= 3420\nIG5vdGljZQ== 3421\nINCQ 3422\naGFu 3423\ncGVk 3424\n7Jg= 3425\naGg= 3426\nIHRyb3U= 3427\nIG1pbnV0ZQ== 3428\nIFBhcg== 3429\ncmF5 3430\nIHRpdA== 3431\nIHVwZA== 3432\nIGJsb2Nr 3433\nIGR1ZQ== 3434\nYXVy 3435\nIGZvcmNl 3436\nIGNvdW4= 3437\nIOKAlA== 3438\nIHR5cGVz 3439\n66c= 3440\nIGxhdGU= 3441\nIGltcHJvdmU= 3442\nIOyI 3443\nIGF2ZQ== 3444\ndWxlcw== 3445\nY2w= 3446\nYW1lZA== 3447\nIGF3ZXNvbWU= 3448\nIE9r 3449\nIHZvdA== 3450\nIG1hY2hpbmU= 3451\nIGZvbGxvd2luZw== 3452\nIG1lYXN1cmU= 3453\nYWNpw7Nu 3454\ndWVs 3455\nY2hhbg== 3456\nIGFiaWxpdHk= 3457\nIHRvdXQ= 3458\nIGlkZWFz 3459\nIGluY3JlYXNl 3460\nIGVucw== 3461\nINGF 3462\nIOuq 3463\nIGplc3Q= 3464\nINCc 3465\nIHRydXRo 3466\naHk= 3467\nIHNwZW5k 3468\nIHNjaWVuY2U= 3469\nZXRl 3470\nIDE0 3471\nIGVwaXNvZGU= 3472\nIGFsZw== 3473\nZW5kZWQ= 3474\nYXJp 3475\nbGxh 3476\nIGZpc2g= 3477\nIHRocm93 3478\nbWl0 3479\n5bk= 3480\nIGNpcmM= 3481\nIENhbA== 3482\nIHRvdXI= 3483\nIGRpcmVjdGlvbg== 3484\nIG5vY2g= 3485\n0LXQsg== 3486\nw6lu 3487\nIGNvdW50cmllcw== 3488\nIGluZHVzdHJ5 3489\naW55 3490\naWNsZQ== 3491\nIGZlZXQ= 3492\nSXQ= 3493\nIGxlYWRlcnM= 3494\nZXR6dA== 3495\nIHN0YWZm 3496\n55Q= 3497\nIHB1cnA= 3498\naXRv 3499\nPyE= 3500\nIEph 3501\nIHN0b3Jl 3502\nZXRpYw== 3503\nIENoaW5h 3504\nIOuQ 3505\nIFVuaXZlcnNpdHk= 3506\nICM= 3507\nIGRlY2lzaW9u 3508\nIGFjaGll 3509\nIGFjdHVhbA== 3510\ndWx5 3511\nIHNlY3Rpb24= 3512\nIHJlc3VsdHM= 3513\nIHN0YXI= 3514\nIG1pc3Q= 3515\naWJseQ== 3516\nIGRhZA== 3517\nIG51bWJlcnM= 3518\nb21i 3519\n6Ko= 3520\nIFNwZQ== 3521\nIG1lcg== 3522\nIDI1 3523\nIGF1dG9t 3524\nIGNvbGQ= 3525\n2Kg= 3526\nhJw= 3527\nYWdlcg== 3528\nIFRW 3529\nIFNpZQ== 3530\nIEhhdmU= 3531\nIMW8ZQ== 3532\ndWdn 3533\nYWluZWQ= 3534\nIHVwb24= 3535\nIGxvZw== 3536\nIGNvbXBsZXRl 3537\nIGJyYWlu 3538\nYWdpbmc= 3539\nIE11cw== 3540\nb3Zlcg== 3541\nIGVhc2llcg== 3542\nIGludGVncg== 3543\nIG3DoXM= 3544\nIHR1cm5lZA== 3545\nIHN0cmk= 3546\naXZhbA== 3547\nIGhlYXY= 3548\nIFRI 3549\nIHdyaXRpbmc= 3550\n0YDQsA== 3551\nIGNsYQ== 3552\nZGluZw== 3553\nIHRlbGxpbmc= 3554\n0LjQtA== 3555\naWNhdGVk 3556\nYWNodA== 3557\naGFwcw== 3558\nIFN0ZQ== 3559\nIHJlc291cmNlcw== 3560\nIGRhbm4= 3561\nIHBhcnR5 3562\nIM+E 3563\nIHNhZg== 3564\naXNlcw== 3565\ndHJl 3566\nb2ludA== 3567\nIGtub3dsZWRnZQ== 3568\nIGFueW1vcmU= 3569\nIGZseQ== 3570\nIG1haW50 3571\n0LjQug== 3572\n5ZE= 3573\nIHNlbGw= 3574\nbGF1Z2hz 3575\nIFlvcms= 3576\nIGJpZW4= 3577\nIG9k 3578\nIGVhc2lseQ== 3579\nIHJhbmdl 3580\nIG9wdGlvbg== 3581\n2Lk= 3582\nIGFwcHJlY2k= 3583\nb2Ny 3584\nIGRldGVybQ== 3585\n0YQ= 3586\nIG1lYW5pbmc= 3587\nIHNpdGU= 3588\nIGRpc2Nv 3589\ndmVyYWdl 3590\nIGxvc2U= 3591\nIGluc3RhbGw= 3592\nIGVtb3Q= 3593\nYW50bHk= 3594\nw6R0 3595\nIHRhbWI= 3596\nIFdhcg== 3597\nIEhv 3598\nIEdlbg== 3599\nZW15 3600\n0LXQtw== 3601\nIFBvbA== 3602\nIG1lc3NhZ2U= 3603\nIG5vdGU= 3604\njIA= 3605\nIGhldA== 3606\nIGltbWVkaQ== 3607\nIGF2bw== 3608\nIGJvb2tz 3609\nIGJlY29tZXM= 3610\ncmVzaA== 3611\nw6hz 3612\nYXNvbnM= 3613\nIGhpbXNlbGY= 3614\ndXRz 3615\nIGp1 3616\nIGF3YXJl 3617\nIHJlcXVpcmU= 3618\nIHN5c3RlbXM= 3619\nIEhhcg== 3620\nIGFtb25n 3621\nIGhvbQ== 3622\nIGJyZWF0 3623\nIHdlaXJk 3624\nIOu2 3625\nzrs= 3626\n2Kk= 3627\naWZm 3628\nb3Jpbmc= 3629\nIHBsYXRmb3Jt 3630\nIFRha2U= 3631\nIGhlbHBz 3632\ndXRpb25z 3633\nIGZvcmc= 3634\nIGx1Y2s= 3635\nIEVuZ2xpc2g= 3636\nIHdlYg== 3637\nIG5lZ2F0aXZl 3638\nIHR1dA== 3639\nIGFib3Zl 3640\nbmd0aA== 3641\nIOqxsA== 3642\nIHN0b3JpZXM= 3643\nIGxvYWQ= 3644\nIGJhY2tncm91bmQ= 3645\nIHN3aXRjaA== 3646\nZ2E= 3647\nIHByaW5jaQ== 3648\nIGZpbmFu 3649\nIHZhcmlvdXM= 3650\nIGzDoA== 3651\nIGtpbmRz 3652\nYWluaW5n 3653\nIG5hdHVyZQ== 3654\nINCe 3655\nY3o= 3656\nIHByYXk= 3657\nIGdhcg== 3658\naXJt 3659\nICY= 3660\nIOyD 3661\nbnM= 3662\nIFJlcA== 3663\nIEZl 3664\nIHJldg== 3665\ncmFuZA== 3666\nIGxpa2VseQ== 3667\nIHVuZGVyc3RhbmRpbmc= 3668\nxLFy 3669\nIGZhbA== 3670\nIDEz 3671\n0YbQuA== 3672\nIHN1ZA== 3673\nIGJyb3RoZXI= 3674\nIHBsYW50 3675\nIHRocm91Z2hvdXQ= 3676\nd2lzZQ== 3677\ncHJl 3678\nIGN1bHR1cmU= 3679\nINmF 3680\nIHdvbmRlcmZ1bA== 3681\nIGFo 3682\ncHBlcg== 3683\nIHNvbGQ= 3684\nIHN0YXJ0cw== 3685\nIHdyaXR0ZW4= 3686\nzq8= 3687\nbmk= 3688\nINeU1w== 3689\nIERhdg== 3690\nIHVsdA== 3691\nIGFybQ== 3692\nIHJvY2s= 3693\nIHdlYXI= 3694\n642w 3695\nYW5v 3696\ncmFn 3697\nIHNxdWFyZQ== 3698\n0LDQvdC4 3699\nY2FzdA== 3700\nbGVicg== 3701\nIGxpdGVyYWxseQ== 3702\nIHBsYXllZA== 3703\nIGhlYXQ= 3704\nb25zZQ== 3705\ncmljdA== 3706\nIGluc3A= 3707\naWRz 3708\nIHBvcHVsYXI= 3709\n64+E 3710\nIGNhdGNo 3711\nIG1vdW50 3712\nIGp1ZA== 3713\nV2hhdA== 3714\n0LXQsQ== 3715\nUkE= 3716\nYXVk 3717\n0LrQvg== 3718\nIHN1cmZhY2U= 3719\nIGNvbnY= 3720\nIHBpZWNlcw== 3721\nT2g= 3722\n5oA= 3723\nIHN0eWxl 3724\ncHBpbmc= 3725\nIHJlYWRpbmc= 3726\nIGNvbnZlcnNhdGlvbg== 3727\n0L7Qvw== 3728\nIEFnYWlu 3729\nIGJhbms= 3730\ndGltZQ== 3731\n0YPRgg== 3732\nZXJ2ZQ== 3733\nIEdyZWF0 3734\nIGNhcHQ= 3735\n0LDQsQ== 3736\nYXlz 3737\nIEZpbg== 3738\naWZpY2F0aW9u 3739\nIMOkcg== 3740\n0LDRjg== 3741\nIGVnZw== 3742\nIFdlbA== 3743\nIHRhcmdldA== 3744\ndWxh 3745\nY2hlcw== 3746\nYW5p 3747\nT08= 3748\naWNpb3Vz 3749\nbm93 3750\nz4M= 3751\nYm9hcmQ= 3752\nIGdlbnRl 3753\nIGRybw== 3754\nIEV0 3755\nIGRpbg== 3756\nIGNvcw== 3757\nIGF1dGhvcg== 3758\n2LM= 3759\nIG9jaA== 3760\nIGVtYWls 3761\nIHNwaXJpdA== 3762\nIHNpdHRpbmc= 3763\nbWFz 3764\nIHN0cmVuZ3Ro 3765\nIGJpZ2dlcg== 3766\nIFdhaXQ= 3767\nIG1hdA== 3768\nIHBvbGljZQ== 3769\ncmVzc2Vk 3770\nIHdhaXRpbmc= 3771\naXNoaW5n 3772\nIGRvbGxhcnM= 3773\naG9vZA== 3774\nc3M= 3775\nIGltYWdpbmU= 3776\naW5p 3777\nIG1lcw== 3778\nIGRpc2U= 3779\naWRnZQ== 3780\nYWJvcg== 3781\nIHBldA== 3782\nIGhvcA== 3783\nIEtpbmc= 3784\nIGNvbXB1dGVy 3785\nIGdvbGQ= 3786\nIG51 3787\nIGZpbmc= 3788\nKSw= 3789\nIHNlY3VyaXR5 3790\ncnVjdGlvbg== 3791\nIHNvbHV0aW9u 3792\nZXh0 3793\nIHBhdHRlcg== 3794\naWNrZW4= 3795\ndXJlZA== 3796\nIHN0YW5kYXJk 3797\n7Iuc 3798\nIGRvdWJsZQ== 3799\nzrc= 3800\nIHdpZmU= 3801\naXNh 3802\nIGRpcmVjdGx5 3803\nYWNlZA== 3804\nIGJ1bmNo 3805\nIMK/ 3806\n0LDQu9GM 3807\nIHJlZ2FyZA== 3808\nIHN3ZWV0 3809\nIHVuaXF1ZQ== 3810\nIOKZqw== 3811\nIHRyYWlu 3812\nIEdlcm0= 3813\nzqw= 3814\nUkU= 3815\nIGJlaGF2 3816\nIHByZWQ= 3817\n7IM= 3818\nc2V0 3819\nIGRlc2NyaXB0aW9u 3820\nw6ll 3821\nIGNhdA== 3822\n5ZM= 3823\nIGNvbGxlZ2U= 3824\n7Js= 3825\nIGFwcGxpY2F0aW9u 3826\nIFNlbg== 3827\nYXNr 3828\nIGNyZWQ= 3829\ndWJsaWM= 3830\nIG11bHRpcGxl 3831\nIG5p 3832\nIHByZXNpZGVudA== 3833\nIGFkZGVk 3834\nIHJvYg== 3835\nIGFxdWk= 3836\nIGhvc3A= 3837\nIHRvb2xz 3838\nIGd1bg== 3839\nIGJhc2lj 3840\nIGxpbmVz 3841\nIHN0cnVjdHVyZQ== 3842\nIFJ1c3M= 3843\nIHRvdGFsbHk= 3844\nIGJpZ2dlc3Q= 3845\nIGVlbg== 3846\nIGFyZw== 3847\nINec 3848\nIHBhcms= 3849\nIERlcw== 3850\nIGNlbGVicg== 3851\nIGZhaXQ= 3852\n0LXQvdGM 3853\nIHN1ZmY= 3854\nIHJlZ3VsYXI= 3855\nqOs= 3856\nIG1pbmU= 3857\nIEtvcmU= 3858\nIHByZXZpb3Vz 3859\nIHBp 3860\nIHNlZw== 3861\nIHBvbGljeQ== 3862\nINC60L4= 3863\nIFRydW1w 3864\nIHZhY2M= 3865\nw7N3 3866\nIFN5 3867\n0LjRhw== 3868\naXR0ZXI= 3869\nIHBvbGl0aWNhbA== 3870\ncmFz 3871\nIGFscw== 3872\n0LXQu9GM 3873\nIHNoYXBl 3874\nYW56 3875\nIG9udG8= 3876\nIGFyY2g= 3877\nIGFtYg== 3878\nYWdyYW0= 3879\nIFNt 3880\nY3Rpb25z 3881\nIGpvaW4= 3882\nYm9y 3883\n5Zs= 3884\nIGZyYW1l 3885\noIc= 3886\nIGNob2ljZQ== 3887\n4K+B 3888\n0YPRjg== 3889\nIENvcg== 3890\nIFN3 3891\nSVQ= 3892\nIHRlbmQ= 3893\nIEVhcg== 3894\nIHRvcg== 3895\nIGV2ZW50cw== 3896\nIGNsYWlt 3897\nIERh 3898\nIE1hcms= 3899\nIGdyb3Vwcw== 3900\nIGVhdGluZw== 3901\nIFdvcmxk 3902\nIHJlY2VudGx5 3903\nIHRhc3Rl 3904\nIHN1cnY= 3905\n4KQ= 3906\nIHNraWxscw== 3907\nINC40Lc= 3908\naXR0ZWQ= 3909\nIHNob3A= 3910\n7J207A== 3911\nIGVzdGFi 3912\nIOuCmA== 3913\nIHNlY29uZHM= 3914\nIFRob3Nl 3915\nIEVudA== 3916\nIOyE 3917\nZXJzb24= 3918\nIHRvd24= 3919\nIGNhbmQ= 3920\nIG9wdGlvbnM= 3921\nIGluZw== 3922\nVklE 3923\nIGVuY291cg== 3924\nIHLDqQ== 3925\n4pmq 3926\nIGVudHJl 3927\nIG1vdmVtZW50 3928\nIEJlbg== 3929\nIGJpcnRo 3930\nIHdoZQ== 3931\nIGhhbmc= 3932\nIEVt 3933\naWdl 3934\ncm9sbA== 3935\nIHVuZg== 3936\n7II= 3937\nIHJpZA== 3938\nIHNwcmVhZA== 3939\nIGhvc3Q= 3940\nYWxk 3941\nIEVk 3942\nIGNvbnN1bQ== 3943\nVU4= 3944\nIG9waW4= 3945\naXRhcg== 3946\nIE1lZA== 3947\nIHN1YmplY3Q= 3948\nIHBhbA== 3949\nIGNhcnJ5 3950\nIGFncmVl 3951\nIFdoaWxl 3952\nIGNhcmVlcg== 3953\nIHNjaWVudA== 3954\nIHN1ZGRlbg== 3955\nIGZpbGU= 3956\nemk= 3957\nIGV4Y2VwdA== 3958\n6bo= 3959\nIHBvdGVudGlhbA== 3960\nIEFub3RoZXI= 3961\nIGNvbXBsZXg= 3962\nIFNpbQ== 3963\nZW5kbw== 3964\nIHJhaXM= 3965\nIHBoeXNpY2Fs 3966\nIGRhdGU= 3967\nYWtlcg== 3968\nIENvbA== 3969\nIHBvd2VyZnVs 3970\nIG1lbWJlcg== 3971\ncmFw 3972\nIHNwb3Q= 3973\nIHNvdXJjZQ== 3974\nIGZlbQ== 3975\nw6lt 3976\nIGVtcA== 3977\namk= 3978\naWV0eQ== 3979\nIGluZmx1 3980\nIGRyeQ== 3981\nIGxvY2s= 3982\nIHplcm8= 3983\nIFVo 3984\nIHJvdXQ= 3985\nIHBvcnF1ZQ== 3986\nIDI0 3987\nIHRhbA== 3988\nIGZvbGtz 3989\nIGxhdW5jaA== 3990\nIGNvbXBvbg== 3991\nIFdlbGNvbWU= 3992\nIGthbm4= 3993\nw6Ru 3994\nINGN0YI= 3995\nZWVz 3996\nINmI 3997\nIGFueXdheQ== 3998\nIGF1ZGllbmNl 3999\nIHNsaWdodA== 4000\nb25h 4001\nIHVy 4002\nIHJlbGln 4003\nIGV4dHJlbQ== 4004\nxLF6 4005\nIE1h 4006\nzrw= 4007\nIMO2 4008\nIGFsbG93cw== 4009\nIGZhdA== 4010\nIEZhY2U= 4011\nIG5hdGlvbmFs 4012\nIGludGVydmlldw== 4013\nIE1j 4014\nw6l0 4015\nIGN1dGU= 4016\nZWxh 4017\nIHNlY3JldA== 4018\nIFdlc3Q= 4019\nIERlcA== 4020\nIGV4ZXJj 4021\nIGhpc3Rvcg== 4022\nIHByaW9y 4023\nIDYw 4024\nYXZh 4025\nYWNoZXI= 4026\neW9uZA== 4027\nIEhh 4028\nIGVzdGU= 4029\naW5hcnk= 4030\nIE5vcnRo 4031\nb25zdA== 4032\nIHNtYXJ0 4033\nYW1z 4034\n0LDQu9C4 4035\nIGRhcg== 4036\nZXJlZA== 4037\nIGZ1bm55 4038\nIE9i 4039\nIEJsYWNr 4040\nIHJlbGF0ZWQ= 4041\nIEJ1 4042\nIHNvbWV3aGVyZQ== 4043\nIFJlbQ== 4044\nbmVz 4045\nbWVudGU= 4046\nIFJlYWxseQ== 4047\nIGNyZWF0aW5n 4048\nIGZhbWls 4049\nIHNvY2lldHk= 4050\nIGdlbA== 4051\nIHRyYW5zZm9ybQ== 4052\nxIM= 4053\nIGluY2x1ZGU= 4054\nIGhvbA== 4055\nbGlrZQ== 4056\na28= 4057\nYWlycw== 4058\nINC/0L7QtA== 4059\nIHBlcnNwZWN0 4060\nIGJlcw== 4061\nIHBhcnRpY3VsYXJseQ== 4062\nIHNob3dpbmc= 4063\nIFBhcnQ= 4064\nIHF1YWw= 4065\nbG9jaw== 4066\nIHJlYWxpdHk= 4067\naG9sZA== 4068\naWN0aW9u 4069\nb29u 4070\nIHZpcg== 4071\naXRhcnk= 4072\nIGRydWc= 4073\nIGZlYXR1cmU= 4074\nIHJlYXNvbnM= 4075\nINep 4076\nIHdyb3Rl 4077\nIGZhbnQ= 4078\nIGJhbmQ= 4079\n2YM= 4080\nZW5h 4081\na2V5 4082\nIGVhcnRo 4083\nZG9t 4084\nIGZlYXR1cmVz 4085\nIGZsb29y 4086\nIHNwZWFraW5n 4087\nIHRpcA== 4088\nIEF1c3Q= 4089\nIHN0b2Nr 4090\nIGNodXJjaA== 4091\nIHJhYw== 4092\n7Jy866Gc 4093\n4LiZ 4094\na3k= 4095\nIHJlc3BvbnNl 4096\n24w= 4097\ndWxhdGlvbnM= 4098\nIHNsaWRl 4099\nIGdyYWR1 4100\nY2lvdXM= 4101\nIG1lYW50 4102\nID09 4103\nINeQ1w== 4104\n44U= 4105\nIGtpbmRh 4106\nIHNjZW5l 4107\nIG11aXQ= 4108\nIOqwgA== 4109\ncmFzdA== 4110\ncmVzdA== 4111\nIHBsYXllcnM= 4112\nd2E= 4113\nIGJyb2Fk 4114\nIHRvbW9ycm93 4115\nb2NvbA== 4116\nINGB0LI= 4117\nIEJhcg== 4118\nxLFr 4119\nIHNlYQ== 4120\nIHJlbW92ZQ== 4121\nIHJlbWluZA== 4122\n0L7QvNGD 4123\nIFNpbmNl 4124\nIGF2ZWM= 4125\nY2VsbA== 4126\n0LjRhQ== 4127\nIGRvY3VtZW50 4128\nIOq3uOuf 4129\nIG5laWdo 4130\nYmVhdA== 4131\nIHDDpQ== 4132\nIGFzcGVjdA== 4133\nIGRlZA== 4134\nbGlzaGVk 4135\naWxz 4136\nIG91cnNlbHZlcw== 4137\ndWNl 4138\nIGhleQ== 4139\nINC/0YDQvg== 4140\nZW50eQ== 4141\nIGFzc29jaQ== 4142\nYWRvcw== 4143\ndW1iZXI= 4144\nIF0= 4145\nbm92 4146\nIOyZ 4147\n0YPRhw== 4148\nIGNvbmRpdGlvbg== 4149\n64qU642w 4150\nIHZhbHVlcw== 4151\nIHNjZW4= 4152\nbWluaXN0 4153\nIGNhc3Q= 4154\nIGdyb3dpbmc= 4155\nIHVzZXI= 4156\nIHJlc3BvbmQ= 4157\nbGlt 4158\nw6ly 4159\neW0= 4160\nb3Nlcw== 4161\nc3ljaA== 4162\nINGA0LDQtw== 4163\nIGFwcGVhcg== 4164\nIHByb2dyZXNz 4165\nZW5ndGg= 4166\nIGphaw== 4167\nIERpcw== 4168\nIHBhdGllbnRz 4169\nIFNlcg== 4170\nIGdhcw== 4171\nw6hyZQ== 4172\n7Ja07JqU 4173\nIHJlY2k= 4174\n7J24 4175\nIHNjYQ== 4176\nZXBlbmQ= 4177\n0YHQug== 4178\n0LDQvw== 4179\nIGJhdHRlcg== 4180\nIHZlaA== 4181\n8J8= 4182\nIGFjY29t 4183\nIGJlYXQ= 4184\nIHBhaW50 4185\nIGNvbnRyaWI= 4186\nIHNhZA== 4187\nxrA= 4188\nYWxlcw== 4189\nIHRyZWU= 4190\nYmE= 4191\nIGJvcm4= 4192\naWNlZA== 4193\n4K6V 4194\nYmFuZA== 4195\nIG1lY2hhbg== 4196\nIERldA== 4197\nIGNhcGl0YWw= 4198\nIGRlbGl2ZXI= 4199\nIGZlYXI= 4200\nnpg= 4201\nIFNvdXRo 4202\nIGJvdWdodA== 4203\nIHN0cmVzcw== 4204\nIHZvcg== 4205\nPz8= 4206\naWg= 4207\n7JW8 4208\nIGVyYQ== 4209\n7J206w== 4210\n0LDRjw== 4211\naXNpb25z 4212\naXZpdHk= 4213\nIGhlbHBlZA== 4214\nIGFzc2lzdA== 4215\nIHBsYXllcg== 4216\ncmFu 4217\nIGltbWVkaWF0ZWx5 4218\nIG1vdmVk 4219\nY2ll 4220\n6rE= 4221\nIGFubm91bg== 4222\n5b8= 4223\n7J6Q 4224\nIHByb2R1Y3Rpb24= 4225\nIHN1bW1lcg== 4226\nIHR1bg== 4227\nIHByb2dyYW1z 4228\nR0g= 4229\nYWxpbmc= 4230\naXJh 4231\nZWxlc3M= 4232\nLik= 4233\nIGF2ZXJhZ2U= 4234\nIGdsYXNz 4235\nb21hbg== 4236\naWZpY2FsbHk= 4237\nIOuLpA== 4238\nIENvbmc= 4239\nIFZlcg== 4240\nIHRyaWNr 4241\nIGJlZ2Fu 4242\nIHZpbGw= 4243\n6rGw 4244\naG93 4245\n5q0= 4246\nIHRpbGw= 4247\nIDkw 4248\nYmVydA== 4249\nIOq4 4250\nIHRlbXBlcmF0dXJl 4251\nw7I= 4252\n4LmI 4253\nIGdyYXBo 4254\nIOq3uA== 4255\nIHJvdA== 4256\nIG1vYg== 4257\nQVk= 4258\nYWVs 4259\nIHJlcGU= 4260\nIGRldmljZQ== 4261\nIDE5OQ== 4262\nIHRlbGU= 4263\nIGtlcHQ= 4264\ncGE= 4265\n5pY= 4266\ndmVyc2U= 4267\nIHN0cmVhbQ== 4268\n0LXRhw== 4269\nZXNzaW9u 4270\nIHN0cnVnZw== 4271\neno= 4272\nIGRlZ3JlZQ== 4273\nIGhlbHBpbmc= 4274\nIHNtZWxs 4275\nIHBlcmhhcHM= 4276\ncHJv 4277\nIGNvbnRleHQ= 4278\nIGlr 4279\nINC/0LXRgA== 4280\nIGNhbGN1bA== 4281\nYmluZw== 4282\nIHJlYWxpemU= 4283\nbGFt 4284\nIENoYXI= 4285\neXQ= 4286\nIOydtOw= 4287\nIGRhbmdlcg== 4288\nIElt 4289\nYWE= 4290\nIGxvdmVk 4291\nIHB1cnBvc2U= 4292\nIGZpbmlzaGVk 4293\nIHBlYWNl 4294\nIG90 4295\nIGdsb2JhbA== 4296\nz4A= 4297\nIGFiZXI= 4298\nlog= 4299\nIGNoYXJhY3RlcnM= 4300\nIG51cg== 4301\nIGRhbWFnZQ== 4302\nIGVtZXI= 4303\nIHByZWM= 4304\nIFdpcg== 4305\nIGluc3RpdA== 4306\nkdc= 4307\nIGFsbG93ZWQ= 4308\nYm9u 4309\nIHRvZA== 4310\n0LXQs9C+ 4311\nIGpldHp0 4312\nIG1lZGlj 4313\nIHNtYWxsZXI= 4314\nY2VlZA== 4315\nIGxldmVscw== 4316\nIGludGVsbA== 4317\nV2U= 4318\nIHNlbQ== 4319\nIGN1cnJlbnRseQ== 4320\nIG1vZGVybg== 4321\nIGNvbnRyYWN0 4322\nIGRldGFpbHM= 4323\nb3J0dW5hdGVseQ== 4324\nT1M= 4325\nIHN0YXRlcw== 4326\nIGFkanVzdA== 4327\nYW50YWdl 4328\nZXo= 4329\nIFZlcnk= 4330\nIHNjYWxl 4331\nIHJlbGVhc2U= 4332\nIGZheg== 4333\nIGlj 4334\naXR1ZGU= 4335\nQUM= 4336\nIFBhdA== 4337\naWRlbg== 4338\nrZA= 4339\nIHByZWZlcg== 4340\nb2xvZ2ljYWw= 4341\nIEZhY2Vib29r 4342\nIOqwmQ== 4343\nIC4u 4344\nIE1ha2U= 4345\nINC60L7RgtC+0YA= 4346\nIERhdmlk 4347\nIEFmcmlj 4348\nIG1vZGU= 4349\nIENpdHk= 4350\nIHNoYWxs 4351\nINGE 4352\naW1pbg== 4353\nINC30LA= 4354\ncm9t 4355\ndWE= 4356\nIGJleW9uZA== 4357\nIGRpc3RyaWI= 4358\n0LrRgw== 4359\nIERvZXM= 4360\nIHZpY3Q= 4361\ncmF0ZQ== 4362\nIHZhaQ== 4363\nIHN1Y2Nlc3NmdWw= 4364\nIGhvdXM= 4365\nYWhh 4366\nZXN0cw== 4367\nIEVzdA== 4368\nIGRpc2NvdmVy 4369\nIHRoZXJlZm9yZQ== 4370\nY2hh 4371\nIGN1cA== 4372\nIHBvcHVsYXRpb24= 4373\nIEls 4374\nc2M= 4375\nIHNwZW50 4376\ncmVs 4377\nIHVzZWZ1bA== 4378\nIHRhYg== 4379\n5p0= 4380\nIMU= 4381\nIOygnA== 4382\nIGNvbnNl 4383\nIHF1YW50 4384\nYXlh 4385\nIGJvbg== 4386\nIENoaW4= 4387\nIOqygw== 4388\nb3VuZHM= 4389\n0LXRiA== 4390\nZWxsZQ== 4391\nIGljZQ== 4392\nMjE= 4393\nIGtpY2s= 4394\nIHN0ZXBz 4395\nIHRvbmlnaHQ= 4396\n0L3Ri9C5 4397\ncmVuY2g= 4398\nLic= 4399\nIGdyYWI= 4400\nIGltcGxlbWVudA== 4401\nIOyImA== 4402\nIG1pc3Npb24= 4403\nIGNsZWFybHk= 4404\nIGFwcHJlY2lhdGU= 4405\n6IA= 4406\nIGZyZXNo 4407\nYXJt 4408\nIFR3bw== 4409\nIGV4ZWM= 4410\nIHByb2plY3Rz 4411\nIGNvbW11bml0aWVz 4412\ncmlibGU= 4413\nIHJlZ2lvbg== 4414\nIGZyZXF1 4415\ncm95 4416\nIGhvd2V2ZXI= 4417\nIHBhcnRuZXJz 4418\nYW5j 4419\nIG1pbmlt 4420\nIGxhdA== 4421\nIGZhbWlsaWVz 4422\nIGV2aWRlbmNl 4423\nIHB1bg== 4424\ncmFmdA== 4425\nIGxvc3M= 4426\nIG1hcA== 4427\nIGFueWJvZHk= 4428\nIGNoYW5naW5n 4429\nIHJ1bGVz 4430\nIG9yZ2FuaXphdGlvbg== 4431\nIGVzc2VudGlhbGx5 4432\nIFJlZA== 4433\nIGVsZW1lbnQ= 4434\n5pc= 4435\nIHZpcnQ= 4436\ncmF0 4437\nIHByaW50 4438\nYW5kZXI= 4439\nYXJlbg== 4440\nZW1vcw== 4441\nzr/PhQ== 4442\nIGNvbmRpdGlvbnM= 4443\nYWJl 4444\nIGRhbmNl 4445\n0LjRgA== 4446\nIGRvcw== 4447\n0L7Rhw== 4448\nIFF1ZQ== 4449\nIHdhbGtpbmc= 4450\nIHRybw== 4451\nIGlk 4452\nIGFkZGl0aW9uYWw= 4453\nIGZ1bGx5 4454\nIGZhbnM= 4455\nIGFkZGl0aW9u 4456\nIGxpa2Vk 4457\nIMO8YmVy 4458\nIGJvdw== 4459\nZGk= 4460\nIG1hc3Rlcg== 4461\nb2Zm 4462\nKTo= 4463\nbWJlcg== 4464\nIOus 4465\n5a8= 4466\nbGF1c2U= 4467\nIG9kZXI= 4468\nIHNhZmV0eQ== 4469\nIHJlYWN0 4470\n4K6/ 4471\nYnQ= 4472\nIGRpc2FwcA== 4473\nIGdpcmxz 4474\nU3Q= 4475\nIEFuZw== 4476\nIGZhaXRo 4477\nIHR1cm5z 4478\nIHRpZ2h0 4479\nIG1vdXRo 4480\nYW1p 4481\nemVy 4482\nIHdlYXA= 4483\nINCx0YPQtA== 4484\nIGhvc3BpdGFs 4485\ncmFpZA== 4486\nIG1pY3Jv 4487\nIFN0YXRl 4488\nIE1vc3Q= 4489\nYWdu 4490\nIGRlY2lkZQ== 4491\nIHBhdGllbnQ= 4492\nIGNvcm5lcg== 4493\nIGRpZWQ= 4494\nTm8= 4495\nIFN0dWQ= 4496\ncmVuZA== 4497\nZW1wdA== 4498\nIGxpZQ== 4499\nIGxpZg== 4500\nIEJlZm9yZQ== 4501\ndMOz 4502\nIFN1cGVy 4503\nIGJlbGw= 4504\nNjA= 4505\nIHByaXZhdGU= 4506\nIFBhdWw= 4507\nIGdpYg== 4508\nIGFncmU= 4509\ntOyEnA== 4510\nIHNpZw== 4511\nIGludmVzdGln 4512\n0Y/Rgg== 4513\nZW5pbmc= 4514\nIGRpc3RhbmNl 4515\nIHdhcm0= 4516\nIGRpZ2l0YWw= 4517\naW5lcg== 4518\nIHBhbmQ= 4519\nIENPVklE 4520\n0LPQvg== 4521\nZ24= 4522\nIHJhY2U= 4523\nIHByb3Vk 4524\nIHRlYWNoaW5n 4525\nINGC0L4= 4526\n7J6l 4527\nIEFsbGFo 4528\nSW4= 4529\nIHdvb2Q= 4530\nIGNvbG9ycw== 4531\nIHdpcmQ= 4532\ndWo= 4533\naWRhZA== 4534\nIGN1c3RvbWVycw== 4535\nIGNvbm5lY3RlZA== 4536\nIGxheWVy 4537\nIGFjaGlldmU= 4538\nIHBlcnNwZWN0aXZl 4539\nIENvbGw= 4540\n2YI= 4541\nIGNsb3Vk 4542\nISEh 4543\nIGVuZGVk 4544\noIfqsow= 4545\nIG1hbmFnZW1lbnQ= 4546\nIHJpY2g= 4547\nIHN1YnN0 4548\nIHJlbW8= 4549\nIHNlcnZl 4550\nIHJlc2lzdA== 4551\nIHRob3VnaHRz 4552\nIGdyb3d0aA== 4553\naWxpYXI= 4554\nIHJpZ2h0cw== 4555\nIGNoYXJnZQ== 4556\nIGNvbnNpc3Q= 4557\nIHdlcmRlbg== 4558\nIGVtYg== 4559\nYW5kb20= 4560\nIGh1cnQ= 4561\nIGthbg== 4562\naWFz 4563\n0LvQvg== 4564\nIHNoaXQ= 4565\nIGJlZw== 4566\nIHJlY2VpdmVk 4567\naXRhdGlvbg== 4568\nIG1lYXQ= 4569\nIGlzc28= 4570\nZmZlZQ== 4571\nIGZhbW91cw== 4572\nIGNvbWZvcnRhYmxl 4573\nSUw= 4574\nIEJ5ZQ== 4575\nb3RoZXM= 4576\nIG1lZGljYWw= 4577\nIGVuam95ZWQ= 4578\nIGhlYWx0aHk= 4579\nIHd5 4580\nY2llcw== 4581\nIGVmZm9ydA== 4582\nIGRvY3Rvcg== 4583\nIG1pbGl0YXJ5 4584\nTEFV 4585\nIGdybw== 4586\nIGJhdHRsZQ== 4587\nIGZlZA== 4588\nIGNhcGFj 4589\nIGFmcmFpZA== 4590\naXZpbA== 4591\nINCy0YHQtQ== 4592\nIGxlbmd0aA== 4593\neXNpcw== 4594\nIGJlaQ== 4595\npO0= 4596\nIG9yZ2FuaXo= 4597\nb3Jn 4598\naW5j 4599\nIGludGVyYWN0 4600\nIENoaW5lc2U= 4601\nIGFjY29yZGluZw== 4602\nIGluY3JlZGlibGU= 4603\nIGtpbGxlZA== 4604\nIGRhdWdodGVy 4605\nIM+A 4606\n0YvQsg== 4607\nIHNjaG9vbHM= 4608\nIMKr 4609\nbGxlcg== 4610\nIHNob3VsZG4= 4611\nbmFs 4612\nIGNyaXM= 4613\nIGNoaWNrZW4= 4614\nIGZhc3Rlcg== 4615\nIGV4dHJlbWVseQ== 4616\nIG9wcG9z 4617\nIG5vdXM= 4618\nICs= 4619\ncmlh 4620\nIGZpbmFuY2lhbA== 4621\nIGV4Y2l0aW5n 4622\nIGpvdXJuZXk= 4623\n15nXnQ== 4624\noOs= 4625\nIGRpc3BsYXk= 4626\nIG1lbW9yeQ== 4627\nIGhlYXZ5 4628\n0L3QtQ== 4629\nIHBhc3NlZA== 4630\n0YDQuA== 4631\naWxlcw== 4632\nIHBzeWNo 4633\nIHNwZWNpZmljYWxseQ== 4634\nIGVuZ2FnZQ== 4635\nIGxlZA== 4636\nb3JnZQ== 4637\nIERlbQ== 4638\nb3JkZXI= 4639\nIDgw 4640\nIGNyZWFt 4641\nZXN0ZXJkYXk= 4642\nIGVkZ2U= 4643\nINC/0L7Quw== 4644\nIGJ1bGw= 4645\nIGluZGlj 4646\nIGt0w7M= 4647\nIGhvcGVmdWxseQ== 4648\ndW1lbnRz 4649\nYWdlbg== 4650\n0L3QvtCz0L4= 4651\nIGhhdGU= 4652\nY2h0 4653\nODA= 4654\nIGVmZmlj 4655\nIOyngA== 4656\nIGludGVybmV0 4657\nIGJ1ZGdldA== 4658\nIHByb3BlcnR5 4659\naWRheQ== 4660\nIOya 4661\nINC80L7Qtg== 4662\nb2xh 4663\nIHNob3dlZA== 4664\nIE1vbg== 4665\nIHRob3VzYW5k 4666\nQVA= 4667\nIHBvb3I= 4668\ndXNlZA== 4669\nIEphY2s= 4670\nIHPDpQ== 4671\ng70= 4672\nIGVzYw== 4673\nIHNvZnR3YXJl 4674\nIHF1YXI= 4675\nINio 4676\nIG5lY2Vzc2FyaWx5 4677\nb21lbg== 4678\naXk= 4679\nIGV2ZW50dWFsbHk= 4680\naXNoZWQ= 4681\nIGJyaWdodA== 4682\nRUQ= 4683\nIHNwbA== 4684\nIGRlbWFuZA== 4685\nIHRocmVhdA== 4686\nIHNpcg== 4687\nIHJlbGVhc2Vk 4688\nY2tldA== 4689\nIOKAqw== 4690\nIHJlcXVpcmVk 4691\nIHZvdGU= 4692\n7Lk= 4693\n4K6k 4694\nIGRldmVsb3BlZA== 4695\nIOyCrA== 4696\nYXRvcnk= 4697\nIGRpcg== 4698\nY2FwZQ== 4699\nIHNsaWdodGx5 4700\nw6w= 4701\n4LmJ 4702\ncmVldA== 4703\nIGRpc2Vhc2U= 4704\nIGNvdXJ0 4705\nIGl0ZW1z 4706\nIEVhcnRo 4707\n0YHRgtC4 4708\n0LbQtQ== 4709\n7LI= 4710\nIGNoYWxsZW5nZXM= 4711\nIEJyaXQ= 4712\nIGRlc2lnbmVk 4713\nMTI= 4714\nIGhlYXJpbmc= 4715\nIGxpc3RlbmluZw== 4716\nem8= 4717\nINGB0Ls= 4718\nIHBlcm8= 4719\nIHdlYXJpbmc= 4720\ncGxpYw== 4721\nIGNoZW0= 4722\nIGJhbGFuY2U= 4723\nIGJh 4724\nIHJlY2VpdmU= 4725\naW1h 4726\nIHNpZ25pZmljYW50 4727\nINC80Ys= 4728\nYW5jaA== 4729\nIENy 4730\nIENvdW4= 4731\n6riI 4732\nIGpvYnM= 4733\nIG9mZmljaWFs 4734\nIHBlcm0= 4735\nb21z 4736\nIG9wcG9ydHVuaXRpZXM= 4737\nIG92ZXJhbGw= 4738\nIGh1cw== 4739\nb2Rlcw== 4740\nIG5hdGlvbg== 4741\nIFJlZw== 4742\nIG9yZA== 4743\nIHJlc3RhdXI= 4744\nIOyG 4745\nIG1lbA== 4746\ndmlu 4747\nIHdlbm4= 4748\nIGvDtm4= 4749\n5oM= 4750\nIG9waW5pb24= 4751\n6Kw= 4752\nIFNvbWV0aW1lcw== 4753\n54I= 4754\n0YnQtQ== 4755\nYXNj 4756\nT1U= 4757\nIDIwMjA= 4758\nIGRlbGljaW91cw== 4759\naWdlcg== 4760\nIOyViA== 4761\nb2xl 4762\nIGhhbmRsZQ== 4763\nIGNpdA== 4764\nIO2VnA== 4765\nIGbDtnI= 4766\nb290aA== 4767\nIG5lY2Vzc2FyeQ== 4768\nIGluZGVwZW5k 4769\n5oQ= 4770\naXN0ZW4= 4771\naGFt 4772\nIMOpdA== 4773\nIG11bHRp 4774\nz4w= 4775\nPyk= 4776\nIGNhbXB1cw== 4777\nIHRvcGlj 4778\nIHJhaW4= 4779\nIHBhbmVs 4780\nIFNhbQ== 4781\nIGxhcmdlcg== 4782\nYXVkaWVuY2U= 4783\nIHBhaWQ= 4784\nIGVjb25vbWlj 4785\nb2x0 4786\nIHN0cmVldA== 4787\nIENvbnQ= 4788\nIGRyaXZpbmc= 4789\nIOyggA== 4790\nIGhheQ== 4791\nIHByb2Zlc3Npb25hbA== 4792\nIEludGVybg== 4793\n5bg= 4794\nIGlucHV0 4795\nIGNhdGVn 4796\nIGNybw== 4797\nIGxs 4798\nRVQ= 4799\n0YvQuQ== 4800\nKio= 4801\nIFpl 4802\nQkxF 4803\nIOyk 4804\ncmVlcw== 4805\nINCv 4806\nZWRl 4807\naWVydA== 4808\nIGZvbGQ= 4809\nIGR1cg== 4810\nIE5hdGlvbmFs 4811\nIOyWtOs= 4812\nYW5jZWQ= 4813\nIGZhaXJl 4814\ndXRlZA== 4815\nIGtpbmc= 4816\nIHdpbGQ= 4817\nb2k= 4818\ndXBiZWF0 4819\nIHByZXZlbnQ= 4820\naXVz 4821\nIMOo 4822\nIHdpZGU= 4823\nIHJpbmc= 4824\nIHRpdGxl 4825\nIHN0YW5kaW5n 4826\nIGFsdGhvdWdo 4827\nIGhp 4828\nIHNhdWNl 4829\nIHNpZGVz 4830\nIGFuaW1hbHM= 4831\naWxpbmc= 4832\nYXRpdmVz 4833\n7JeQ7ISc 4834\nIE92ZXI= 4835\nIGRlc3A= 4836\nIGNvbnNpZGVyZWQ= 4837\nYXJpZXM= 4838\naWVycw== 4839\nIGVpbmVu 4840\nIHNpc3Rlcg== 4841\nIOuV 4842\nIFN1cmU= 4843\ncmllbmQ= 4844\nYWlnbg== 4845\nIHNob3du 4846\nIHNhYw== 4847\nIHNvbnQ= 4848\nIGNlbnR1cnk= 4849\nIHRpZW4= 4850\nIM66 4851\nIFNU 4852\nIG9sZGVy 4853\naWVt 4854\nIHRydWx5 4855\nIFNp 4856\nIHdpbmRvdw== 4857\naXF1ZXM= 4858\nYXJpbw== 4859\nIGxvY2F0aW9u 4860\nzro= 4861\nIOyc 4862\ndmk= 4863\nYWd1ZQ== 4864\nIFNvcnJ5 4865\nIGRpc3A= 4866\nIGhlbGw= 4867\nIMOJ 4868\nIHRyYWRl 4869\nIGNyaXRpY2Fs 4870\nIOqx 4871\nIG5hbWVk 4872\nIHByZXBhcmVk 4873\nIEhvdXNl 4874\nYWx1 4875\nIHRvdWdo 4876\nIHRyaXA= 4877\nIHNhbmQ= 4878\nY2Vs 4879\nw7x6 4880\nIFB1dA== 4881\nIGFwYXJ0 4882\naXNm 4883\ndmlz 4884\nIGxpYnI= 4885\nYXZlbg== 4886\nIHZpZQ== 4887\nIGVmZmVjdGl2ZQ== 4888\n4Liy 4889\nIG1hZ24= 4890\nIG11aXRv 4891\nIOq1 4892\naGFs 4893\nIGxpbWl0 4894\nIG5pbmU= 4895\nIHdpbGxpbmc= 4896\nxLHFnw== 4897\nc3A= 4898\n0LXQsw== 4899\naGk= 4900\nIGFsdA== 4901\nIEphbg== 4902\nIG9yaWdpbg== 4903\nIFVz 4904\nIGVsZW1lbnRz 4905\nIHVzZXM= 4906\nIGhlbHBmdWw= 4907\nIGZsYXQ= 4908\nIGZhbWlsaWFy 4909\nIFBhcms= 4910\nIGNvcmU= 4911\nIGNsb3Nlcg== 4912\nIGFjdGl2ZQ== 4913\nIGFkbWluaXN0 4914\nQ0U= 4915\n0L3Ri9C1 4916\n54Q= 4917\nIHJlbGF0aXZl 4918\nIG1lbnRhbA== 4919\nIHJhbmRvbQ== 4920\nIHBhcnRuZXI= 4921\nIHV0aWw= 4922\ncGhvbmU= 4923\nIHJ1bGU= 4924\nd3c= 4925\nIOyglQ== 4926\nIHNjaG9u 4927\nIGNvZmZlZQ== 4928\nSEE= 4929\nIGNvbm5lY3Rpb24= 4930\nIHVuaXQ= 4931\nbGF1Z2hpbmc= 4932\nbG9n 4933\nIGFwcGw= 4934\n0LvQsA== 4935\ndXNpYw== 4936\nIEJyYQ== 4937\nIGFueXdoZXJl 4938\nQVVESQ== 4939\nIHNlcGFyYXRl 4940\nYm94 4941\nIGRpdmlk 4942\nIHRlc3Rpbmc= 4943\nIHNpY2s= 4944\nIHdlcmVu 4945\nINec1w== 4946\nIGFkdmFudGFnZQ== 4947\nIHRyYW5zZmVy 4948\nJy4= 4949\nIOu5 4950\nIGZpbmRpbmc= 4951\n0L3QvtC5 4952\nIOyiiw== 4953\nIGZvcnQ= 4954\nIGVjb25vbXk= 4955\nIGxhY2s= 4956\nIGxlYXZpbmc= 4957\nIGRpbQ== 4958\n5Y4= 4959\nIFJlcw== 4960\n2K0= 4961\nIGRpc2N1c3Npb24= 4962\n0LXQvw== 4963\nIGdlcw== 4964\nZHVjdA== 4965\nIGNoYWlu 4966\nIHVzZXJz 4967\nZWNo 4968\nxYJh 4969\nIGRpc2g= 4970\nIGNhcmVmdWw= 4971\nIHRlYWNoZXI= 4972\nIG9wdGlt 4973\nIGZsdQ== 4974\nYXRpY2FsbHk= 4975\nIHJlZmxlY3Q= 4976\nIHRyZWF0bWVudA== 4977\nZWVk 4978\nacSZ 4979\nw7k= 4980\n4K6+ 4981\nIGVxdWlw 4982\nIHBsYW5uaW5n 4983\nIHNvbHZl 4984\nIFRvbQ== 4985\nIGF2b2lk 4986\nIHBvdQ== 4987\nIGdyZWF0ZXI= 4988\nbGlu 4989\nT0w= 4990\nIEx1 4991\nIE1vcmU= 4992\nIGF0dHJhY3Q= 4993\nw6pu 4994\ndW5h 4995\nIHBob3Rv 4996\nZXJhdGlvbg== 4997\nIHBsYW5ldA== 4998\nIGNvcHk= 4999\nIHZpc3VhbA== 5000\naXJpbmc= 5001\nIGludGVybmF0aW9uYWw= 5002\nIGxhdWdoaW5n 5003\nIHRoaWNr 5004\nIGhvbGRpbmc= 5005\nIGJyaW5naW5n 5006\nIGxldHRlcg== 5007\nIGJ1cm4= 5008\nIGVmZmVjdHM= 5009\naXTDqQ== 5010\nb3Vycw== 5011\nT1Q= 5012\nw6ptZQ== 5013\nIFNjaG9vbA== 5014\n15XXqg== 5015\ncm9wcmk= 5016\nbGln 5017\nzrHOuQ== 5018\nIGFkdWx0 5019\nIHN1Z2Fy 5020\nIHJpZGU= 5021\nIGhpZ2hsaWdodA== 5022\nIG5vYm9keQ== 5023\nIDIx 5024\nIGNoYXQ= 5025\nINC/0YDQuA== 5026\nIGlubm92 5027\ndW5nZW4= 5028\nIGF0dGFjaA== 5029\nZWRvbQ== 5030\n5Yo= 5031\neWw= 5032\nIGxlZ2Fs 5033\nIHJpY2U= 5034\nIGNvbGxhYm9y 5035\na2luZw== 5036\nZG93bg== 5037\n5pk= 5038\nIGlo 5039\nIEFj 5040\nb3VzbHk= 5041\nIHJhcA== 5042\nIHNvbGlk 5043\nIGdlbmVyYWxseQ== 5044\nIHBhdHRlcm4= 5045\nYWxp 5046\n4Lit 5047\nIHRyYW5zbA== 5048\naW50ZXI= 5049\nYXVsdA== 5050\nIOuo 5051\nIGV4cHJlc3M= 5052\nIGV4YW1wbGVz 5053\nIGNob3Nl 5054\nIHRlbGxz 5055\nw61z 5056\nYWludA== 5057\nIFRlbGw= 5058\nIE1pY2hhZWw= 5059\n5qg= 5060\nIE51bWJlcg== 5061\nIHRhcA== 5062\nIGV4cGVyaW1lbnQ= 5063\nIGJlbmVmaXQ= 5064\nIOyw 5065\nIHNlcXU= 5066\nIGV4cGVuc2l2ZQ== 5067\nIGdlbmVyYXRpb24= 5068\nIE1hbnk= 5069\nIGFkZGluZw== 5070\nIGtpbA== 5071\nIGNhbXBhaWdu 5072\nIEFudA== 5073\ncmF3 5074\nb21tZW4= 5075\nIHNvdWw= 5076\nam8= 5077\nIEFjdHVhbGx5 5078\nYW1t 5079\n6rKg 5080\nIG1heGlt 5081\nIHNhbHQ= 5082\nIGNydQ== 5083\nIGNhbGxpbmc= 5084\nIGJhc2lz 5085\nYmFu 5086\nIGtlZXBpbmc= 5087\nIE1vcg== 5088\nZWRz 5089\n7IY= 5090\nIHRvZG8= 5091\n0LDQvNC4 5092\n0L3Rjw== 5093\nIGxpdmVk 5094\nIER1 5095\nZm9yY2U= 5096\nZmVyZW5jZQ== 5097\nYWxh 5098\nIG9jY3Vy 5099\nc2s= 5100\nIHJlY2VudA== 5101\nIGNhcnM= 5102\nIHRyYWRpdGlvbmFs 5103\nZW50bGU= 5104\nsog= 5105\nIGhlbGQ= 5106\nIG5hY2g= 5107\nIENlbnRlcg== 5108\nZXJlbg== 5109\nIGJpbg== 5110\n2YE= 5111\nIGNvbW1l 5112\nIHJldmU= 5113\nIOyYpA== 5114\nIGV4cGVjdGVk 5115\nYWJpbA== 5116\nIGZvY3VzZWQ= 5117\nb3Y= 5118\nIGlQ 5119\nb3JpYWw= 5120\naXJv 5121\nIGV0Yw== 5122\nYW1pbmc= 5123\nIFNvbg== 5124\nIHllc3RlcmRheQ== 5125\nIHN0cmF0ZQ== 5126\nINGG 5127\nIOuP 5128\ncGVz 5129\nIGFjdGl2aXR5 5130\nIGFkdmljZQ== 5131\nIG9wZW5pbmc= 5132\nZmlu 5133\nIHJlbGE= 5134\n6ZY= 5135\nIGluc3RhbmNl 5136\nIEV2ZXJ5b25l 5137\nYmw= 5138\ncGVu 5139\nIHZpc2lvbg== 5140\nIEFsZXg= 5141\naWZvcm4= 5142\nIHRpY2s= 5143\nSGU= 5144\nIHN0cmF0ZWd5 5145\nIGtvbQ== 5146\nUEU= 5147\nIEds 5148\nIGVsZWN0cmlj 5149\nMTU= 5150\nIGRhaWx5 5151\nIGh1c2JhbmQ= 5152\nIHN0YXRpb24= 5153\nIGFuYWx5c2lz 5154\neW5hbQ== 5155\nIGF0dGVtcHQ= 5156\nIGJpbGxpb24= 5157\ndmFudA== 5158\nIGZvcnRo 5159\nIG1hdGg= 5160\nYWx5 5161\nIGJlaGF2aW9y 5162\nIE1hcw== 5163\na2Fu 5164\nIERheQ== 5165\nIGJsZXNz 5166\nIGd1dA== 5167\nIEhpZ2g= 5168\nb3g= 5169\nIGRyZXNz 5170\nIGplZA== 5171\n6K8= 5172\n5ZY= 5173\nIGV4cGVyaWVuY2Vz 5174\naXN0YQ== 5175\nIGZpZ2h0aW5n 5176\n5bc= 5177\nINGB0Lo= 5178\nIG1vc3RseQ== 5179\nYXVzZQ== 5180\nIHBpY3R1cmVz 5181\n0LXQvdGC 5182\nIG1hZA== 5183\nIG1vZGVscw== 5184\n0YjQtQ== 5185\nIENvdW50 5186\nxYQ= 5187\nxYJv 5188\nZXB0 5189\nT00= 5190\nIEFO 5191\nIHRyb3VibGU= 5192\nNDA= 5193\nIGJpcmQ= 5194\ndWxhdGU= 5195\nIG11cg== 5196\nIHByb2R1Y2U= 5197\nIG1hcnJpZWQ= 5198\nYml0 5199\nIHRoZW9yeQ== 5200\n7Zg= 5201\nIGxlYWRlcg== 5202\nIExhc3Q= 5203\nQUE= 5204\n6LU= 5205\nIGltYWdlcw== 5206\nIGV4cGFuZA== 5207\nIFBvcg== 5208\nIHB1cmNo 5209\nIFNhbg== 5210\nIENocmlzdG1hcw== 5211\nIEF1c3RyYWw= 5212\nIHdpZA== 5213\nIE1pc3M= 5214\nIGtub3dpbmc= 5215\nIHpl 5216\nc2hpcA== 5217\na3U= 5218\n0YXQvtC0 5219\nIEluc3RhZ3JhbQ== 5220\nIEluZGlh 5221\nIGVzdGE= 5222\nIENhbGlmb3Ju 5223\nIDcw 5224\nIGRyYWc= 5225\nIGJydXNo 5226\nIG5hbWVz 5227\nQW5k 5228\nIHlv 5229\naWxsYQ== 5230\nIHNjaGVk 5231\nIGRlc3Ryb3k= 5232\neWVhcg== 5233\nIHZhbW9z 5234\nINmE 5235\nw6dh 5236\nIGZvcmdvdA== 5237\n0LjQtQ== 5238\nIHJhaXNl 5239\ncmVtZQ== 5240\n7ZW0 5241\nIEdpdmU= 5242\nIGNvbnRhaW4= 5243\ncmFi 5244\nIGdpZnQ= 5245\nINGB0L8= 5246\nIHJlcXVlc3Q= 5247\nIHNodXQ= 5248\nIGRlZ3JlZXM= 5249\nIGJlbmVmaXRz 5250\n0YvQtQ== 5251\nIHN0dWRpZXM= 5252\nIGVuZHM= 5253\nIGV2ZXJ5d2hlcmU= 5254\nIGhlcm8= 5255\nb3Bo 5256\nZXJyeQ== 5257\nIG1hdGVyaWFscw== 5258\nZW5lZA== 5259\nTkE= 5260\n5Y0= 5261\nIG11eQ== 5262\nIHdvcnNl 5263\nIE1hZA== 5264\nIGRlY2lzaW9ucw== 5265\naW9uZQ== 5266\nIGZvcmVpZ24= 5267\nbGF1Z2h0ZXI= 5268\naWJlcg== 5269\n0LXQvdC40Y8= 5270\n44WL 5271\nIHJlYWxpemVk 5272\nIGlnbg== 5273\nIHdlYWs= 5274\nIM68 5275\nIHNjYXJlZA== 5276\nIGFzc3Vt 5277\nQUs= 5278\n778= 5279\n77+9 5280\nIGNvdmVyZWQ= 5281\nIFNhdA== 5282\nINC+0L0= 5283\nIGluZGl2aWR1YWxz 5284\nIGNvbXBhcmVk 5285\nMTE= 5286\nIEFkZA== 5287\naWNsZXM= 5288\nIGNlcnQ= 5289\ncmFy 5290\nIGJyaWVm 5291\nIGFjdGl2aXRpZXM= 5292\nIGZhYg== 5293\nYmFy 5294\nIGFzdA== 5295\nIE90aGVy 5296\nIGNsYXNzZXM= 5297\nIG9n 5298\nIG1pc3Npbmc= 5299\n6Z0= 5300\nd2Vycw== 5301\n16k= 5302\nIGludHJvZHVjZQ== 5303\nIGVxdWF0aW9u 5304\nIG5vbQ== 5305\nIHBhaW50aW5n 5306\ndXNoaW5n 5307\nIEFQ 5308\nIGVuY291cmFnZQ== 5309\nIHNoaXA= 5310\naXR0ZWU= 5311\naXZlcnNl 5312\nb3Rh 5313\nbmFt 5314\nIGV4ZXJjaXNl 5315\nINCt 5316\nIG5hcw== 5317\nIHRob3VzYW5kcw== 5318\nIENhbGlmb3JuaWE= 5319\nIHNlcw== 5320\nIHJvdw== 5321\nnog= 5322\nIHBhbmRlbWlj 5323\nIHNraWxs 5324\nYmVs 5325\nIGRpcmVjdG9y 5326\nIG1pbGs= 5327\nIG51dA== 5328\nIG1vdGlvbg== 5329\nIGNsb3NlZA== 5330\n6Kg= 5331\nIGNyZWRpdA== 5332\nYWhy 5333\nIGNoZWVzZQ== 5334\nIGFsdGVybg== 5335\naW1hdGVseQ== 5336\nIHN1c3Q= 5337\nIFRyYQ== 5338\nIGdsYWQ= 5339\nIGhpZ2hseQ== 5340\nIHdh 5341\nIHJlZHVjZQ== 5342\nIGJsZQ== 5343\nYWRvcg== 5344\naW5hdGVk 5345\naW9uZXM= 5346\nY2llbnQ= 5347\nIGRlcGVuZGluZw== 5348\nIHNoYXJpbmc= 5349\nIGNhdWdodA== 5350\ncmFlbA== 5351\nIG1laHI= 5352\nIHBhc3Npb24= 5353\n55s= 5354\nIHJ1 5355\nIGZhcm0= 5356\nVEk= 5357\nYXZlcw== 5358\nIFJvYg== 5359\nIEJybw== 5360\nIG1vdGl2 5361\ncmV0Y2g= 5362\ncnVwdA== 5363\nIEJpZw== 5364\nIGFsbGU= 5365\nIGV0dA== 5366\ndWJz 5367\nIEphcGFuZXNl 5368\nIEhhbGw= 5369\n0LjQu9C4 5370\nQVVESUJMRQ== 5371\n56w= 5372\nIGNlbGxz 5373\naWth 5374\nZWxpbmU= 5375\naWxlcg== 5376\nIOyj 5377\nIHNreQ== 5378\nSU5BVURJQkxF 5379\nZW5kZQ== 5380\nYXB0ZXI= 5381\nIHBpbg== 5382\nIGdhdGhlcg== 5383\naG9s 5384\nbGVjdGlvbg== 5385\nIHN5bg== 5386\nIHBsdWc= 5387\ncm91bmQ= 5388\nIHVuaXZlcnNpdHk= 5389\naGli 5390\nIGZhbnRhc3RpYw== 5391\na24= 5392\nIGhvbGU= 5393\nIFJlbWVtYmVy 5394\naW5jdA== 5395\nYWtz 5396\nQ0g= 5397\nIGJyb2tlbg== 5398\nIHN0cmF0ZWc= 5399\nIGFsaXZl 5400\nIHRhbms= 5401\nIGNhcnQ= 5402\ncmF0ZWQ= 5403\ncmll 5404\nIFN0ZXA= 5405\nIEV2ZXJ5dGhpbmc= 5406\nIGJvdW5k 5407\nIHNvYnJl 5408\nIGN1c3RvbWVy 5409\noYw= 5410\ndXJn 5411\nIEJpbGw= 5412\nTGE= 5413\nd2hhdA== 5414\nIHJlYWN0aW9u 5415\nIHNlc3Npb24= 5416\nIHBsYW5z 5417\nIOydtOugh+qyjA== 5418\nIGRvd25sb2Fk 5419\n7Jk= 5420\ndWVy 5421\nIGNhYg== 5422\nIGluc3Ry 5423\naWZ5aW5n 5424\nIE5pY2U= 5425\nIHRlYW1z 5426\nxLFs 5427\nIGdvYWxz 5428\naXNjaA== 5429\nIHRyYW5zcG9ydA== 5430\nIGFuaW1hbA== 5431\nIGNvc3Rz 5432\nIGNhbGxz 5433\nIHNlaHI= 5434\n7Ig= 5435\ncmlhbg== 5436\nIGRpYWw= 5437\nIHdlYXRoZXI= 5438\n4LmA 5439\nINCy0L7Rgg== 5440\nIFBsYXk= 5441\nIHNoYXJlZA== 5442\nIHNtb290aA== 5443\nYWJh 5444\nIGxlYXZlcw== 5445\n4K6p 5446\nIGNvbmNlbnQ= 5447\nIHNoaWZ0 5448\nIOuQmA== 5449\nIEdvdmVybg== 5450\nIGRlbW9uc3Q= 5451\nIGJ1dHRlcg== 5452\nIOyXrA== 5453\nIHNhdGlzZg== 5454\niOus 5455\nIHJlY29nbml6ZQ== 5456\nIEZyZW5jaA== 5457\nIHZvbHVtZQ== 5458\nw6RuZA== 5459\n0YPQvA== 5460\nIOynhA== 5461\nIEtlZXA= 5462\nb3dh 5463\naXBwZWQ= 5464\n0YHRgtGA 5465\nIGRldGVjdA== 5466\nIM+D 5467\nIGxpZnQ= 5468\nIGNsb3RoZXM= 5469\nIFN0b3A= 5470\nw7U= 5471\nbWV0 5472\nIGNsaW4= 5473\nIGFycg== 5474\nZnJpZW5k 5475\nIHN0dWNr 5476\nWWU= 5477\naGFuZA== 5478\ndW1h 5479\nIHNjcmk= 5480\nIGZ1Y2tpbmc= 5481\nY3RvcnM= 5482\n16o= 5483\nIGpvaW5pbmc= 5484\nIGNldHRl 5485\nINij 5486\nIFdoaXRl 5487\nIGlocg== 5488\nzq0= 5489\nIGluY2x1ZGVk 5490\nZXNzbw== 5491\nIGFjYWQ= 5492\nYnVt 5493\nIHNhYg== 5494\nINC00LvRjw== 5495\ndWZhY3Q= 5496\nIFJlcHVibGlj 5497\ncmlt 5498\nIHllbGxvdw== 5499\nIGxpbWl0ZWQ= 5500\nVEVS 5501\nIFR5 5502\nIG5vdGVz 5503\ndmVzdA== 5504\n0LjQtw== 5505\nYWxlZA== 5506\nIHBoYXNl 5507\nYW5kYQ== 5508\nIE1vbQ== 5509\nUkk= 5510\nIGltbWVy 5511\nbWFs 5512\nIGluag== 5513\nIHlhbmc= 5514\ndWRpYmxl 5515\n0LDQsw== 5516\nIHNldHQ= 5517\nIG1hZ2lj 5518\nIGVuc3VyZQ== 5519\nIHNwcmluZw== 5520\nIHNob2Nr 5521\nIHdoZWVs 5522\n0L7Qs9C00LA= 5523\nIGNhbmNlcg== 5524\nIHJvb3Q= 5525\n0JA= 5526\nZ2VuY3k= 5527\nIOuN 5528\naWk= 5529\nIG91dHB1dA== 5530\nIGNvbW1pdA== 5531\nIHdvcmtlcnM= 5532\n7JWE7JqU 5533\nINGB0LDQvA== 5534\ndmV5 5535\nIHBldQ== 5536\nIGNpdmls 5537\naXNj 5538\nIGJyaW5ncw== 5539\n0YDQsNCy 5540\nYW5pYQ== 5541\nxIE= 5542\nY3JhZnQ= 5543\nbWJvbA== 5544\nIGludGVsbGln 5545\nYmk= 5546\nYWNpbmc= 5547\neW91 5548\nIGJlY29taW5n 5549\nIERlcg== 5550\nZW1h 5551\nIGluZ3JlZA== 5552\nIGNvbW1hbmQ= 5553\nIHVwZGF0ZQ== 5554\nIHByZW0= 5555\nIG9wZW5lZA== 5556\nhKQ= 5557\n0LXQvdC40LU= 5558\nIGdhcmQ= 5559\nIHN0YXRlbWVudA== 5560\nIHNjcmV3 5561\nIHByb3Rl 5562\nIGNhcmRz 5563\nIHRhc2s= 5564\nIGV2ZW5pbmc= 5565\nIHN0aXRjaA== 5566\naW5lbg== 5567\nIEJlcg== 5568\nbWFyaw== 5569\nIERhZA== 5570\nINC10YHRgtGM 5571\nINee1w== 5572\n7JeI 5573\nIGJhbg== 5574\nIGNsaW0= 5575\nIGZyZWVkb20= 5576\nIG5vcm1hbGx5 5577\n0LXRgdGM 5578\n5aY= 5579\nIHByb3ZpZGVk 5580\nIOyekA== 5581\nIOyVhOuLiA== 5582\nIEtpbQ== 5583\naWVkZXI= 5584\n7J2M 5585\nIGNpdGl6 5586\nIGJpa2U= 5587\nIGJhaw== 5588\nIG5vaXNl 5589\nIGNsaW1hdGU= 5590\naXplcw== 5591\nIGluY3JlYXNpbmc= 5592\nIFRIRQ== 5593\nIGxpcXU= 5594\nIHBlcnNvbmFsbHk= 5595\nZWY= 5596\ncmVzcA== 5597\nIGxlZ3M= 5598\naW5kZXI= 5599\nIHBlZA== 5600\nIOunjg== 5601\nIGRlcGVuZA== 5602\nIHZhcmlldHk= 5603\nIElzcmFlbA== 5604\nIHdhc2g= 5605\n5YY= 5606\nIHF1aWV0 5607\nIEphbWVz 5608\nIEpldw== 5609\nIGZvcmV2ZXI= 5610\nIEludA== 5611\nIGNvdW50ZXI= 5612\ndXJhbmNl 5613\nIEFueXdheQ== 5614\nY2FyZQ== 5615\nIE9ubHk= 5616\nY2nDs24= 5617\nYWRp 5618\nIEV2 5619\n64uI6rmM 5620\nIM6x 5621\nIHNsb3dseQ== 5622\nINC+0LQ= 5623\nIG5vdGljZWQ= 5624\naWVyZW4= 5625\nIGZlbGw= 5626\nINCR 5627\nIG3Dqm1l 5628\nIHdoZW5ldmVy 5629\nISk= 5630\nIEh5 5631\n5bw= 5632\nb3Jkcw== 5633\ndXNpb24= 5634\nIFN0YXI= 5635\nIO2Y 5636\nIE1hYw== 5637\naXZlbg== 5638\nIOyLnA== 5639\nIOyXhg== 5640\nIFR1cg== 5641\nIGdlcg== 5642\ncmlz 5643\nIHZleg== 5644\nINC70Y4= 5645\nIHZlcnN1cw== 5646\n2KfY 5647\nb2NvbGF0ZQ== 5648\nIHBsYW5l 5649\nIHpv 5650\nIHN1aXQ= 5651\nVGhpcw== 5652\nIG5lcnY= 5653\nIEFjYw== 5654\n0YPQtg== 5655\n7IKs 5656\nbmg= 5657\nZW1l 5658\nIGF1c3M= 5659\nIG1lYXM= 5660\nIHRyw6hz 5661\nz4k= 5662\n0YHQu9C4 5663\nIEFydA== 5664\nIFNlY29uZA== 5665\n0L7Qu9GM0LrQvg== 5666\nY2hv 5667\naXRlY3Q= 5668\n0LXRgdGC 5669\nIGJvc3M= 5670\nIGluY29tZQ== 5671\noKQ= 5672\nIHNoYWQ= 5673\nIGFwcHJvcHJp 5674\nIE1hbA== 5675\nb3B0 5676\nIGFydGlzdA== 5677\nIHBsYXlz 5678\nb3RoZXJz 5679\nIEludGVy 5680\nIHZpcnVz 5681\nIGh1bmc= 5682\nIGNvbnN0YW50 5683\nIHNjcmlwdA== 5684\nIHNub3c= 5685\ndWxm 5686\na2V0 5687\nIGRldmljZXM= 5688\nIG1ldGFs 5689\naWdodHM= 5690\n7IS4 5691\nIHNhbGVz 5692\nIHZlZ2V0 5693\nIGNvbGxlY3Rpb24= 5694\nIHZpYQ== 5695\na2Vy 5696\nIGdvdHRlbg== 5697\nT1c= 5698\nacOpbg== 5699\nIGFjY3Vy 5700\nIHdhdmU= 5701\ndWx0eQ== 5702\nIEFpcg== 5703\nIGxlYWRpbmc= 5704\naWNpbmc= 5705\nIGNlbnRyYWw= 5706\nIENocmlzdGlhbg== 5707\nZnI= 5708\nIEFsdGhvdWdo 5709\nIHNvbmdz 5710\nIGZpZg== 5711\n0L3Ri9GF 5712\nIGJlbG9uZw== 5713\nb3NzaWJsZQ== 5714\n7LA= 5715\nIHBob3Rvcw== 5716\naXNs 5717\nIHJlbGF4 5718\nc2E= 5719\nVVNJQw== 5720\n6rc= 5721\nIG1hbnVmYWN0 5722\nIFR3aXR0ZXI= 5723\nIGRhbmdlcm91cw== 5724\nIGh5ZA== 5725\nbGVhcg== 5726\naWFudA== 5727\nIOKApg== 5728\nIHN1ZGRlbmx5 5729\nIGxhdWdo 5730\nIGFuZ2xl 5731\nIEdvdA== 5732\nIHdvcnJpZWQ= 5733\n0L7QtQ== 5734\nIHBhcA== 5735\nIE1hcnQ= 5736\nZW5v 5737\nIGJhdHRlcnk= 5738\nINC/0L7RgQ== 5739\nIGxpZ2h0cw== 5740\nIGFybXM= 5741\nIEFicw== 5742\nbWVz 5743\n4oCT 5744\ndXNldW0= 5745\nIHRlYQ== 5746\nIE1pYw== 5747\nIGZvcm1lcg== 5748\nb2dyYXBoeQ== 5749\nIGFwcGxpY2F0aW9ucw== 5750\nIERpcmU= 5751\nIGZlZWRiYWNr 5752\naXRjaGVu 5753\neW9ydW0= 5754\ndWVk 5755\naWd0 5756\nxrDhuw== 5757\nb3NpdGlvbg== 5758\nIERlbA== 5759\nIO2VmOs= 5760\nIEJhY2s= 5761\nYWRz 5762\nIHByaW1l 5763\n7KO8 5764\n7KOg 5765\n15E= 5766\nIG11dA== 5767\nXS4= 5768\nINCX 5769\nbG9j 5770\na2lu 5771\nIGV4cGVydA== 5772\nIGFscmlnaHQ= 5773\ndW5ncw== 5774\nIHN1cHBseQ== 5775\nIGxlYWRlcnNoaXA= 5776\nIEZyYQ== 5777\nIHR5cGljYWxseQ== 5778\nIHNlbA== 5779\nIHRyZWVz 5780\nIDIy 5781\naGFy 5782\nIHdvcnN0 5783\nIGJ1c3k= 5784\nYW50bw== 5785\nIFVw 5786\nIEJhcw== 5787\nIHByZXNlbnRhdGlvbg== 5788\nIHN0cmFuZ2U= 5789\nIHRoaW4= 5790\n0YLQtQ== 5791\nIHZlaGljbGU= 5792\nINC00L4= 5793\nY2VsbGVudA== 5794\nNzA= 5795\nIHRpcmVk 5796\nIGNyaXNpcw== 5797\nIHRpbnk= 5798\nYXN5 5799\nIHJhbg== 5800\n6Yc= 5801\nIGZvcmNlcw== 5802\nINC+0Yc= 5803\nIGlkZW50aWZ5 5804\nIGFzc2Vzcw== 5805\n0LjRgtC1 5806\nU0U= 5807\nIGNyZWF0aXZl 5808\n558= 5809\nIGRlcGFydG1lbnQ= 5810\nIGluaXRpYWw= 5811\nIERhbQ== 5812\nYWt0 5813\ndmVyZQ== 5814\nIGluZmVjdA== 5815\nIHB1bXA= 5816\n4bqh 5817\nIHZpZWw= 5818\nIHJhcmU= 5819\nIGRvdA== 5820\nYXNoaW9u 5821\nZW1wbA== 5822\nIGZsZXg= 5823\nIGtvbg== 5824\nIHRydWNr 5825\nIGxlY3Q= 5826\nIHBsYXN0aWM= 5827\nbGF3 5828\nIGxpa2Vz 5829\nIHJvdWdo 5830\nIE1BVA== 5831\n7Z6I 5832\nIGNvbW1lcg== 5833\nIGFzc2U= 5834\nIGNha2U= 5835\nIGFjdGlvbnM= 5836\nIGFkbQ== 5837\nIG90aGVyd2lzZQ== 5838\nIEhlYWx0aA== 5839\nIGNvbGxl 5840\n4LmA4Lg= 5841\nIHJ1Yg== 5842\n5pQ= 5843\nIHNjcg== 5844\nIHp1bQ== 5845\nIEhpbQ== 5846\nIGNoYW1w 5847\nIGNvbmNlcm5lZA== 5848\nIDUwMA== 5849\nIHBsYXRl 5850\nIE91dA== 5851\nIGRvbmM= 5852\nIGVxdWlwbWVudA== 5853\nIHRhdWdodA== 5854\nbGxlZA== 5855\nIO2Z 5856\naXZh 5857\nIG1vdG9y 5858\nwrs= 5859\nIGd1aWRl 5860\n5Yk= 5861\nIHN0b3BwZWQ= 5862\nIHJhdA== 5863\nIGxhYm9y 5864\nIGFpbQ== 5865\nIHByZXBhcmU= 5866\nINGI 5867\nIHNob290aW5n 5868\nYW5uZWQ= 5869\nY3JpcHQ= 5870\nIGVuZW15 5871\nIGRlcGVuZHM= 5872\nIG5hdg== 5873\nIGJlcg== 5874\nIGxhbmRz 5875\nIHVuaXZlcnM= 5876\naXU= 5877\nIGZhY3Rvcg== 5878\nb2tpbmc= 5879\nIGNhcmJvbg== 5880\nYnV0 5881\nIExvdmU= 5882\nZWxk 5883\nIM61 5884\nIGdh 5885\nIMOpcw== 5886\nIGJyZWFk 5887\nIHZvbHQ= 5888\n7Yo= 5889\nIHdhc3Rl 5890\nIGtlZXBz 5891\nIHN0b3I= 5892\nIGhvbm9y 5893\nIHVubGVzcw== 5894\nIGNvbHVt 5895\nIOuMgA== 5896\nIHBsYW50cw== 5897\nWWVhaA== 5898\nIGluY2x1ZGVz 5899\nIG94 5900\nIHBldXQ= 5901\n66eM 5902\n7IOB 5903\naXN0cnk= 5904\n4Lix 5905\nIERlcGFydG1lbnQ= 5906\nYW50YQ== 5907\nIGZpbmdlcg== 5908\nIHN0cmV0Y2g= 5909\nIHN5bWJvbA== 5910\nIG5laWdoYm9y 5911\n5qw= 5912\n6rCE 5913\nfn4= 5914\nINGC0Ys= 5915\nIEFiZXI= 5916\na2Vz 5917\nIG1hc3NpdmU= 5918\nIENI 5919\nIFNhbA== 5920\n16A= 5921\nIGR5bmFt 5922\nYWNoZQ== 5923\nIFByZQ== 5924\nIG1vbml0b3I= 5925\nZW50ZWQ= 5926\nRU8= 5927\nIHJhaXNlZA== 5928\naXN0aWNz 5929\n2qk= 5930\nIHZvdQ== 5931\naXRlbg== 5932\nobA= 5933\nIGJ1c2luZXNzZXM= 5934\nIGVhcm4= 5935\nIG1vYmlsZQ== 5936\naWRhZGU= 5937\nIGhhYmU= 5938\neXI= 5939\nbGljdA== 5940\nIGNvbmR1Y3Q= 5941\nIGZlZGVyYWw= 5942\nIHdv 5943\nYnU= 5944\nIG5vbmU= 5945\nIHRlYWNoZXJz 5946\nINin2YTY 5947\naWRlbnRz 5948\n2KfZhA== 5949\nIHRyZW5k 5950\n0LXQtg== 5951\nIGFsYnVt 5952\nIG1pY2g= 5953\nYmFzZWQ= 5954\n4Li1 5955\nIHRyYW5zaXRpb24= 5956\nINC90L4= 5957\nw7Vlcw== 5958\naG9zdA== 5959\nZWR5 5960\nIFByb2Y= 5961\ncGFu 5962\naWpu 5963\nIGNhcGFjaXR5 5964\ndW5kbw== 5965\nINeR1w== 5966\nIGJyZWF0aA== 5967\nINC80LXQvQ== 5968\nIG3DvA== 5969\n7Zk= 5970\nIEF1dA== 5971\naGluZ3Rvbg== 5972\nIG5vcg== 5973\nIGdhaW4= 5974\ncG9pbnQ= 5975\nWWVz 5976\nINiq 5977\nIE5h 5978\nw6Vy 5979\nIGnDpw== 5980\nIE1hcnk= 5981\nIHNwaW4= 5982\nIGFudGk= 5983\nIHNvbWVob3c= 5984\nIGxhd3M= 5985\nIG1vbWVudHM= 5986\nIGdyZQ== 5987\nIG1vdmVz 5988\nIFdvdWxk 5989\nIHByZWRpY3Q= 5990\nIHZyYQ== 5991\nIDIwMTk= 5992\ntoQ= 5993\nIGZ1bmRhbWVudA== 5994\nMjU= 5995\nIHB1cmU= 5996\nIHdvdw== 5997\nIGlzbGFuZA== 5998\nIGludmVzdG1lbnQ= 5999\nIGJhdGg= 6000\nIFlh 6001\nIGhhcmRlcg== 6002\nIHRpcHM= 6003\n5Zc= 6004\nIGVsZWN0cm9u 6005\nIEJvYg== 6006\nIGJvbmQ= 6007\nb2RpZXM= 6008\nIEF1Zw== 6009\nIGdpYnQ= 6010\nIGNoYWly 6011\nIHR3aWNl 6012\nd29vZA== 6013\nIGNsYXI= 6014\nIG1hc2s= 6015\nIGhvbmVzdGx5 6016\nIDIwMTg= 6017\ndGllcw== 6018\nJyw= 6019\nIHBlbnM= 6020\nIHN1cnByaXNlZA== 6021\nIGNvbW11bmljYXRpb24= 6022\nIHNwcg== 6023\nIHdob3Nl 6024\nIHN0YXJz 6025\n15DX 6026\nIOKAiw== 6027\nIHByb3Blcmx5 6028\nIGdyZXc= 6029\nb3Npbmc= 6030\nIGRpdmVycw== 6031\nQUQ= 6032\nIGVtcHQ= 6033\nIGV4cHJlc3Npb24= 6034\n4bq/ 6035\nIFBhbA== 6036\nIGp1c3RpY2U= 6037\nIHBhaXI= 6038\nd28= 6039\nIHNlYXQ= 6040\nb3J0ZXI= 6041\nIGxpbmtz 6042\nIE1lcg== 6043\nIHJlbmQ= 6044\n0L3QvtC1 6045\ndXBpZA== 6046\nIEhlbA== 6047\nIE1hcmNo 6048\nIExv 6049\n0YHRjA== 6050\nIGhhc24= 6051\nIGV2YWx1 6052\naWxvcw== 6053\nIGZ1bmRpbmc= 6054\nIHZlbg== 6055\ndWFu 6056\nIE1hc3Rlcg== 6057\nIE9s 6058\nIEZyZQ== 6059\nIHlhcA== 6060\nIFNpcg== 6061\nc2No 6062\nIG1pc3Rha2U= 6063\nYW1hbg== 6064\nIGRpbm5lcg== 6065\nIFdhc2hpbmd0b24= 6066\nIG9yZ2FuaXphdGlvbnM= 6067\nINC20LU= 6068\nYXZpbmc= 6069\nIHbDrQ== 6070\nIGJpcnRoZGF5 6071\nIGJlYXI= 6072\nINmB 6073\nIGFmZm9yZA== 6074\nIHJldmVu 6075\nIHJlbGF0aW9uc2hpcHM= 6076\ncm91Z2g= 6077\nIFRpbWU= 6078\nIHRhZw== 6079\nIFN1bg== 6080\ndWFyeQ== 6081\nIFBv 6082\nY2Fy 6083\nYWJpbGl0aWVz 6084\nIHByaXNvbg== 6085\nIGxpYw== 6086\n7KCV 6087\naWRkZW4= 6088\nIHNwZWNpZXM= 6089\n6bs= 6090\nIGZpcm0= 6091\nIHNjb3Jl 6092\nIGRpdA== 6093\nIHNwZWN0 6094\nIHBlbA== 6095\nIGNvbXBsaWNhdGVk 6096\nIHJhbms= 6097\nIG9wcG9zaXRl 6098\nIHBpY2tlZA== 6099\nINC60L7QvQ== 6100\nZWxlcg== 6101\nIG1pZw== 6102\nIFNs 6103\nIE5ldA== 6104\nIG5lY2s= 6105\nIEZyYW5jZQ== 6106\nIHRlY2huaWNhbA== 6107\n4Lih 6108\nIG1pbGVz 6109\nIHByaW1hcnk= 6110\nIHNlaW4= 6111\nc2Vz 6112\nIGxhdWdocw== 6113\nYnJh 6114\nxZtjaQ== 6115\ncmlhZ2U= 6116\nIG5pYw== 6117\nZXRlcnM= 6118\nIMOq 6119\nb2xvZ2llcw== 6120\nIElT 6121\ncmFk 6122\ndWRv 6123\nxLFuZA== 6124\nbWFy 6125\nIGV4Y2g= 6126\nIGNvbXBldGl0aW9u 6127\nIGF1c3Np 6128\nIFNlcnY= 6129\nIHJlbnQ= 6130\nIGNob2NvbGF0ZQ== 6131\nIHdpZWRlcg== 6132\nIG5lYXJseQ== 6133\nIHNwZWVjaA== 6134\nIHVuYw== 6135\nIHBhcmFt 6136\nIEJyaXRpc2g= 6137\nIHJlbWFpbg== 6138\n4LiB 6139\ndXJ0 6140\nINi5 6141\nIGNyYWNr 6142\nYWlscw== 6143\nIHByb21pc2U= 6144\nIHBheWluZw== 6145\nacOf 6146\nIGFkYXB0 6147\n0LDQu9Cw 6148\nIG1vdmllcw== 6149\nIHdpcmU= 6150\nn6w= 6151\nIHRlcnJpYmxl 6152\nIHPDsw== 6153\nIHBlcmZlY3RseQ== 6154\nb3JkaW4= 6155\nIGrDoQ== 6156\nIGltcG9zc2libGU= 6157\nIFRocmVl 6158\nIG5o 6159\nIHR1cm5pbmc= 6160\ncnVt 6161\nIEJlbA== 6162\naWdn 6163\nIHJlc3BvbnNpYmxl 6164\n0LjQuQ== 6165\nIGluY3JlZGlibHk= 6166\nd2k= 6167\naWFubw== 6168\nIGh1bWFucw== 6169\nIMOH 6170\nIHNldHRpbmdz 6171\nIGpveQ== 6172\nb290 6173\nIGRlYWxpbmc= 6174\naWxsZWQ= 6175\nIHN1cnJvdW5k 6176\nIGZvbGxvd2Vk 6177\nIHBvc3NpYmx5 6178\nIGluaXRp 6179\nc3Rlbg== 6180\nIHByb3M= 6181\nIGNhbmRpZA== 6182\nIGFzc2lnbg== 6183\nIHZpb2xlbmNl 6184\nV2VsbA== 6185\nIHJpc2U= 6186\nUFM= 6187\nIHRhbWLDqW0= 6188\nIOuTpA== 6189\naWFuY2U= 6190\neWFu 6191\nIGF1ZGlv 6192\nIEJldA== 6193\nIEFtZXJpY2Fucw== 6194\nIEFzcw== 6195\naXNjaGVu 6196\n7J6F 6197\nIHVsdGltYXRlbHk= 6198\nIHBvbGlj 6199\nIG1ham9yaXR5 6200\nIEZpbmFsbHk= 6201\nZXJhcA== 6202\nIGd1YXJk 6203\nIE1BVFQ= 6204\nIGJyb3du 6205\n0LzQuA== 6206\nIGNoYQ== 6207\nIEhvbHk= 6208\nIG5lcnZvdXM= 6209\naXBwaW5n 6210\nxJlk 6211\nIFNh 6212\nk5zr 6213\ntoA= 6214\nbGll 6215\nIG51Yw== 6216\nIEFwcg== 6217\n6Zs= 6218\nIEtvcmVh 6219\nZWdv 6220\nIENhbmFkYQ== 6221\nIGvDtm5uZW4= 6222\nIGNvbXBhcg== 6223\nIGdhbno= 6224\nIE1haXM= 6225\nIHRoZW1l 6226\nIGtp 6227\nIGRyYXdpbmc= 6228\nYXpvbg== 6229\nIE9mZg== 6230\ndHQ= 6231\nIFdpbmQ= 6232\nIHRvZG9z 6233\nIG9idmlvdXM= 6234\n0L3QsNGP 6235\nSU0= 6236\nINCg 6237\nd2VsbA== 6238\nIGJsb3c= 6239\nIGhvb2s= 6240\nIGNpcmNsZQ== 6241\nIOuztA== 6242\nIGFyY2hpdGVjdA== 6243\nIEty 6244\nIGPDsw== 6245\nIHByb3RlY3Rpb24= 6246\nZWdh 6247\n5Yc= 6248\nIHdhdGNoZWQ= 6249\nIGFuc3dlcnM= 6250\nIGRpZXQ= 6251\naXZv 6252\nIHBvd2Rlcg== 6253\nIHlvdXJz 6254\nIGhpZ2hlc3Q= 6255\nRkY= 6256\n5bo= 6257\nIGJveXM= 6258\nw7Z5bGU= 6259\nIGx1bmNo 6260\nIElJ 6261\nIHNldHM= 6262\nIG1vbGU= 6263\n24E= 6264\nIHdpbnRlcg== 6265\nIGx1Y2t5 6266\nIHJlc3BvbnNpYmlsaXR5 6267\nIHNpZ25hbA== 6268\nIHdvbmRlcmluZw== 6269\nIGF4 6270\nIGNvb2tpbmc= 6271\n0L7QstC+0YA= 6272\nbGVn 6273\nINC/0L7Rgg== 6274\nIHN1cnByaXNl 6275\nIGRlbW9jcg== 6276\nIGxvb3A= 6277\nIGphZw== 6278\nIGN1cmlvdXM= 6279\nIG1hcmtldGluZw== 6280\n0J0= 6281\nYXJvbg== 6282\nIEFwcGxl 6283\nIHZpcnR1YWw= 6284\nIDE5OA== 6285\nbm9vbg== 6286\nIE1ldA== 6287\n0L7RgdGC0L4= 6288\n0L7QsdGL 6289\naXR1 6290\nIEF3 6291\nIGJ1eWluZw== 6292\nIHJlc3RhdXJhbnQ= 6293\nIEJ1ZA== 6294\nIGRvdWJ0 6295\nIGdyYW50 6296\nIHZlcmQ= 6297\nIGNhc2g= 6298\nIGZhY3VsdHk= 6299\nVGhhdA== 6300\nIEVpbg== 6301\nIHdlZA== 6302\naXRuZXNz 6303\nIE1hZw== 6304\nbmVs 6305\nIG5hcnI= 6306\nIGFjY2lkZW50 6307\nIG1lZGl1bQ== 6308\nZW1lbnRz 6309\nIGNyb3c= 6310\nbmlnaHQ= 6311\n7J28 6312\nIGxpYnJhcnk= 6313\n0LDRjtGC 6314\nIHRhbWJpw6lu 6315\nIHJlZmVyZW5jZQ== 6316\nIGZvdXJ0aA== 6317\naG91c2U= 6318\ndmVudGlvbg== 6319\nIGZpbGxlZA== 6320\nIENvdXI= 6321\naWJy 6322\nIG5n 6323\nIGRldmVsb3Bpbmc= 6324\nIHByb3ZpZGVz 6325\nIHBvbGw= 6326\nIHRyYWZmaWM= 6327\nYXJlbnRseQ== 6328\n4K6f 6329\nIGZvcm1z 6330\nIGNsaWVudA== 6331\nIGdlbnRsZQ== 6332\nIG11c3M= 6333\nIENvbmdyZXNz 6334\nIEluZGlhbg== 6335\nY2Vhbg== 6336\nIHBpbA== 6337\nIGN6eQ== 6338\nc3Rvb2Q= 6339\ndXR5 6340\nIG7DpA== 6341\nIHNwZW5kaW5n 6342\nIGNvbnN0cnVjdGlvbg== 6343\naW5hdWRpYmxl 6344\nIOuniA== 6345\niOustA== 6346\nIOyDnQ== 6347\nb21h 6348\nb3Nlbg== 6349\nYWdv 6350\nIGxhcmdlc3Q= 6351\n44WL44WL 6352\nIHVuaXZlcnNl 6353\nYmVz 6354\nb3Nh 6355\nINC10LPQvg== 6356\nIGR1ZGU= 6357\nIE1BUg== 6358\nIGluZGVlZA== 6359\nzrXOuQ== 6360\nIG1hbmFnZWQ= 6361\nIFNob3VsZA== 6362\nU28= 6363\nIGFwcGxpZWQ= 6364\nIGZhaXJseQ== 6365\nIERlbg== 6366\nIGFuYWx5 6367\nIGNvbnN0YW50bHk= 6368\n0YHQvw== 6369\nSG93 6370\nIFNheQ== 6371\nZW5jaWVz 6372\nIFBD 6373\nIGVnZ3M= 6374\n4K6w 6375\nIGV0aA== 6376\nIEVudMOjbw== 6377\naW5hcg== 6378\naW90 6379\nIGN6 6380\nIEV1cm9wZWFu 6381\nIEFN 6382\nIGPDoQ== 6383\nIHJhZGlv 6384\np4w= 6385\nIGhpZGU= 6386\nIFN0YXJ0 6387\nIGNsdWI= 6388\nIEhvcGU= 6389\nIGVmZm9ydHM= 6390\nbHVzaW9u 6391\nIGNpdGllcw== 6392\naG9uZQ== 6393\nIHJlYWNoZWQ= 6394\nIGd1aWQ= 6395\ncm9pZA== 6396\nIGhhcm0= 6397\nIGN1dHRpbmc= 6398\nIGJ1bA== 6399\nMTg= 6400\naWVzdA== 6401\nIE1leA== 6402\nIGlyb24= 6403\nIGFmdGVybm9vbg== 6404\nIGhhbGw= 6405\nIHByenk= 6406\nIGdvc2g= 6407\nIGluZmx1ZW5jZQ== 6408\nINCy0LjQtA== 6409\nIGluY3JlYXNlZA== 6410\nIE1pbmlzdGVy 6411\nIGRpc2Np 6412\nIFBldGVy 6413\nIHZlcnQ= 6414\nIG1lbnU= 6415\nIHNlbGxpbmc= 6416\ndXJhbGx5 6417\nIHF1b3Rl 6418\nIMKh 6419\nIGNvbnRpbnVlcw== 6420\nbXByZQ== 6421\nIMWfZXk= 6422\naXR1dGlvbg== 6423\nINC90LDRgQ== 6424\nY2xlcw== 6425\nIEdlcm1hbg== 6426\nY3p5 6427\nINCj 6428\nQmU= 6429\nIGtpdGNoZW4= 6430\nIFRyeQ== 6431\naXBl 6432\nIGljb24= 6433\nYXJw 6434\nIHByb3ZpZGluZw== 6435\nIFRyYW5z 6436\nIHRlY2huaXF1ZQ== 6437\nIGjDpHI= 6438\nIGluZnJhc3Q= 6439\nIHN1c3A= 6440\nw7xjaw== 6441\naWNpcA== 6442\nINCV 6443\nIGNpbg== 6444\n7Ja06w== 6445\nIHByeg== 6446\nIGNvbXBvbmVudA== 6447\nIGJ5ZQ== 6448\nIEJpYmxl 6449\naXplcg== 6450\nQ2g= 6451\nIHNvbHV0aW9ucw== 6452\nIGFjY29tcGw= 6453\nIDIwMTY= 6454\nSUU= 6455\nIFRh 6456\nIGFzc3VtZQ== 6457\nIGxpcXVpZA== 6458\nIOuouQ== 6459\nIHF1YXJ0ZXI= 6460\nIGZlbWFsZQ== 6461\nIFRoaW5r 6462\nIHN0YXR1cw== 6463\naXR1dGU= 6464\nIGNvYWNo 6465\nIHJlaW4= 6466\nIGNvbWJpbmF0aW9u 6467\n6Lc= 6468\nIFRlcg== 6469\nIG9iamVjdHM= 6470\nIGRpc3RyaWN0 6471\nIG1ha2V1cA== 6472\nIG11cmRlcg== 6473\nd2Fz 6474\nZmVu 6475\nIGJvd2w= 6476\nIHB1Ymxpc2hlZA== 6477\nIHNwb3J0cw== 6478\nIGlkZW50aXR5 6479\nIHNlZW1lZA== 6480\nIGFjdGluZw== 6481\n0LvRjg== 6482\ncml4 6483\nIHVwbG9hZA== 6484\nIGhhc3Q= 6485\nIGJvYXQ= 6486\nIE1vZA== 6487\ncmlv 6488\nID0= 6489\nIGN5Y2xl 6490\nr7g= 6491\nIGxvdWQ= 6492\ndXN0ZWQ= 6493\nY29taW5n 6494\nIDIwMTc= 6495\nIG9udA== 6496\nIGxlZ2lzbA== 6497\nIHN0cnVjdA== 6498\nIFNvbWV0aGluZw== 6499\nIGNvbmZsaWN0 6500\nIHVwcGVy 6501\nIG1hbmFnZXI= 6502\nIG1vcnQ= 6503\nIGZyYQ== 6504\nIMSw 6505\nIE1pa2U= 6506\nIFdvcms= 6507\nIG7Dsw== 6508\ncGhlcmU= 6509\nIOyCrOs= 6510\nIExhbmQ= 6511\nIGZpbHRlcg== 6512\nIHByb21vdA== 6513\n5rA= 6514\nlbw= 6515\nIHJlY29yZGluZw== 6516\n150= 6517\nIGFzc29jaWF0ZWQ= 6518\nIGZ1ZWw= 6519\ndW5kZXI= 6520\nIGVsZWN0aW9u 6521\nIGVtcGxveWVlcw== 6522\nIENvbXA= 6523\n0YDRg9Cz 6524\nIFdv 6525\ncm9s 6526\nIHNhdmVk 6527\nIEhvbg== 6528\nIFZp 6529\nYWNh 6530\ncHJldA== 6531\nIHdldA== 6532\nIHN0dXBpZA== 6533\nIGxhZA== 6534\nIGZlc3Q= 6535\nIHdha2U= 6536\nINC40L0= 6537\nIGdyZWF0ZXN0 6538\nIEppbQ== 6539\nIHNlcmlvdXNseQ== 6540\nIOy5 6541\nIGZlZWxpbmdz 6542\nIDMwMA== 6543\naWF0aW9u 6544\nIGJlYXV0eQ== 6545\nIOyemA== 6546\nIHNhbg== 6547\nk6A= 6548\nIC0o 6549\nIGNvbnNjaW91cw== 6550\nINC00LXQuw== 6551\nYnll 6552\n55k= 6553\nTWFu 6554\nIGxldHM= 6555\nIHNob2Vz 6556\neWQ= 6557\nIGRpc2FwcGU= 6558\nIENvdW50eQ== 6559\nIFNjb3R0 6560\nIGJ1dHQ= 6561\nIGFxdcOt 6562\nIGNvbmZpZw== 6563\ncmVzcG9uZA== 6564\nTEFVR0g= 6565\nqeuLiOuLpA== 6566\nIGRpdmlkZWQ= 6567\nIGFjcXU= 6568\nIHpvbmU= 6569\nIGtvbW0= 6570\nYcOnw6Nv 6571\n7Kec 6572\nY3V0 6573\nIDIz 6574\nIG1heGltdW0= 6575\ncm9n 6576\nIHJ1bnM= 6577\nIGNvbXBvbmVudHM= 6578\nIGFycml2ZWQ= 6579\nIGNvbmZpZGVudA== 6580\n0YDQvtCy 6581\nIGhlaWdodA== 6582\nIHByb2NlZA== 6583\nRU0= 6584\nINCt0YLQvg== 6585\nIE1lbg== 6586\nIHRhbGtz 6587\nIGNvbmZpZGVuY2U= 6588\nIENocmlz 6589\nIGxlYWRz 6590\nIG5vc2U= 6591\nZmFsbA== 6592\nYmI= 6593\nIE5vdGhpbmc= 6594\naXNlcg== 6595\nIGluZGVwZW5kZW50 6596\nIG1pbm9y 6597\nIHN5bQ== 6598\nbGVu 6599\nY2llbmNl 6600\nIGZhc2hpb24= 6601\nIHNleHVhbA== 6602\nIGJ1bg== 6603\naGVyZQ== 6604\nIHNvaWw= 6605\nIGRpZXNl 6606\nIHNoYXA= 6607\nIGVtcHR5 6608\nIGpvdXJuYWw= 6609\nYWdvbg== 6610\nIFRoZWly 6611\nIHdlZWtlbmQ= 6612\nw610 6613\nIGVycm9y 6614\nIG5hcg== 6615\nw7g= 6616\n6Kk= 6617\nYW5jeQ== 6618\nIOyVig== 6619\nIGZvcmVzdA== 6620\nIGhhY2Vy 6621\nIG1pc3NlZA== 6622\nIGV2aWw= 6623\nIHN0b3JhZ2U= 6624\nIHNpbmdpbmc= 6625\naW5oYQ== 6626\nIGtub2Nr 6627\nIGltcHJlc3M= 6628\nINC+0YfQtdC90Yw= 6629\nIEdvbGQ= 6630\nIFN1cg== 6631\nIFBvcnQ= 6632\nIExvbmQ= 6633\nIGZhemVy 6634\nb3R5 6635\nb3Rv 6636\nIGFueA== 6637\nIFdpbGxpYW0= 6638\nIGV4aXN0aW5n 6639\ncGxhY2U= 6640\nIENE 6641\nzrM= 6642\nIENvbGxlZ2U= 6643\nbG9y 6644\nIEVhc3Q= 6645\nc2Vu 6646\nZmFjaA== 6647\nb2Z0 6648\nIGV4cGVyaWVuY2Vk 6649\nIGxvdmVz 6650\naW1t 6651\nIHBvbHk= 6652\nIGVzc2U= 6653\n7KQ= 6654\nIEdyYW5k 6655\n6Kc= 6656\nY2hlcg== 6657\nIHZpY3RpbQ== 6658\nIEdlcw== 6659\n0LvRjA== 6660\ndmlzaW9u 6661\nIHRhbGw= 6662\nIGxlbnM= 6663\nINC30L3QsA== 6664\nIEJvdGg= 6665\nIOyy 6666\nIHN1c3RhaW4= 6667\nIGFyZ3VtZW50 6668\nIGZhY3RvcnM= 6669\nIGF1dG9tYXRpY2FsbHk= 6670\nIGZydWl0 6671\nIGxpYmVy 6672\nIGFsZQ== 6673\nIFByZXNz 6674\nIEJh 6675\nINCz0L4= 6676\nIGh1bmRyZWRz 6677\ndGhhdA== 6678\nIFJpY2g= 6679\nIHJlY2lwZQ== 6680\nIElU 6681\n6Ic= 6682\n4bql 6683\nIGRlc2NyaWJl 6684\nIGRyaXZlcg== 6685\nIE9jdA== 6686\nIE1hdA== 6687\n0LTQtQ== 6688\nIG1lYWw= 6689\nIGxhdGVzdA== 6690\nIHRoZXJhcA== 6691\nIGNvbXBhcmU= 6692\nIEFtYXpvbg== 6693\nIOyigA== 6694\nIFJ1c3NpYQ== 6695\nIHN0cmluZw== 6696\nIGth 6697\nIENvbW11bg== 6698\nIGRpYQ== 6699\nSXM= 6700\nIG1pbGxpb25z 6701\nIGNvcnBvcg== 6702\nIGNvcnJlc3BvbmQ= 6703\nIGZpeGVk 6704\nIEpvZQ== 6705\n2Y4= 6706\nIHZpZXdz 6707\nIHJpdmVy 6708\nIHN0dWRpbw== 6709\naWdnZXI= 6710\nIGZsYXZvcg== 6711\nIHByZXNlbmNl 6712\nIHVuaXRz 6713\nIHNhdmluZw== 6714\nYXZvdXI= 6715\nIHBlc3Nv 6716\nb3JpdGg= 6717\nIGhlcnM= 6718\nIE5hdA== 6719\nYXNpb24= 6720\nIEZyYW5r 6721\n0L7RiA== 6722\nxYJ5 6723\n7YQ= 6724\nIGVpbmVt 6725\nIGZ1bmN0aW9ucw== 6726\ndW1hbg== 6727\nIG5vcnRo 6728\nIOyghA== 6729\nIGhvcnNl 6730\ndmlk 6731\nIHBsZWFzdXJl 6732\n0LDRiA== 6733\nw6llcw== 6734\naW5kYQ== 6735\nIHRhaWw= 6736\nIGV4cGxvcmU= 6737\nU1Q= 6738\nIGNvbW1lcmNpYWw= 6739\nIER1cmluZw== 6740\nYXJs 6741\nXTo= 6742\nZml0 6743\nIHJhdGVz 6744\n5rM= 6745\nTVVTSUM= 6746\nIGhvdXNpbmc= 6747\nIGVpbmVy 6748\nIHNpdHVhdGlvbnM= 6749\n5os= 6750\nIGRlY3Jl 6751\nIGFwcHJvcHJpYXRl 6752\n0LXQvdC90L4= 6753\nJS4= 6754\nIGJhYw== 6755\nIHdhdA== 6756\nZW5zaXR5 6757\nw6Ro 6758\na25vd24= 6759\naXR6 6760\nIGVtb3Rpb25hbA== 6761\nZXJ2YXRpb24= 6762\nIGJsaW5k 6763\nMTY= 6764\n7YM= 6765\nIGpvaW5lZA== 6766\nIGxvY2F0ZWQ= 6767\nINGB0Lw= 6768\nYWRhcw== 6769\nYmVyZw== 6770\nIGRlc3M= 6771\nIGRlYXI= 6772\nZWRlbg== 6773\nY29z 6774\nIGFkb3B0 6775\nMTAw 6776\nb3dl 6777\nIENoZWNr 6778\naXNtbw== 6779\nIHNpbXBs 6780\nIGFuZ3J5 6781\nINC80LXQvdGP 6782\nIENhbQ== 6783\nIHBhZA== 6784\nIGF0dGVuZA== 6785\nIHNhbXBsZQ== 6786\nIOyb 6787\nIElO 6788\ndWxvdXM= 6789\nIFNhcg== 6790\nIFNob3c= 6791\nIGluZnJhc3RydWN0dXJl 6792\nIEF1Z3VzdA== 6793\nIGxlc3Nvbg== 6794\nIG5pZXQ= 6795\n5o4= 6796\nIGZvaQ== 6797\nIGJyb2tl 6798\ndHI= 6799\n55U= 6800\nIDQ1 6801\nIGdldw== 6802\n0YPQvw== 6803\nYXRp 6804\nIG1haW50YWlu 6805\nIGFydGlzdHM= 6806\naW5nZXI= 6807\nZXJ2ZWQ= 6808\nSUE= 6809\nIGVxdWFscw== 6810\nIG9wZXJhdGlvbg== 6811\naWxseQ== 6812\nIOuCtA== 6813\nIGNyb3dk 6814\nIGludGVybmFs 6815\nIHRlc3Rz 6816\nIFJvY2s= 6817\nIENvbnM= 6818\nIOuEiOustA== 6819\nd2Fy 6820\nIHNvdQ== 6821\nIGNoYXJ0 6822\nIEp1bmU= 6823\nIEFwcmls 6824\nZ2VudA== 6825\nIHZlbnQ= 6826\nIHF1YW5k 6827\nIEtvcmVhbg== 6828\naW1v 6829\n54k= 6830\naWRlcnM= 6831\nIG1vdW50YWlu 6832\n0YHRgtCw0LI= 6833\naWpr 6834\nIGRpc2NvdmVyZWQ= 6835\nIFN1bmQ= 6836\nIFNpbA== 6837\nIHNvbG8= 6838\nwrQ= 6839\nIHNjaG9s 6840\nIEVhY2g= 6841\n57U= 6842\nIGJhcmU= 6843\nIO2M 6844\nIHbDrWRl 6845\nIGluZ3JlZGllbnRz 6846\nIEl0cw== 6847\nnbzqs6A= 6848\nIOyK 6849\nz40= 6850\nIExlZQ== 6851\nIHNjYXJ5 6852\nIHByaW5jaXA= 6853\nIHNwaXJpdHVhbA== 6854\n7IU= 6855\nIEhvbGQ= 6856\nIGRlZmluZQ== 6857\nIExlcw== 6858\nIE5vcg== 6859\nIEVuZA== 6860\nIGJsb2c= 6861\nIEdyZWVu 6862\n0LDQtdGC0YHRjw== 6863\ncGFydA== 6864\nZWxlcw== 6865\nIFVuZGVy 6866\nIHBhcnRl 6867\nIDM1 6868\nIHNlY3Rvcg== 6869\nIFNlcHQ= 6870\nIGF1dGg= 6871\n4K6u 6872\nb21pbg== 6873\nIGNsaWVudHM= 6874\nIGNp 6875\nIEZyaWRheQ== 6876\nZXJhcw== 6877\nIHR3ZQ== 6878\ndWxhdGVk 6879\nIGN1bHR1cmFs 6880\nINGB0LLQvg== 6881\nIOuNlA== 6882\nIMO6 6883\nIHBhcmNl 6884\n4K6y 6885\nIHRyYWRpdGlvbg== 6886\nIGp1ZGdl 6887\nIEdlbmVyYWw= 6888\nIGRldGVybWluZQ== 6889\nIElzbg== 6890\nIFBM 6891\nbmVhdGg= 6892\nIG1hdHRlcnM= 6893\n7ZW07A== 6894\nIV0= 6895\n0LDRhQ== 6896\nIHBvb2w= 6897\nIHZhcmlhYmxl 6898\nIHZhY2NpbmU= 6899\nIGNhdXNlZA== 6900\nIHdlc3Q= 6901\nIFllcA== 6902\nZmFzdA== 6903\nIHBoaWxvcw== 6904\naG9yYQ== 6905\nIGNvbnRpbnVlZA== 6906\nIHVuZm9ydHVuYXRlbHk= 6907\n5pU= 6908\nIGZsaWdodA== 6909\nIHdyYXA= 6910\nIGh1aA== 6911\nIEFic29sdXRlbHk= 6912\nIHBpbms= 6913\nIHJlbWFpbnM= 6914\nIG7DqQ== 6915\nIGZsZQ== 6916\nIFNvbA== 6917\nIGxvc2luZw== 6918\nIGFsZ29yaXRo 6919\nIHJlcXVpcmVz 6920\nIGZvdW5kYXRpb24= 6921\nIEJ1cg== 6922\nIHByb2Zlc3Npb24= 6923\nIE1pZA== 6924\nIOutkA== 6925\nY2Fu 6926\nIE1pbA== 6927\nIHlvdW5nZXI= 6928\nIGFwcGVhcnM= 6929\ndGVybQ== 6930\n7ZWY6rOg 6931\nYWNsZQ== 6932\nIExvbmRvbg== 6933\nIGVuZ2luZWVyaW5n 6934\n4Lii 6935\nIGFkdmVudA== 6936\n7IS47JqU 6937\nIOq4sA== 6938\nIE1hag== 6939\n0YDQtdC8 6940\naW5ndQ== 6941\nIFVL 6942\ndXJv 6943\nc3Bl 6944\nIHRlbnQ= 6945\nIHJlcG9ydGVk 6946\nIEFM 6947\nSGV5 6948\nIOunkA== 6949\nIGRlbnQ= 6950\nIEF1c3RyYWxpYQ== 6951\nIEphbnVhcnk= 6952\ns7Q= 6953\nYWd1ZXM= 6954\nYXJzaA== 6955\ncmln 6956\nIHRpZW5l 6957\n4Lij 6958\nzq4= 6959\nIG1hY2hlbg== 6960\ndW50ZQ== 6961\n0YPRgQ== 6962\nIGVsZWN0cg== 6963\nIHR1dG9yaWFs 6964\nIHBsYWNlZA== 6965\nIOydtOqxsA== 6966\nIENvdW5jaWw= 6967\n7ZaI 6968\nsOumrA== 6969\nYWhyZW4= 6970\nIOq3uOuemA== 6971\nIHByb3Zl 6972\nZm9s 6973\nIHF1ZXI= 6974\nIGNoZWFw 6975\nIEZhdGhlcg== 6976\nIFBvd2Vy 6977\nk5w= 6978\nIHB1cnM= 6979\nIGVzcA== 6980\nIEJyZQ== 6981\n6riw6w== 6982\nb21hcw== 6983\n0LjQu9GM 6984\nIGdlaHQ= 6985\nb3N0ZXI= 6986\n6rO8 6987\nIGZpbGVz 6988\nINCn 6989\nYmVsbA== 6990\nIHdob20= 6991\nIOuY 6992\nIGV4Y2VsbGVudA== 6993\nIGRhdGFi 6994\nIGfDtg== 6995\nIOynhOynnA== 6996\nIGJlbGllZg== 6997\namV0 6998\nIGphY2s= 6999\nIHN3aW0= 7000\ncmlhbA== 7001\ndW1pbg== 7002\nYXVj 7003\nIHNvbGw= 7004\nIGVzc2VudGlhbA== 7005\n7ZWY64qU 7006\nIGV2b2w= 7007\nY2hhZnQ= 7008\nYWluZQ== 7009\ndGhsZXQ= 7010\nIGluY29y 7011\nIHJlcG9ydHM= 7012\nIGRlZmluaXRpb24= 7013\na2Vs 7014\nIGNpcmN1bQ== 7015\nIHByb2R1Y2Vk 7016\nINeb 7017\nYW50aWM= 7018\nbmV0 7019\nIGF3YXJk 7020\nIGR1cmNo 7021\nIHRyYW5zcA== 7022\nIG1hbGU= 7023\npqzr 7024\nIG1vb24= 7025\nIEdlb3JnZQ== 7026\nIGZseWluZw== 7027\nacOz 7028\nIHNvdXJjZXM= 7029\nIHBsZW50eQ== 7030\nIERlbW9jcg== 7031\nUk8= 7032\nIDAw 7033\nIHNlY3VyZQ== 7034\nIEJpcg== 7035\ncmFpbg== 7036\nIHp1cg== 7037\nIGVmZmljaWVudA== 7038\nIHJlcGVhdA== 7039\nIG1ldGhvZHM= 7040\nIGNhbG0= 7041\nIGRpc2N1c3NlZA== 7042\nIOyeiOuKlA== 7043\nIHNlcnZlcg== 7044\nYW5pZQ== 7045\nIEluc3RlYWQ= 7046\nIGlkZWFs 7047\nIGNvbnZlbg== 7048\nIGhvcGluZw== 7049\nIFRvcg== 7050\nIGRlcHRo 7051\nIGhlYXZlbg== 7052\nRU5DRQ== 7053\nIGhhYml0 7054\nZ3JhZA== 7055\nIGZsYWc= 7056\nIGluZQ== 7057\nIGto 7058\nIExJ 7059\nIGZhY2luZw== 7060\nIEFV 7061\nIFRpbQ== 7062\nIGdlbQ== 7063\nIEp1bA== 7064\nIGVsYQ== 7065\naXp6YQ== 7066\nIGZlbGxvdw== 7067\nIHF1ZWw= 7068\nIHNwb2tl 7069\nIGNpdGl6ZW5z 7070\ndWdl 7071\nIHBhZ2Vz 7072\nIGZhc2M= 7073\nIHJlbGlnaW91cw== 7074\nYXRlbg== 7075\nIGNoYXB0ZXI= 7076\nIFZhbA== 7077\nIGNvbnN1bHQ= 7078\nIE1pbGw= 7079\nZ2w= 7080\nb3Blcg== 7081\nIGluZmlu 7082\nIG1hcnJpYWdl 7083\nIG1lZGljaW5l 7084\nINC00LI= 7085\nIGRvZ3M= 7086\nIGluc3RydW1lbnQ= 7087\nIEV4YWN0 7088\nw6Fu 7089\nIDIwMjE= 7090\nIGZlcg== 7091\nIHdlYWx0aA== 7092\nIGdyYWRl 7093\n0YvRhQ== 7094\nIGNyaW1l 7095\nIHRocmVhZA== 7096\nIGVzc2E= 7097\nIHdpbmU= 7098\nY29ob2w= 7099\ncGhh 7100\n4LiH 7101\nb2d1ZQ== 7102\nIGluc3VyYW5jZQ== 7103\nYXJyYXRvcg== 7104\nIFNlcHRlbWJlcg== 7105\nIHZpZA== 7106\nIFNwaXJpdA== 7107\nIGdlc3Q= 7108\nIFJ1c3NpYW4= 7109\nIHByb3BlcnRpZXM= 7110\nIGFydGljbGU= 7111\nIHVuZGVybmVhdGg= 7112\neWVy 7113\nIGpvaW50 7114\nIHJlbGF0aXZlbHk= 7115\nIGluY2g= 7116\nIGRlc3BpdGU= 7117\nIEdyZWU= 7118\nIGNsYXNzaWM= 7119\nIHN1cHBvcnRpbmc= 7120\nIGluc3RydWN0 7121\nbHVzaXZl 7122\nIGRpYWdu 7123\n5oo= 7124\nIGFkbWluaXN0cmF0aW9u 7125\n0LDQsdC+0YI= 7126\nIE9wZW4= 7127\nINC/0L7Qug== 7128\nIGRvbGxhcg== 7129\nIGNvbnNlcXU= 7130\nb2Jlcg== 7131\nIEdlcm1hbnk= 7132\nIHRlcnI= 7133\nIFFV 7134\nINCT 7135\n574= 7136\nIHN0cm9uZ2Vy 7137\nyZk= 7138\nINmK 7139\nIGlQaG9uZQ== 7140\nIGZhYnJpYw== 7141\nw7xo 7142\nIGVuZW0= 7143\n5q8= 7144\nIHN1YnQ= 7145\nRUU= 7146\nb25kZQ== 7147\nIGNyZXc= 7148\nIHJlbW92ZWQ= 7149\nIGxhZHk= 7150\nIHBvdGVudGlhbGx5 7151\nINCd0L4= 7152\neWFs 7153\nIHN5bXB0 7154\nIGFybXk= 7155\nIGludHJvZHVjZWQ= 7156\ndGVz 7157\nIGFzcGVjdHM= 7158\nMTQ= 7159\nIExvdQ== 7160\nICk= 7161\nIGRlcGxveQ== 7162\ncGV0 7163\nIGhhbg== 7164\nIFdhdGNo 7165\nIHdlYXBvbnM= 7166\nIHBoZW4= 7167\nIHJlZ2lzdGVy 7168\nIGVpbmZhY2g= 7169\nIHNwb3J0 7170\nIGJyaWRnZQ== 7171\nIGlubmVy 7172\nIG1pbmltdW0= 7173\nIHdpdG5lc3M= 7174\nIGVzbw== 7175\nIHZpbGxhZ2U= 7176\nIG93bmVy 7177\npqzqs6A= 7178\nIHNjcmVhbQ== 7179\naWxlZA== 7180\nIHBpdGNo 7181\nYnJ1 7182\nIGFkdmFuY2U= 7183\nIHN1cHBvc2U= 7184\nIEF0dA== 7185\n0LXRgtGB0Y8= 7186\nIGRpZmZlcmVuY2Vz 7187\nYWtlZA== 7188\nIGludGVycHJldA== 7189\nw6Y= 7190\naWVuZG8= 7191\nIGFic29s 7192\nINCx0YPQtNC10YI= 7193\nIOuy 7194\nIHRyaWFs 7195\nIHRoaW5rcw== 7196\nbHlpbmc= 7197\nY2VwdGlvbg== 7198\nIEFmcmljYW4= 7199\nIGNoZW1pY2Fs 7200\nIHRhcGU= 7201\nIGNvbnZlcnNhdGlvbnM= 7202\nIGRpc3RyaWJ1dGlvbg== 7203\ndGk= 7204\nIEFJ 7205\nIGZsYXNo 7206\nIHVuZGVyc3Rvb2Q= 7207\nIEdvdmVybm1lbnQ= 7208\nIT8= 7209\nIFNr 7210\n6rGw6w== 7211\ncmllcg== 7212\nVFM= 7213\nIEFjY29yZGluZw== 7214\n0Y7Rgg== 7215\nIHNwb25z 7216\n0YLQvtCx0Ys= 7217\nIHZhbHU= 7218\nZXJlbQ== 7219\naWNodGln 7220\nIHJlc2lzdGFuY2U= 7221\nIEdhbA== 7222\nZ2VyeQ== 7223\nIGJlZ2lucw== 7224\nIGFkdmFuY2Vk 7225\nIHJlbGV2YW50 7226\nIHBvbGl0aWNz 7227\nIEZhbQ== 7228\nIMOnb2s= 7229\nIE5ldmVy 7230\naWxsaW5n 7231\nIGZvb3RiYWxs 7232\n0LjQuA== 7233\nIElE 7234\nIEFmcmljYQ== 7235\nIGZpbmdlcnM= 7236\nINCx0L7Qu9GM 7237\nIMOh 7238\nIGNsaXA= 7239\nIExhdA== 7240\nIOyngOq4iA== 7241\nZXNzZQ== 7242\nIHZvb3I= 7243\nIGFzaWRl 7244\n5p4= 7245\nIHRvd2FyZA== 7246\nIGJhdA== 7247\nIHZhbGlk 7248\nIE1lbnM= 7249\nIGNvbXBsZXRlZA== 7250\nxLHEnw== 7251\nIHBvZGNhc3Q= 7252\nIEJvbg== 7253\n25I= 7254\nIEp1bHk= 7255\naWxh 7256\nIHBhY2thZ2U= 7257\nIHB1bGxlZA== 7258\nY2hhcg== 7259\nIE1lbA== 7260\nb2lz 7261\nIHNvdXRo 7262\nIOuU 7263\nIGltcG9ydGFuY2U= 7264\nIHB1c2hpbmc= 7265\nIGlzb2w= 7266\nIHN0YW5kcw== 7267\nY2lsbA== 7268\n5Lw= 7269\nIPCf 7270\nb3Jp 7271\n6rCB 7272\nIGhvbWVz 7273\nIGNvbmNlcm5z 7274\nIGJpeg== 7275\n5b0= 7276\nYmll 7277\nIGJpcw== 7278\nIGdlYXI= 7279\nIE1T 7280\nIGh1bg== 7281\nIE1hdHQ= 7282\n4bqj 7283\nc2V5 7284\nIFNlY3JldA== 7285\nIG9kZA== 7286\nIE1heA== 7287\nb2xseQ== 7288\nZm9yZA== 7289\nIFNI 7290\nIHJlcGxhY2U= 7291\nIG5hdmln 7292\nIGluaQ== 7293\n0LjRjw== 7294\nIGdpYW50 7295\nIG1hbmQ= 7296\nIEhhcHA= 7297\nVElPTg== 7298\nZ3Vu 7299\naWFtbw== 7300\n7J6F64uI64uk 7301\nIGdhcA== 7302\nIMOqdHJl 7303\nIGNsYXNzcm9vbQ== 7304\nIGh5cA== 7305\nYWtp 7306\n6K4= 7307\naXN0ZXJz 7308\nYWNrcw== 7309\nINGB0L4= 7310\nIGJ1Zw== 7311\nIGdyYXY= 7312\nYW1pbg== 7313\nIGV2ZXJ5ZGF5 7314\nIOyhsA== 7315\nIGdhcmRlbg== 7316\nY2VtYmVy 7317\nIGVzdG8= 7318\n2Kw= 7319\nn7A= 7320\n5YE= 7321\nIHJvbQ== 7322\nIOygnOqwgA== 7323\nIGZhbGxpbmc= 7324\nIGZhdWx0 7325\nZWxseQ== 7326\nIGNoZXN0 7327\nINC70Lg= 7328\nIHBvdGF0bw== 7329\nIGJ1aWxkaW5ncw== 7330\nIG9wZXJhdGluZw== 7331\nIHBhcmU= 7332\nd3I= 7333\nRG9u 7334\nIEZvdXI= 7335\nIHZ1bA== 7336\nIGzDoQ== 7337\nIGZydXN0 7338\nIERhbm4= 7339\nb2xlcw== 7340\nbnlh 7341\nIOy2 7342\nINGA0LDRgQ== 7343\n15s= 7344\nIGHDrQ== 7345\nd29yZA== 7346\nIHdlYXBvbg== 7347\nIG9idA== 7348\nIEZhbGw= 7349\nIFN0ZXZl 7350\nIG1peGVk 7351\nIHBvZGU= 7352\nIEFT 7353\nIExlZw== 7354\nIGRlc2M= 7355\nIHNwbGl0 7356\nIGVtZXJnZW5jeQ== 7357\nIFNpbmc= 7358\nIHByb2ZpdA== 7359\nIHR5cGljYWw= 7360\nIERvbmM= 7361\nIGFubm91bmNl 7362\nIFRleA== 7363\nIHNhY3I= 7364\ndGVybmFs 7365\nIGNvbW1pdHRlZQ== 7366\naWdv 7367\nIGRpYW0= 7368\ncGhhcw== 7369\nIGRlZmU= 7370\nIFByb2Zlc3M= 7371\nIGRlY2w= 7372\n0YPRgA== 7373\nMjI= 7374\nb2xm 7375\nIE1vbmQ= 7376\ndXk= 7377\nIGF5 7378\nIGxlbQ== 7379\nIGxvdmVseQ== 7380\nIENvdWxk 7381\nIGd1YXI= 7382\nSEg= 7383\nIGNhcmVmdWxseQ== 7384\nIExpc3Rlbg== 7385\nINC60YA= 7386\nIHlvdXRo 7387\nIFRoZXJlZm9yZQ== 7388\nIGRyZWFtcw== 7389\nIEplZmY= 7390\nP10= 7391\nIOuI 7392\nREE= 7393\nIGJvZGllcw== 7394\nYXV4 7395\nIHRlY2huaXF1ZXM= 7396\nIG1lY2hhbmlzbQ== 7397\n15M= 7398\nINC+0L3QuA== 7399\nIGRlc2lyZQ== 7400\nw64= 7401\nIFZv 7402\ncXVlcw== 7403\nINGD0LbQtQ== 7404\nIFdob2E= 7405\nIEdhbWU= 7406\nIGhhbA== 7407\nYW5pc2g= 7408\nIHByYWN0aWNlcw== 7409\nNTAw 7410\nIHNvcnRz 7411\ndXBz 7412\nYXRlZnVs 7413\nIGhlcnNlbGY= 7414\nIGd1aXRhcg== 7415\nIHByb3Bvcw== 7416\nIHNpdGVz 7417\nIGJlYWNo 7418\nINei 7419\n0L3Rgw== 7420\nIGRyYW0= 7421\nIE5vdmU= 7422\nVkU= 7423\ncmFudA== 7424\nIHBsb3Q= 7425\nIOyXrOq4sA== 7426\nIENh 7427\nIGVzdGFibGlzaGVk 7428\nIDIwMTU= 7429\nIGluc3BpcmVk 7430\nIGFubm91bmNlZA== 7431\nINGC0YA= 7432\nIDI2 7433\nIHZveQ== 7434\nIHRlY2g= 7435\n7KCB 7436\nIHByb2Nlc3Nlcw== 7437\nb250bw== 7438\nIFBhbg== 7439\nIHJhcGlk 7440\naXN0YW4= 7441\nIDE5Nw== 7442\nIHJlbGlnaW9u 7443\nIDI4 7444\nIHNtaWxl 7445\nIGJhYg== 7446\nINqp 7447\nIFZpcg== 7448\nIHNjaGVkdWxl 7449\nIGV4ZWN1dA== 7450\nIHByb24= 7451\n0Y0= 7452\nINCd0YM= 7453\nbXVzaWM= 7454\n7JuQ 7455\nIGdhbg== 7456\n7Iug 7457\nIGRlZmF1bHQ= 7458\nIGJlbQ== 7459\n2Yk= 7460\nIGZvcmNlZA== 7461\nIE9idmlvdXNseQ== 7462\nIHN0b25l 7463\nIHRpZQ== 7464\nIGRyaW5raW5n 7465\nIHNlcnZlZA== 7466\nQ2F1c2U= 7467\nIGNvbmZlcmVuY2U= 7468\nIEV4YWN0bHk= 7469\noJw= 7470\n7JmA 7471\nIFJh 7472\nIGZha2U= 7473\nIGRpZmY= 7474\nIGNoYWxsZW5naW5n 7475\nIOykkQ== 7476\nz4c= 7477\nIGludGVsbGlnZW5jZQ== 7478\ncmV0ZQ== 7479\nIHN0dWR5aW5n 7480\nIGFwcG9pbnQ= 7481\nIHRhbg== 7482\nINC40Lw= 7483\nIGN1cnZl 7484\nIFRlYW0= 7485\nIEF6 7486\nINC30LQ= 7487\nIE11c2lj 7488\nZmllbGQ= 7489\naXJhdGlvbg== 7490\nIGZhaWxlZA== 7491\nIG5vdmVs 7492\nIGRpZmZlcmVudGx5 7493\nIGVzY2FwZQ== 7494\nIFlv 7495\nIE9jdG9iZXI= 7496\nxLF5b3I= 7497\nIGRlc2NyaWJlZA== 7498\nIGNvbnZlcnQ= 7499\nYWNlbWVudA== 7500\nIGhvdGVs 7501\naXNhdGlvbg== 7502\nIHN1aXM= 7503\nIHdhbGtlZA== 7504\nMjAw 7505\nIG5laWdoYm9yaG9vZA== 7506\naXNw 7507\nIExvcw== 7508\nIGhpZGRlbg== 7509\nIDI3 7510\n0LvQtQ== 7511\nIHBocg== 7512\nIElzbGFuZA== 7513\nIFN0cmVldA== 7514\nZW5kYQ== 7515\naGlwcw== 7516\nb3N1cmU= 7517\nIGRlZmluZWQ= 7518\n4Lin 7519\nIHZpZGE= 7520\nIGxhYmVs 7521\nIEV2ZXJ5Ym9keQ== 7522\nIGpva2U= 7523\naWFv 7524\n2KfZhg== 7525\nIGF0aGxldA== 7526\nLi4uIg== 7527\nIEZpcmU= 7528\nRG8= 7529\nIGRlZmVuc2U= 7530\nIGVudGVydGFpbg== 7531\nw6F0 7532\nIHBvbGljaWVz 7533\nIGFsY29ob2w= 7534\nIEVuZ2luZQ== 7535\nIGdhbA== 7536\nIEp1ZA== 7537\nIHZvbHVudGU= 7538\naWNrcw== 7539\nZXRh 7540\nYWd0 7541\nINeV 7542\nIG3Dtg== 7543\nMTM= 7544\nIGVuY291bg== 7545\nIGVo 7546\nIG9yYW5nZQ== 7547\nIGFic29y 7548\nIHNwYWNlcw== 7549\nIE5vdmVtYmVy 7550\n6rWs 7551\naWF0 7552\nIHRhbQ== 7553\nY2tub3c= 7554\nIHN0b3Jt 7555\nIERpcmVjdG9y 7556\nIHByZWdu 7557\nIOydvA== 7558\nINC+0L8= 7559\nIHJlc291cmNl 7560\nIGJhcmQ= 7561\nbmV3 7562\nIERlY2VtYmVy 7563\ndWl0cw== 7564\nIHdlaWw= 7565\nIGNvbnN0cnVjdA== 7566\nc2k= 7567\nbmlj 7568\nIGZsb3Vy 7569\nIHJlc3RyaWN0 7570\nw7x0 7571\nIGVudGlyZWx5 7572\nIGJyZWFraW5n 7573\nZW50bGljaA== 7574\nIHR3ZW50eQ== 7575\nIGNhdXNlcw== 7576\nIGVsZXY= 7577\nIFNwcg== 7578\nIEludGVybmV0 7579\nIGtpc3M= 7580\nIG9wZXJhdGlvbnM= 7581\nc3p5 7582\nIOuK 7583\nIHNjaWVudGlzdHM= 7584\nIGdyb3du 7585\nIG93bmVycw== 7586\nb3V0cw== 7587\nIGNvdXJzZXM= 7588\nIHVzdWFs 7589\nIGlubg== 7590\nIHRyYW5zbQ== 7591\nw7Fv 7592\nIG51ZXN0 7593\n0LrQvtCy 7594\nIGNhdGVnb3J5 7595\nIExpZmU= 7596\nIFBsdXM= 7597\nIGF0bW9z 7598\nd2hpbGU= 7599\nIHJlY29yZHM= 7600\nIGRlxJ8= 7601\n64uk6rOg 7602\nIOyCrOue 7603\nIHJlcXVpcmVtZW50cw== 7604\naW5u 7605\nIGltbWln 7606\nIGRlZXBlcg== 7607\n57Q= 7608\nIGFwcHM= 7609\nIGNvbGxlYWd1ZXM= 7610\nxbx5 7611\nIG9mZmVycw== 7612\nIHTDoQ== 7613\nIGNvbHVtbg== 7614\nbGF1ZA== 7615\nSVI= 7616\nIE1z 7617\nIGV4Y2hhbmdl 7618\nbGFz 7619\nIExhdw== 7620\nIEpvbg== 7621\naXNzZQ== 7622\ncm9nZW4= 7623\nIG1vaQ== 7624\n15c= 7625\nIHNlbmRpbmc= 7626\nIGhlbGxv 7627\n0LXQtQ== 7628\nxZvEhw== 7629\nIHN1Y2NlZWQ= 7630\nIHN1ZmZlcmluZw== 7631\nIGFkdmVydA== 7632\nIOyjvA== 7633\nIHJlY28= 7634\nxLFuxLE= 7635\nINC60L7QvA== 7636\nYWxsZXk= 7637\nIGZhaWx1cmU= 7638\naWVq 7639\nIOuVjA== 7640\nIGRydWdz 7641\nIGN1YW5kbw== 7642\nIOyWtOuW 7643\nIEFib3V0 7644\nIHF1YW5kbw== 7645\nOTA= 7646\nIEZlZA== 7647\nMTc= 7648\nU2g= 7649\naW5obw== 7650\nIFN1bmRheQ== 7651\nIFBoaWw= 7652\nIGFjYWRlbWlj 7653\nIEluYw== 7654\nIG1haW50ZW4= 7655\nIHJld2FyZA== 7656\nZXJk 7657\nIGNvbW1pdHRlZA== 7658\n7Iqk 7659\n0LPRgA== 7660\nIHN0YW5kYXJkcw== 7661\nIGthbA== 7662\nIGludGVudGlvbg== 7663\nIFpo 7664\nIGFja25vdw== 7665\n5L8= 7666\nID09PQ== 7667\nb2d5 7668\n5ac= 7669\nIGZpbG1z 7670\naXNr 7671\nIHRlZXRo 7672\nIHN0cnVnZ2xl 7673\ncmQ= 7674\ndWVu 7675\nIGRpc3M= 7676\nIERhcg== 7677\nYW15 7678\nIGVuZW1pZXM= 7679\nIHZlbG9j 7680\nIENhbGw= 7681\ndW1icw== 7682\n0LjRgtC10LvRjA== 7683\nIG9jZWFu 7684\nw6lk 7685\n7Jqw 7686\nIHRyZW0= 7687\naWVudG8= 7688\n0LXRiNGM 7689\nZmZpY2llbnQ= 7690\nIGJvdHRsZQ== 7691\nIGluc3RpdHV0aW9u 7692\nZXN0eQ== 7693\nIEhhbg== 7694\naGFi 7695\n64qY 7696\nIGFycmVzdA== 7697\nIGxldHRlcnM= 7698\nb3VuY2U= 7699\n7Yw= 7700\nQW4= 7701\nIGNyZWF0ZXM= 7702\nIGNsb2Nr 7703\nIGRlYnQ= 7704\nIGFuY2llbnQ= 7705\naWZpY2F0aW9ucw== 7706\nZ2k= 7707\nQnV0 7708\nIFR1 7709\na2w= 7710\nIGJvcmRlcg== 7711\nIG9vaw== 7712\nIEJheQ== 7713\nZXN0YQ== 7714\nIOuztOw= 7715\nIHdyYQ== 7716\ncHJlbmU= 7717\nIOqyjA== 7718\nYW5nbGU= 7719\nIGJlbGlldmVk 7720\naWVuY3k= 7721\nYWth 7722\nIGNyaXRpYw== 7723\nIGJvbWI= 7724\nIGhhbQ== 7725\nINCb 7726\n6rWt 7727\nIEd1eXM= 7728\ncm9zb2Z0 7729\nIGNyaW0= 7730\nZXRjaA== 7731\nQVJS 7732\nIHNpZ2h0 7733\n0LjQvdCw 7734\nIGFpbg== 7735\n4buR 7736\naXNjaGU= 7737\nIGF1eA== 7738\nIG51bWVy 7739\nIHN1cnZpdmU= 7740\nQWxs 7741\nQkM= 7742\nIHN6 7743\nn6zr 7744\nIGphbQ== 7745\nIENvdXJ0 7746\nIGFsbGVz 7747\nIHRyaWdnZXI= 7748\n0J4= 7749\nIGZvcm1hdA== 7750\nIGRlY2FkZXM= 7751\nIGNlcw== 7752\nIHNpZ25z 7753\nIHJvYm90 7754\nIENodXJjaA== 7755\nIGF6 7756\nIHNvdXA= 7757\nIFRleGFz 7758\ndXRlbg== 7759\nINGH0YLQvtCx0Ys= 7760\nIG5laWdoYg== 7761\nlteU 7762\nIGNvbW11bmljYXRl 7763\nxaE= 7764\nIGVsaW1pbg== 7765\nIGZyZXF1ZW5jeQ== 7766\naGVybg== 7767\naWRvcw== 7768\nIGVtcGhhcw== 7769\nIG1lc3NhZ2Vz 7770\nIGdlbmRlcg== 7771\nIFdlbm4= 7772\nINCy0L4= 7773\nIHByaWNlcw== 7774\nb2xv 7775\nINC/0L7QvQ== 7776\nd2luZw== 7777\nIEZpbA== 7778\n0LDQtdC8 7779\nIEN1cg== 7780\nIGZhbHNl 7781\nIGZpZWxkcw== 7782\nIHPDqQ== 7783\nMjQ= 7784\nIG1hYw== 7785\ndcWf 7786\nIGxheWVycw== 7787\nIGFkdm9j 7788\nd2Fu 7789\nIGthcg== 7790\nIMWe 7791\nIGRlY29y 7792\nIHdhbGxz 7793\nb2U= 7794\naXNzaW9ucw== 7795\nIHJlc29s 7796\n16I= 7797\nIENhcm9s 7798\nIFZpZGU= 7799\nbGVlcA== 7800\nIFlPVQ== 7801\nIGZsaXA= 7802\nIHN1cmdlcnk= 7803\nIGNob3A= 7804\nVVI= 7805\nLiw= 7806\nIGFnZW5jeQ== 7807\nIHdhbnRpbmc= 7808\nIHNvbGFy 7809\nIGhvcml6 7810\nIEFkYW0= 7811\nIHN0YXlpbmc= 7812\nb2xpYw== 7813\nIGdyYXRlZnVs 7814\nIHJlbWFyaw== 7815\nIHRlY2hub2xvZ2llcw== 7816\nIHByb3RlaW4= 7817\n0LTQtdC7 7818\nIE1vbnQ= 7819\nIHNob3VsZGVy 7820\nIHph 7821\ncmV5 7822\nIE9vaA== 7823\nIHN0eQ== 7824\naWNhcg== 7825\n0L7RgtGA 7826\nIHJvdXRl 7827\nIFR1cm4= 7828\nIGJvbQ== 7829\nIGRlYmF0ZQ== 7830\nIHBvc3NpYmlsaXR5 7831\nIO2VtOw= 7832\nYXBh 7833\nIGludmVudA== 7834\nw7xybGljaA== 7835\nIHByb2ZpbGU= 7836\nIHNlbmlvcg== 7837\ncHB5 7838\ndmFz 7839\nIG11bmRv 7840\nYXRldmVy 7841\nIGFwcGFyZW50bHk= 7842\nZW5lcg== 7843\n15A= 7844\n560= 7845\nIHByZWNpcw== 7846\nIGFsaWdu 7847\nIGtuaWZl 7848\nIFJvYmVydA== 7849\n5Ys= 7850\nIGZvb2w= 7851\nIGludml0ZQ== 7852\ndXNpbmc= 7853\nIGNpcmN1bXN0 7854\nIGNhcHR1cmU= 7855\nIGRvdWdo 7856\nIFNhbmQ= 7857\nIHNldQ== 7858\nIE5ld3M= 7859\nIGJpdGU= 7860\nIG5ldXQ= 7861\nd2lkZQ== 7862\nIGxlY3R1cmU= 7863\nIOuYkA== 7864\nIG9yaWdpbmFsbHk= 7865\nIGNob2ljZXM= 7866\nIEdhcg== 7867\nIHZlcnNl 7868\nIGxpdA== 7869\nIDE5Ng== 7870\n7ZWg 7871\nIG1lYXN1cmVz 7872\nw6fDtWVz 7873\nd2F0ZXI= 7874\ncml2ZQ== 7875\nIHppam4= 7876\n7YE= 7877\nIEJ1cw== 7878\nIGhlYg== 7879\n0LXRhQ== 7880\nIEthcg== 7881\nIE7Do28= 7882\nIGtpbGxpbmc= 7883\n4K6q 7884\nIG1pcnJvcg== 7885\nbW9k 7886\nIG1vbA== 7887\nIGNyZWF0aW9u 7888\nIGVzdGlt 7889\nIGF0bW9zcGhlcmU= 7890\nIGdhbQ== 7891\nIHRhYmxlcw== 7892\naXNp 7893\nIExpdHRsZQ== 7894\nIHRhcw== 7895\nIEVsZQ== 7896\nw6ls 7897\nIHNjZW5lcw== 7898\nIHRvbmU= 7899\nIGFmZmVjdGVk 7900\nIEFVREk= 7901\nIEJyb3du 7902\nSWY= 7903\nINmH 7904\nIERhbmllbA== 7905\ncXVlcg== 7906\nY2hp 7907\n7ZWY6w== 7908\nIG1pc3Rha2Vz 7909\nIHNsYQ== 7910\nIGVudHI= 7911\nINC10YHQu9C4 7912\nIHNob3V0 7913\nIHBvcnRpb24= 7914\n0Zc= 7915\nIHByZXZpb3VzbHk= 7916\n4buZ 7917\nINC/0YDQtdC0 7918\n0L7RgdGM 7919\nIGhlYWRz 7920\n544= 7921\n5a0= 7922\nIGdyYXNz 7923\n4Liw 7924\nY3JpYmU= 7925\nIHF1w6k= 7926\nIFNwYW5pc2g= 7927\nIG9mZmVyZWQ= 7928\nINCx0YvQu9C+ 7929\nIENsb3Vk 7930\nIHZlY3Rvcg== 7931\nIEh1aA== 7932\nIGthZA== 7933\naWZ0cw== 7934\nIM69 7935\nIGh1bmdyeQ== 7936\n0KE= 7937\nIHBhcmFsbA== 7938\nQU5E 7939\nIHbDrWRlbw== 7940\naXp6 7941\nIG9jY3Vw 7942\nIO2U 7943\nIHNlZWs= 7944\naGVz 7945\nIGRvb3Jz 7946\nIGhvdXNlcw== 7947\nIGNvbnNpZGVyaW5n 7948\nIGdyYWR1YXRl 7949\nIGZ1bGY= 7950\n6KM= 7951\nIGV4dHJlbWU= 7952\nIGZsb3dlcnM= 7953\naXRhdGU= 7954\nIFByaQ== 7955\nIGZ1bmRhbWVudGFs 7956\n0YfQsNGB 7957\nIHRleHR1cmU= 7958\njZg= 7959\nIEFORA== 7960\n4K6x 7961\nIFRlbQ== 7962\nIG5hZGE= 7963\n7KeE 7964\nIGNlbGVicmF0ZQ== 7965\ndW1z 7966\nIHBpbGw= 7967\nINC40LvQuA== 7968\nZ29pbmc= 7969\nIGhpcA== 7970\nIHN1cHBvcnRlZA== 7971\nIHBlcm1hbg== 7972\nIGFncmVlbWVudA== 7973\nIHR5bQ== 7974\nIOuR 7975\nk6TsnbQ= 7976\nIHB1cmNoYXNl 7977\n7ZQ= 7978\nIFBsYW4= 7979\nZWdlbg== 7980\nIHJlY292ZXI= 7981\nUFU= 7982\nIE1pY3Jvc29mdA== 7983\nZHVj 7984\nIGhvbGVz 7985\nIGRyb3BwZWQ= 7986\nIHBpZw== 7987\nIGVuZGluZw== 7988\nIGF0dGFja3M= 7989\nYmVj 7990\nIHJlbg== 7991\nIHJhcHA= 7992\nIOyasOumrA== 7993\nIHRlcnJvcg== 7994\nINeZ 7995\nIGVkaXQ= 7996\nIGFv 7997\nLjwv 7998\nIDIwMDA= 7999\nIFVuaW9u 8000\nIHNjaWVudGlmaWM= 8001\nIHB1bmNo 8002\nb3J0aW9u 8003\nIHB1dHM= 8004\nIE1vbmRheQ== 8005\nIEplcg== 8006\nRUM= 8007\nIG1hdHJpeA== 8008\nIGluc3RpdHV0aW9ucw== 8009\nIG1vbnQ= 8010\nIGV4aGli 8011\nIHNwZWFrZXI= 8012\nIG1ldGVycw== 8013\nLl0= 8014\nIHNlcnZpbmc= 8015\nIGRhdGFiYXNl 8016\nIExBVQ== 8017\nIGRhbW4= 8018\nIHBvZGVy 8019\nISEhIQ== 8020\nIO2WiA== 8021\nIEFVRElFTkNF 8022\nIGp1bg== 8023\nIEFD 8024\nIEl0YWw= 8025\nc2Vj 8026\nIFlvdW5n 8027\ncnVjaw== 8028\nb3V2ZQ== 8029\n4LiE 8030\n54g= 8031\nIOunjOs= 8032\nYWRpbmc= 8033\ndXJhdGlvbg== 8034\nIFBT 8035\n0Jo= 8036\nIFVuZg== 8037\n6IE= 8038\nb3JpYQ== 8039\nIG1hbmlm 8040\nIHNlbnRlbmNl 8041\nIHNpZ25lZA== 8042\nQlM= 8043\nIHByb29m 8044\nIE11c2xpbQ== 8045\nIG51Y2xlYXI= 8046\nINCz0L7QstC+0YA= 8047\nIHdvbGw= 8048\nIGZhdm91cg== 8049\nIFdI 8050\nIHZ1bG5lcg== 8051\nIGNsb3NlbHk= 8052\nIGluZGV4 8053\n0YLQtdGA 8054\nYWNoZWw= 8055\nIGNhcGFibGU= 8056\nIEJlcw== 8057\nIGNyb2No 8058\nZWt0 8059\nIHNoZWV0 8060\nIHNlZXM= 8061\nIG5hdHVyYWxseQ== 8062\nIEVuZ2xhbmQ= 8063\nIHBhcnRpY2lwYXRl 8064\nIGV4aXN0cw== 8065\nIHNoYXJw 8066\ncHk= 8067\nIGJyZWFrZmFzdA== 8068\nYm93 8069\nIHR3aXN0 8070\n56c= 8071\naW5hdGluZw== 8072\nb3Rp 8073\nIEZvdW5k 8074\nIGRldXg= 8075\nIHNlbGVjdGVk 8076\n7KCE 8077\nb3Npcw== 8078\nIHByZXNlbnRlZA== 8079\nIGxpbmVhcg== 8080\nIOq0 8081\nIGt1bg== 8082\nw7RuZw== 8083\nIGLEmWQ= 8084\nIHRlbXBvcg== 8085\nIGNhYmxl 8086\nINC/0YDQvtGB0YLQvg== 8087\n0LrQtQ== 8088\nINGC0LDQvA== 8089\nIHdpbm5pbmc= 8090\nmOuPhA== 8091\nIDIwMTQ= 8092\nIOyXrOs= 8093\nIFVO 8094\nIENsaWNr 8095\nIHByZXBhcg== 8096\nIFRP 8097\nIHN1YQ== 8098\nIEhhbQ== 8099\nIGzDpA== 8100\nIGFic29sdXRl 8101\nIGVuZ2FnZWQ= 8102\nIEhtbQ== 8103\nIGRhc2g= 8104\nVEE= 8105\nw7Fvcw== 8106\nIHNwbw== 8107\nKV0= 8108\nIHRlc3RlZA== 8109\nIGJsYW5r 8110\nIHJlamVjdA== 8111\nIGFzc2lt 8112\nIHJlYXI= 8113\nIFN0cg== 8114\nIGNyYXNo 8115\nINC90LDRiA== 8116\n0LjRgtGB0Y8= 8117\nIGNvbG9u 8118\nIFVudA== 8119\nIENl 8120\nIGFjaWQ= 8121\n6Zc= 8122\nIGtpdA== 8123\naWJpbGl0aWVz 8124\ndXRv 8125\nIHZhbHVhYmxl 8126\nbGlzdA== 8127\nIHBhcnRpZXM= 8128\nIE1t 8129\nIGNvbG91cg== 8130\nIGNoYW0= 8131\nIHN0ZWVs 8132\nIEltcA== 8133\nIGZ1bmRz 8134\nIEROQQ== 8135\nIEtlbg== 8136\naW5kZQ== 8137\n7ZW07ISc 8138\nIEhhcHB5 8139\nIFVzZQ== 8140\nIExpZ2h0 8141\nIGxpcA== 8142\nIGF1dGhvcml0eQ== 8143\nIExvbmc= 8144\nIElyYW4= 8145\nIGVsbA== 8146\nIGNvb3JkaW4= 8147\nIHN1Ym0= 8148\nIHJlY29yZGVk 8149\n0YPRiA== 8150\nIGRlbHRh 8151\nIHJlZm9ybQ== 8152\nIFN0aWxs 8153\nIG9wcG9u 8154\nIGFsbG93aW5n 8155\nIHBhdHRlcm5z 8156\nIGxldHRpbmc= 8157\nIHNsZWVwaW5n 8158\nT2theQ== 8159\nIHBpenph 8160\nIMWb 8161\nINC00L7Quw== 8162\nIHRhbGVudA== 8163\nZW5zaW9ucw== 8164\nIGVudmlyb25tZW50YWw= 8165\nIHByb2Zlc3Nvcg== 8166\nIHNob3Rz 8167\nIGNvbnRhaW5z 8168\ndWdhcg== 8169\neW8= 8170\nj5k= 8171\nIHNlcXVlbmNl 8172\nzrnOsQ== 8173\nYWRlcg== 8174\n6aA= 8175\n0LDRhw== 8176\n2YbYpw== 8177\nIElr 8178\nIHRvdXM= 8179\ndXJpZXM= 8180\nIHBvdW5kcw== 8181\nIGV4dGVybmFs 8182\naW1lbnRz 8183\nIHZyYWltZW50 8184\n7Iuk 8185\nIGhhcHBpbmVzcw== 8186\nIHByemU= 8187\nZXN0aWM= 8188\nIGVzdGFibGlzaA== 8189\nIEZsb3I= 8190\nIHJpZw== 8191\nIGhvbmV5 8192\nIHB1bA== 8193\nIHN5bXB0b21z 8194\nIGJyb3dz 8195\n0LXQu9C4 8196\nIM+Ezr8= 8197\nIHNoaXJ0 8198\nIFRlY2hu 8199\nIFByb2dyYW0= 8200\n0LXQvNGD 8201\nIHVwc2V0 8202\nIGd1ZXN0 8203\nYnVyZw== 8204\nIHVubGlrZQ== 8205\nIHNvbWV3aGF0 8206\nIGhhbmdpbmc= 8207\nYWU= 8208\nIHJ1bQ== 8209\nIHBob3RvZ3JhcGg= 8210\nIExp 8211\nIHN0YWJsZQ== 8212\nIHZvbHRhZ2U= 8213\nIEVsbA== 8214\nIGVudHJlcHJlbmU= 8215\ndXNlcw== 8216\nYXNzZW4= 8217\nrLg= 8218\nIOunjuydtA== 8219\nIGdob3N0 8220\nIHNhZ2Vu 8221\nIGNvbWJhdA== 8222\nIGfDtnI= 8223\nIENhcA== 8224\nIHPDo28= 8225\nIEthdA== 8226\nIGZvcm1h 8227\nIHN1bW0= 8228\nIG1hcmNo 8229\nIHZhc3Q= 8230\nw7xr 8231\nIGNvbW1pdG1lbnQ= 8232\naW1vcw== 8233\nTGV0 8234\nIGRlZGljYXRlZA== 8235\naXN0ZQ== 8236\nbGF5 8237\nIHRvcGljcw== 8238\nIG1hY2hpbmVz 8239\nIFBhcmlz 8240\nIOydtOufsA== 8241\nIG1pbmk= 8242\nIG1hcmtldHM= 8243\nIGtv 8244\nzrQ= 8245\ndmlsbGU= 8246\nIGdvb2RuZXNz 8247\nIGZyYW1ld29yaw== 8248\ndWx0dXJl 8249\nIGJhc2tldA== 8250\nZXNzYQ== 8251\n0LDRhtC4 8252\ndXN0ZXI= 8253\nIOq5 8254\nIGV4dGVudA== 8255\nIE1lbnNjaGVu 8256\nIGNvbnNpc3RlbnQ= 8257\nIGF1dG8= 8258\ncmlw 8259\nIG1lcmU= 8260\n4K+I 8261\n0ZQ= 8262\nIGVsbGU= 8263\njIDr 8264\nb2tlbg== 8265\nIHB1bGxpbmc= 8266\nIGNvdw== 8267\nb3V0aGVybg== 8268\nIG1lZXRpbmdz 8269\nIGNhZGE= 8270\n0L3Ri9C8 8271\naWVudGU= 8272\nIGJhc3Q= 8273\nYW5pbmc= 8274\nIGZvY3VzaW5n 8275\ncm9hZA== 8276\nIHJvb2Y= 8277\nIFByb2Zlc3Nvcg== 8278\nIFNQ 8279\n0YDQsNC3 8280\nIG5vb2Q= 8281\nIDQwMA== 8282\nIOydtOygnA== 8283\n7J6I 8284\nIE1vdW50 8285\n0LXQudGH0LDRgQ== 8286\nINeQ 8287\nV2h5 8288\n154= 8289\nxLFuZGE= 8290\nIHBvc2l0aW9ucw== 8291\nw6htZQ== 8292\n548= 8293\nINC00YDRg9Cz 8294\naXlvcg== 8295\nIHBhc3Npbmc= 8296\nIGFzc2VtYg== 8297\nIHNtb2tl 8298\nIHRpbA== 8299\nIG11c2V1bQ== 8300\n0JQ= 8301\nIFBlcnNvbg== 8302\n0L3QuNC8 8303\nbGVpY2g= 8304\nIGludGVudA== 8305\nIHNxdWU= 8306\nIGNyYWZ0 8307\n7IiY 8308\nb3JzdW4= 8309\nIDE1MA== 8310\nIGJyb3RoZXJz 8311\ndm9y 8312\nIFNwZWFrZXI= 8313\naWNpYW5z 8314\nIG9mZmljZXI= 8315\nIGnDp2lu 8316\nINGC0LXQsQ== 8317\nIHNjcmF0Y2g= 8318\nIGdlbmVyYXRl 8319\neWk= 8320\nIGVtb3Rpb25z 8321\nYXVz 8322\n7LmY 8323\nNDU= 8324\nIExpbms= 8325\nIFJlYWw= 8326\nIGF0ZQ== 8327\nINC90LDQtA== 8328\nIG5hdGl2ZQ== 8329\n4buH 8330\nxLF5 8331\nIGVub3Jt 8332\nIGJsb2Nrcw== 8333\nIGZhY2Vz 8334\nYWNj 8335\naXZlbmVzcw== 8336\nIGluY2hlcw== 8337\ndWlz 8338\naGVpdA== 8339\nIHN0cmVldHM= 8340\nIHByb2JhYmlsaXR5 8341\nYXNp 8342\nIGltcGw= 8343\nIOCk 8344\ndXJkYXk= 8345\nIGZhdXQ= 8346\nb215 8347\nIHBpcA== 8348\nIGlsbHVzdA== 8349\n4K6v 8350\nIEp1bg== 8351\nIGx5aW5n 8352\nOTk= 8353\nIG1lbW9yaWVz 8354\nIHByYWN0aWNhbA== 8355\naWFuYQ== 8356\nb25jZXM= 8357\nIHZpZXdlcnM= 8358\nIFRob21hcw== 8359\n5ow= 8360\nIEdpcmw= 8361\nIFdoZXRoZXI= 8362\nIGlubm92YXRpb24= 8363\nIGRpc2FwcG9pbnQ= 8364\nTXk= 8365\nIHdpbm5lcg== 8366\nIGln 8367\nIHJhdGlv 8368\nIEJsdWU= 8369\nIFN1Yg== 8370\nIGRvY3VtZW50cw== 8371\nIGZvcm11bGE= 8372\nIOup 8373\n0Yo= 8374\nIGFwcGVhcmVk 8375\ndmFy 8376\nYW5kb24= 8377\nIHNwcmF5 8378\nbWFr 8379\nIFFVRVM= 8380\nS0U= 8381\nIHdlZGRpbmc= 8382\nUmU= 8383\n0LDRgtGM0YHRjw== 8384\nIHVubw== 8385\nIGdhbGw= 8386\n7YSw 8387\nY2lv 8388\nY2Vycw== 8389\nINC80L3QtQ== 8390\nIHBlcHBlcg== 8391\nIEZlYnJ1 8392\nIGFsdGVybmF0aXZl 8393\nIGZ1 8394\nIEJhc2ljYWxseQ== 8395\nIFNtaXRo 8396\nIGdhdGU= 8397\nIFRhbQ== 8398\nIFdoYXRldmVy 8399\nIGFwcHJveGlt 8400\nIGNvbmNlcnQ= 8401\nIGp1aWNl 8402\nIEVzcGVjaWFsbHk= 8403\nIGR5bmFtaWM= 8404\nUXU= 8405\nb25kZXI= 8406\naXZlcnk= 8407\nIGJhbmc= 8408\nIHJ1bA== 8409\nIFBhcnR5 8410\nIHNjaG9sYXJz 8411\nIGNyeWluZw== 8412\nasSF 8413\n0KI= 8414\nIFFVRVNUSU9O 8415\ncmlk 8416\nIGFjY3VyYXRl 8417\nw6dv 8418\nIENvb2w= 8419\nY29pbg== 8420\nIOyDgQ== 8421\nIEZv 8422\nIHByw7M= 8423\nIFJvbWFu 8424\nINCf0YA= 8425\nIGNoZWNraW5n 8426\nPyc= 8427\nIGF0dGFjaGVk 8428\nIElzbGFt 8429\nIGV4cGVydHM= 8430\n16c= 8431\nIENvbnN0 8432\n0YDQsNC9 8433\nIHNoYWRvdw== 8434\nIGRlbGF5 8435\n0JI= 8436\nIG9yaWVudA== 8437\n64I= 8438\nZWxsZW4= 8439\nIGFzw60= 8440\n0LrQuNC5 8441\nIGhpc3RvcmljYWw= 8442\nIHVuY29t 8443\nb21w 8444\naG0= 8445\nIGJpbA== 8446\nIHBsYW5uZWQ= 8447\nIFVuZm9ydHVuYXRlbHk= 8448\nIFdpbmRvd3M= 8449\n2LQ= 8450\nIGVuY291bnRlcg== 8451\nIOyDneqwgQ== 8452\nIHJlZ2FyZGluZw== 8453\nYXJyYXNz 8454\nIHJlY292ZXJ5 8455\nIEh1cg== 8456\nIEVtcA== 8457\nIHPDrQ== 8458\n7ZWY6rKM 8459\nIGRlZmVuZA== 8460\nIGNldA== 8461\nYXNzZQ== 8462\n64uo 8463\nb2tlcw== 8464\nIHJlbW90ZQ== 8465\nINiz 8466\nIGFydHM= 8467\naXNjbw== 8468\nYXVjb3Vw 8469\nIE1leGljbw== 8470\nINC/0L7QvA== 8471\nIGNob3Nlbg== 8472\nZW1hdA== 8473\nb2Rpbmc= 8474\nIGZsb3dlcg== 8475\nc3RhbmRpbmc= 8476\nIEFzc29jaQ== 8477\ndW1teQ== 8478\nSUxM 8479\nIGNhbWVyYXM= 8480\nIEFyYWI= 8481\nIFN1bQ== 8482\nIHRlZ28= 8483\nIGNyaW1pbmFs 8484\naWZvcm0= 8485\nIHN0YWNr 8486\n7ISx 8487\nIERvbmFsZA== 8488\nIE9sZA== 8489\nIGR1c3Q= 8490\nIEpvc2U= 8491\nIGhlbQ== 8492\nIGluY3JlYXNlcw== 8493\nb3N0YQ== 8494\nIGR5aW5n 8495\nIFJpdmVy 8496\nIG1vaXN0 8497\n0YLQvtCy 8498\nYXJlcw== 8499\nIGRpc2NpcGw= 8500\ncmFpdA== 8501\nIEhhcw== 8502\neWdlbg== 8503\nIFRyZQ== 8504\nIOu0 8505\nIGxhbmd1YWdlcw== 8506\nIEhlbg== 8507\nIDM2 8508\nIERpc25leQ== 8509\naW50cw== 8510\nIGFsZ28= 8511\nIGZvb2Rz 8512\nIHNldHVw 8513\nbGFu 8514\nIGVmZmVjdGl2ZWx5 8515\nIHdoZXJldmVy 8516\nIHVudGVy 8517\nZm9ybWF0aW9u 8518\nIGhpdHM= 8519\nIHByaW5jaXBsZQ== 8520\nIHRhc3Rlcw== 8521\np4g= 8522\nIHRyZWF0ZWQ= 8523\nIHJlc29sdXRpb24= 8524\nIHByaXZpbGU= 8525\nIElQ 8526\n67A= 8527\nIHRlcnJpdA== 8528\nIHBvd2Vycw== 8529\nIO2D 8530\nIFZpY3Q= 8531\nIGJvdGhlcg== 8532\nIENoYWly 8533\nIG11c2NsZQ== 8534\nIHNhbGU= 8535\nIGRlY2VudA== 8536\nIGNvdXA= 8537\nIFNxdQ== 8538\nIGNvYXN0 8539\nIHJvZA== 8540\nIEZyYW5j 8541\nIGJhdGhyb29t 8542\nIHNob3BwaW5n 8543\nINC80L7QttC10YI= 8544\nIGnFnw== 8545\nIFN0YXk= 8546\nZ3JhZGU= 8547\nIGZvcm1lZA== 8548\nIGJhxZ8= 8549\nIGJyaWxs 8550\nam91cg== 8551\n7ZY= 8552\nd2ll 8553\naWNhdGU= 8554\nIOKAi+KAiw== 8555\nIE5vcm0= 8556\n4KU= 8557\nIG1haW5seQ== 8558\nIFNwYWNl 8559\nIHRyZW1lbmQ= 8560\naXRp 8561\n4K61 8562\nVVQ= 8563\nTXVzaWM= 8564\nIEZlYnJ1YXJ5 8565\nIGNvbnRyYXN0 8566\nZXN0aW5n 8567\nIM60 8568\naW5naW5n 8569\nINmG 8570\nc3Nlbg== 8571\nIEhvbWU= 8572\nIHNoZWxs 8573\nIEhheQ== 8574\nIGFsbGVy 8575\nIEFw 8576\nIFdlc3Rlcm4= 8577\nIFdvcmQ= 8578\nIFBMQVk= 8579\nIOuF 8580\nIEFxdQ== 8581\nIGVudHJ5 8582\nIGxhdW5jaGVk 8583\nIE1lbQ== 8584\nIFBvdXI= 8585\nIHp3ZQ== 8586\nIFNvbWVvbmU= 8587\naW5nZQ== 8588\nIFByb2I= 8589\nbWJsZQ== 8590\nIFJlbA== 8591\ndXJ1 8592\nIHJoeQ== 8593\nIGdpZw== 8594\nIGVuZ2FnZW1lbnQ= 8595\nw7zFnw== 8596\nIG9mZmVyaW5n 8597\nd2hlbA== 8598\nIGFjdG9y 8599\nQVBQ 8600\nd2VzdA== 8601\nIFJveQ== 8602\nIHJldHVybmVk 8603\nIHNpbHZlcg== 8604\ncmF0aW5n 8605\nIGVzdGFy 8606\nIHNrZQ== 8607\nIHRp 8608\naWNhdGlvbg== 8609\nIGFubm95 8610\nIGRlZXBseQ== 8611\n7Jqp 8612\nIG5hdMO8cmxpY2g= 8613\nRUxM 8614\nIENhdGg= 8615\nIHJhaWw= 8616\n0L3QvtCy 8617\nIHByYXllcg== 8618\nY29s 8619\nR0I= 8620\nINCi0LDQug== 8621\nIGdsYQ== 8622\nIFdhdGVy 8623\n0Y/RgtGM 8624\nIE5vbg== 8625\nw7R0 8626\nYWdlcnM= 8627\nIGh1Zw== 8628\nIGRvY3RvcnM= 8629\nYW5jaW5n 8630\nIFRhbGs= 8631\nemluZw== 8632\nIGhhZG4= 8633\nIGx1aQ== 8634\nIGF0w6k= 8635\nIOq3uOumrOqzoA== 8636\n6rmM7KeA 8637\naWNp 8638\nIGluY29ycG9y 8639\nIERp 8640\nemls 8641\nYW55YQ== 8642\nqoU= 8643\nIMK7 8644\nMzU= 8645\nIGJlZXI= 8646\nIGJlYXVjb3Vw 8647\nIE1D 8648\nIGVhcnM= 8649\nb2dlbg== 8650\nIFF1ZXN0 8651\nZWRh 8652\nIFNhdHVyZGF5 8653\nIGZhbGxz 8654\nc3Rvbg== 8655\nYmxlcw== 8656\nIHRodXM= 8657\nIOuEpA== 8658\n4LmE 8659\nIHRoZXJt 8660\nIGRpdmVyc2l0eQ== 8661\nIHNveQ== 8662\nYXp1 8663\naW1w 8664\nIHRlbGV2aXNpb24= 8665\nINep15w= 8666\nIHd1cg== 8667\nIGVkZ2Vz 8668\nIGxlc3NvbnM= 8669\nIEF1ZA== 8670\ndm9pcg== 8671\nYW1lbnRv 8672\nIGV4cGxhaW5lZA== 8673\nINC+0L3QsA== 8674\nIHRlbXBz 8675\nz44= 8676\nVGhleQ== 8677\nIHN1cnByaXNpbmc= 8678\n0LDQvdC40Y8= 8679\nIERyYWc= 8680\nIENsZQ== 8681\nIG5hbQ== 8682\nINC70Y7QtA== 8683\nIGhhcmR3YXJl 8684\nIHRodW1icw== 8685\nIM66zrHOuQ== 8686\nIFRvcA== 8687\nIMOl 8688\n6Zk= 8689\n15XXqA== 8690\nIOq3uOuemOyEnA== 8691\nIEJ1ZGQ= 8692\ndGhlcm4= 8693\nIGludGVyZXN0cw== 8694\n2LA= 8695\nIGRldmVsb3BlcnM= 8696\nIGhpdHRpbmc= 8697\nIG9wcG9zZWQ= 8698\nIGhlYXJ0cw== 8699\nIEFuZHJvaWQ= 8700\nIEhhbmQ= 8701\nIHJlcHJlc2VudHM= 8702\nZ2xpY2g= 8703\n7Yq4 8704\nIDMy 8705\nIGRvbWlu 8706\nIEFubg== 8707\nIMOpdMOp 8708\nIHpvb20= 8709\nIGt0w7NyZQ== 8710\nIGFkdWx0cw== 8711\nIG9yZGVyZWQ= 8712\nIHBpY2tpbmc= 8713\nIEhvbmc= 8714\nIGZpbG1pbmc= 8715\nIHNlZWQ= 8716\nIEFU 8717\nIGNhbGN1bGF0ZQ== 8718\nINC60L7Qs9C00LA= 8719\nIE9z 8720\naWNpdA== 8721\nIHJlbWFpbmluZw== 8722\nIHNlZ3U= 8723\nw7s= 8724\nIOyYpOuKmA== 8725\nIGFycml2ZQ== 8726\nIGNvbmdy 8727\nIGdyYW5kZQ== 8728\nIGhlYWx0aGNhcmU= 8729\nINC80L7QttC90L4= 8730\nU0E= 8731\nZXN0ZQ== 8732\nIGF3YXJlbmVzcw== 8733\nIHNxdWFyZWQ= 8734\neHR1cmU= 8735\nIEJlaW5n 8736\nIHNvbGRpZXJz 8737\n0YPQsQ== 8738\nIHJldm9sdXRpb24= 8739\nIHRyYWluZWQ= 8740\nZW5kZW4= 8741\n6LA= 8742\nIGRhbmNpbmc= 8743\nIGluc3RhbGxlZA== 8744\ncHJpc2U= 8745\nIHZldGVy 8746\nIG1lbm9z 8747\nbmVsbA== 8748\nIEJyb3RoZXI= 8749\nIG51bg== 8750\nIGltcG9ydGFudGx5 8751\nYWxsZWQ= 8752\naWHFgg== 8753\nYWJsZWQ= 8754\nIFN5c3RlbQ== 8755\nIFZvbA== 8756\nIGVsZA== 8757\nIGVtb3Rpb24= 8758\naWNhbg== 8759\nIEJhbms= 8760\naWtlcw== 8761\nIHZsb2c= 8762\nINCy0L7Qtw== 8763\nIHB1ZWRl 8764\n7Jik 8765\nIHRlZW4= 8766\nIHNldmVyZQ== 8767\nJSw= 8768\nIGNsZWFuaW5n 8769\nesSF 8770\nl5A= 8771\nIFRocm91Z2g= 8772\nIFNldA== 8773\nRVA= 8774\nIj8= 8775\nIE1vdGhlcg== 8776\nIGZpZ3VyZWQ= 8777\nIG11ZA== 8778\nINGW 8779\nIE9mZmljZQ== 8780\nIHJhdw== 8781\nIGRlc3Ryb3llZA== 8782\nZW50YQ== 8783\nIGFnZ3Jlc3M= 8784\nINC+0YE= 8785\nIOuqqOs= 8786\nw6TDpA== 8787\nIEFS 8788\nIGNvcnJlY3RseQ== 8789\nIHN0aXI= 8790\nIGV4dHJhY3Q= 8791\nIHZlaGljbGVz 8792\nIFJ1bg== 8793\nINCy0YDQtdC8 8794\nIHBhcmFsbGVs 8795\nIGxhZw== 8796\nanU= 8797\nIGRhcmU= 8798\nIE1vdA== 8799\nb25v 8800\nIGJlaW5ncw== 8801\nIHN0cm8= 8802\nIGV4Y3VzZQ== 8803\nIGFscGhh 8804\nIGFza3M= 8805\nIHBvY2tldA== 8806\nLi4uPw== 8807\nIGtpdGE= 8808\nw7xt 8809\nIGFwcGVhcmFuY2U= 8810\nb3JkYW4= 8811\nIGluc2VydA== 8812\nINC90LDRhw== 8813\nm2k= 8814\nIHRlbXBv 8815\nIGZhY2lsaXR5 8816\nIHZpc2libGU= 8817\n5ZI= 8818\nIFNjaWVuY2U= 8819\ndXJvcw== 8820\nINmB2Yo= 8821\nIFZhbg== 8822\nIHRlbnNpb24= 8823\nIO2VoA== 8824\nIGRlbGl2ZXJ5 8825\nIHN0aW0= 8826\nIHN1cnZleQ== 8827\nIEdyYQ== 8828\nIGJvbA== 8829\n5qA= 8830\nIHdlaXRlcg== 8831\nw59lbg== 8832\nIHByb2NlZWQ= 8833\nIGltcHJlc3NpdmU= 8834\nIFZvYw== 8835\naW91c2x5 8836\nINC00LA= 8837\naGFsZQ== 8838\nb2No 8839\nIGdsdWU= 8840\ncGhldA== 8841\nY29udA== 8842\nIGZpdHM= 8843\nIGJveGVz 8844\nIGNvbnRyb2xz 8845\nIENoaWxk 8846\nIHNjZW5hcmlv 8847\nIHRyb3A= 8848\nIHByb2Nlc3Npbmc= 8849\nINGC0L7Qu9GM0LrQvg== 8850\nIGJpcmRz 8851\nIENoaWM= 8852\nINC90LDQvw== 8853\nIDIwMTM= 8854\nIG3DvHNzZW4= 8855\nIEphZw== 8856\nIHPEhQ== 8857\nIHBlcmNl 8858\ncmVo 8859\nIEZvcmU= 8860\nIGNvbmZ1c2Vk 8861\nYWlyZQ== 8862\nIGFjY29tcGxpc2g= 8863\nIGNhc2E= 8864\nY2xvY2s= 8865\nIGluZmx1ZW4= 8866\nIFJP 8867\nIGJvbmU= 8868\naWNpYW4= 8869\nIFND 8870\nIHN0cmF0ZWdpZXM= 8871\nZ2g= 8872\n0LTRgw== 8873\nIGl0dQ== 8874\nIHBlcnNvbmFsaXR5 8875\nIGJhcmR6bw== 8876\nIGFjY2VwdGVk 8877\nIHN0b20= 8878\naWV2 8879\nIEhpc3Q= 8880\nIEF1cw== 8881\nIOuwlOs= 8882\nQVRPUg== 8883\nb2ly 8884\nIG1hZ2F6 8885\nIGV4cGxhbg== 8886\nIGNvcm4= 8887\nIGlscw== 8888\nIGNpcmN1aXQ= 8889\nIGdheQ== 8890\naG9w 8891\nIGVxdWl2YWw= 8892\nIGRpZXNlcg== 8893\nZXJ2ZXM= 8894\nY29tZXM= 8895\na2xpY2g= 8896\nIOuVjOs= 8897\nYWJldA== 8898\nIGV4aGE= 8899\nIG1hbm5lcg== 8900\nIOKZquKZqg== 8901\nw6lj 8902\nw6Rs 8903\nIGNvbmZpcm0= 8904\nIGVudGVyZWQ= 8905\nZW1wbG8= 8906\nIEZhcg== 8907\nIG/DuQ== 8908\nZXNzaW9ucw== 8909\nIG51cnM= 8910\nIGVudMOjbw== 8911\nIGFiYW5kb24= 8912\nbGlmZQ== 8913\nIHdpcw== 8914\nTmFycmF0b3I= 8915\nIOyWtA== 8916\nVGhlcmU= 8917\nIFJhbQ== 8918\nYXN0ZQ== 8919\nIGF0dHJpYg== 8920\nIEF5 8921\nIG1lc21v 8922\nIM69zrE= 8923\n6as= 8924\nZW5zZXM= 8925\nIGNyb3A= 8926\nINC30LTQtdGB0Yw= 8927\nIFVudGls 8928\nc3RlaW4= 8929\nIG92ZW4= 8930\nIHN1c3BlY3Q= 8931\naGV0 8932\nIHB1aXM= 8933\nIGNhcnJpZWQ= 8934\nw6ln 8935\nIERldg== 8936\nZW1z 8937\ncmVlbnM= 8938\nYmVycnk= 8939\nIHRlbXBs 8940\nIEJpdA== 8941\nIHZhcmlhYmxlcw== 8942\nIG92ZXJ3aGVs 8943\nzrzOtQ== 8944\nIGluaXRpYWxseQ== 8945\n7JWY 8946\nb3RoaW5n 8947\n0LXRgtGM 8948\nIEhpbGw= 8949\nIGRlcGFydA== 8950\nIG15c3Q= 8951\nYXp6 8952\nIGZsdWlk 8953\nIERD 8954\nIGNsaW5pY2Fs 8955\nIFJ5YW4= 8956\nIEZsb3JpZGE= 8957\nIFRhaw== 8958\nIGFueGlldHk= 8959\nYnJv 8960\nIGNpcmN1bXN0YW5jZXM= 8961\nINmD 8962\nIGV4aXN0ZW5jZQ== 8963\nIHRvbmc= 8964\nIDIwMTI= 8965\nIFNlY3JldGFyeQ== 8966\nIHNwaWN5 8967\nIFso 8968\nIFdpdGhvdXQ= 8969\nIGZhY3Rz 8970\nIHRvbnM= 8971\nQXBw 8972\nIFN0YW5k 8973\nIGxpZXM= 8974\nIEFE 8975\nd2lu 8976\nz4TOtQ== 8977\nYXBwbGF1c2U= 8978\nSVA= 8979\nc3Rh 8980\nIFN1cA== 8981\ncGhvbmVz 8982\nnpE= 8983\ncGll 8984\nIFBvdA== 8985\nIE5P 8986\nINee 8987\nINCU0LA= 8988\naWNhcw== 8989\nIEly 8990\nIHB1c2hlZA== 8991\nIHVuY2xl 8992\nINmF2YY= 8993\nIGxvbg== 8994\nIHByaW5jaXBsZXM= 8995\nIEludGVybmF0aW9uYWw= 8996\nIMOW 8997\nxb4= 8998\nIHNheWE= 8999\nIOqzoA== 9000\nIHJpYg== 9001\nIHBhc3Rl 9002\nIHdhcm5pbmc= 9003\nIG11c2ljYWw= 9004\nIGFncmVlZA== 9005\n0L7RgNC8 9006\nIGdhcmxpYw== 9007\nIG94eWdlbg== 9008\n7JiI 9009\nQWw= 9010\nIOunng== 9011\nZWxpbmVz 9012\nTEFVU0U= 9013\nZ3lwdA== 9014\nR0U= 9015\nY2tlcg== 9016\ndHU= 9017\nIHNoZWw= 9018\nIHN0YXllZA== 9019\nINCz0L7QtA== 9020\nIGxhcHQ= 9021\nIE1hcnRpbg== 9022\nIGludml0ZWQ= 9023\nIGNvbmZpcg== 9024\nIGVtYmFycmFzcw== 9025\nYWNpb25lcw== 9026\nIENhbXA= 9027\nIGhvbGRz 9028\nYXh5 9029\nIGRpdmU= 9030\ndWNrbGVz 9031\nIGJvb3N0 9032\nIHfDvHI= 9033\nc3RhbA== 9034\nINGA0LDQsdC+0YI= 9035\nIGTDqWM= 9036\nIG9mZmljZXJz 9037\nIOyVhOs= 9038\nb2xvZ2lzdA== 9039\n157X 9040\nIHNlZWRz 9041\nIGJ1ZmY= 9042\nIHVwZGF0ZXM= 9043\nZGVk 9044\nIGZyaWVuZGx5 9045\nIGNvdW5jaWw= 9046\nIFByb2JhYmx5 9047\nIHBpYW5v 9048\nIHJlZHVjZWQ= 9049\nz4TOsQ== 9050\nIGF1dGhlbnQ= 9051\nIGV4cGxvcw== 9052\ncGFzcw== 9053\nIEhpdA== 9054\nanVk 9055\nIE5hdg== 9056\nb21p 9057\nIGNvbW1pc3Npb24= 9058\nIGd5bQ== 9059\n0J8= 9060\nIHBvbg== 9061\n0YDQvtGB 9062\nIGludGVyZmFjZQ== 9063\nIHN0cnVjdHVyZXM= 9064\nIEplbg== 9065\nIHlvaw== 9066\nIG1ldQ== 9067\n7KeA66eM 9068\nbmVk 9069\nIFdpZQ== 9070\nIGlkZW50aWZpZWQ= 9071\nIGNoYW5uZWxz 9072\nxLFuYQ== 9073\nIHBoaWxvc29w 9074\na2VpdA== 9075\nIGJpdHM= 9076\nZW50ZXM= 9077\nIGZyYWc= 9078\nIEtpbmQ= 9079\nIGRvY2g= 9080\nIHNuZQ== 9081\naW5kaW5n 9082\nIEpld2lzaA== 9083\n0L7RgNC+0Yg= 9084\nIGZ1ZQ== 9085\nIO2P 9086\nIG3EsQ== 9087\nIGtlaW5l 9088\nIGxvY2F0aW9ucw== 9089\nIG1ldGVy 9090\nIGJlZWY= 9091\nIG1hbmlw 9092\nIHNvbm8= 9093\nenpsZQ== 9094\n57Y= 9095\nIHBlcw== 9096\nIGhvcnJpYmxl 9097\nIFNu 9098\nIGZhY3Rvcnk= 9099\nIGZpZnRo 9100\nIGNvb2tlZA== 9101\nIG1vb2Q= 9102\nIHZlbG9jaXR5 9103\nIG9ibGln 9104\nIGNvbm5lY3Rpb25z 9105\nxJ9pbQ== 9106\nIOqztQ== 9107\nIGRvbWFpbg== 9108\nIGFwcGx5aW5n 9109\nIHJpZGlj 9110\nIGNlbA== 9111\nIGNoaWxkaG9vZA== 9112\nIFRlc3Q= 9113\ncmF0dWxhdGlvbnM= 9114\nIFZpcmdpbg== 9115\nIENFTw== 9116\nINC/0Ls= 9117\nIGFsZ29yaXRobQ== 9118\nIGludGVyYWN0aW9u 9119\nYWdh 9120\nIGtpZGRpbmc= 9121\nIHRvbWF0bw== 9122\nIGNvbnRpbnVpbmc= 9123\nbGFk 9124\nc3RyZWFt 9125\n0L7QttC1 9126\nIOyYgQ== 9127\n0LXQu9C+0LI= 9128\nQkE= 9129\nIG5hcA== 9130\nIE5vYm9keQ== 9131\nIHRodW1i 9132\nIE9O 9133\nIHJ1c2g= 9134\nRFI= 9135\nIHN0cmlrZQ== 9136\nIGV2b2x1dGlvbg== 9137\naWNoZQ== 9138\nIOy7 9139\nIOq3uOufsA== 9140\n2KfYqg== 9141\nIGFr 9142\nIHdpbmRvd3M= 9143\nIGV4Y2Vzcw== 9144\nIGNvbmNsdWQ= 9145\nIGVwaXNvZGVz 9146\nIHN0cnVnZ2xpbmc= 9147\nIERhdA== 9148\nnbzr 9149\nIGtleXM= 9150\nIGtsZQ== 9151\nIHZlZ2V0YWJsZXM= 9152\neXN0ZW0= 9153\nw6puY2lh 9154\ncmljaw== 9155\nIHJldmVudWU= 9156\nIEhhdw== 9157\nIGxhbg== 9158\nYW50ZXM= 9159\naW5peg== 9160\n0LjRgdGC 9161\nIHN1cA== 9162\nqbTshJw= 9163\nIG1vbWVudG8= 9164\naXN0bw== 9165\nIEVyaWM= 9166\naW9ycw== 9167\nYmFq 9168\nIGludHJvZHVjdGlvbg== 9169\naXJ0eQ== 9170\nIGRlY2s= 9171\ncmVhbA== 9172\nIE1hcmlv 9173\nIGxvdmluZw== 9174\n4LiU 9175\nIHN1cHBvcnRz 9176\n0LjRh9C10YE= 9177\nIGluY2lkZW50 9178\ndXRjaA== 9179\ndXY= 9180\nIGJvb20= 9181\n0LXRgNGM 9182\nINC90YPQtg== 9183\nIGNvbWJpbmVk 9184\nIExpbg== 9185\nMjM= 9186\nb3JhdGlvbg== 9187\nbnRl 9188\nIHNvcg== 9189\nIGRpcnR5 9190\naWZlcg== 9191\nIEFQSQ== 9192\nIGNvbGxhYm9yYXRpb24= 9193\naWFibGU= 9194\nIHByaW9yaXR5 9195\nIEFsZQ== 9196\nIFByaW4= 9197\nIEV4Yw== 9198\nIHZhaXM= 9199\nIGdyYW4= 9200\nIHN0b29k 9201\nIHJlY3J1 9202\nIE11cg== 9203\nZXNpcw== 9204\nYXNw 9205\nIGxvY2tlZA== 9206\nIFBlcm8= 9207\nIEhhcnJ5 9208\nIHR1ZG8= 9209\nIFRlbg== 9210\n2LU= 9211\nZm9yY2VtZW50 9212\nKSk= 9213\nb2xp 9214\nIOyduA== 9215\nIHN1cHBs 9216\nIGNyb2NoZXQ= 9217\nIHBoZW5vbWVu 9218\nbG9z 9219\nYXRoYW4= 9220\nIFN1cHA= 9221\nIGVtYnI= 9222\nIGJlaw== 9223\nIFplaXQ= 9224\nZ2VuZA== 9225\nIHJvb21z 9226\nqr0= 9227\nVkVS 9228\nbnljaA== 9229\nIGRvbnQ= 9230\nIGNhYmlu 9231\nIGFjY291bnRz 9232\nIEVhc3Rlcg== 9233\n15XXnA== 9234\nIGZhY2lsaXRpZXM= 9235\nYmVpdA== 9236\nIGxpbmtlZA== 9237\nIEdlcg== 9238\nIHByb2dyYW1taW5n 9239\nb3RpYw== 9240\nIGRyYW1h 9241\nIDI5 9242\nIO2B 9243\nIGluc3RydWN0aW9ucw== 9244\nIGltcG9ydGFudGU= 9245\nIHdhdmVz 9246\nIGFpZA== 9247\nQ0s= 9248\n6rKg7Iq164uI64uk 9249\nIE1pcg== 9250\nIHRpZA== 9251\nIEhvdA== 9252\nIGFycmFuZ2U= 9253\nIEJhYnk= 9254\nIHRhY2s= 9255\nINGJ 9256\n7Z0= 9257\nIHZlcnRpY2Fs 9258\nIGhlZWw= 9259\nIEN1dA== 9260\nIG5hcnJvdw== 9261\nIEFyaQ== 9262\nIGtuZWU= 9263\nIEJyYXppbA== 9264\nIEZpdmU= 9265\nIHBvc3RlZA== 9266\nVUQ= 9267\nIHJvbGxpbmc= 9268\nzrg= 9269\nIGNsYWltcw== 9270\nIElucw== 9271\nT0s= 9272\ndWlu 9273\nIEluc3RpdHV0ZQ== 9274\nIGludGVuc2U= 9275\naWFy 9276\nIE5pY2s= 9277\nIHNlbGVjdGlvbg== 9278\nIGxlZ2VuZA== 9279\nIHVuaWZvcm0= 9280\nw7pu 9281\nIHN0dWRpZWQ= 9282\nINCl 9283\nIOyVjA== 9284\nZ2Vycw== 9285\nIGRvdw== 9286\nIENT 9287\nIGFnZW50 9288\nIEF1Zg== 9289\nIGpvZw== 9290\nIGFpcmNyYWZ0 9291\n64uY 9292\nIHZpdA== 9293\ndWxz 9294\nIHNlZ21lbnQ= 9295\nIG9yZGVycw== 9296\nIENsYXNz 9297\nIGFwb2xvZw== 9298\nIHBsYXRmb3Jtcw== 9299\nIG15dGg= 9300\n0LDQttC1 9301\nIEJvb2s= 9302\nIHNlbnNpdGl2ZQ== 9303\nINC/0L7Qu9GD0Yc= 9304\nIGRhbWl0 9305\nIENhcHQ= 9306\nc29sZQ== 9307\nIGFyY2hpdGVjdHVyZQ== 9308\nIFdpbA== 9309\nIGluaGVy 9310\nY2Fw 9311\nIEJveQ== 9312\nIGJ1cm5pbmc= 9313\nIFB1YmxpYw== 9314\nIGJlaGFsZg== 9315\nIOychA== 9316\nIHRoZXJhcHk= 9317\ndWJzY3JpYmU= 9318\nIGludm9sdmU= 9319\nIGV4cG9zZWQ= 9320\nacWf 9321\nw6p0cmU= 9322\nIHRvaWw= 9323\nIHNpbms= 9324\ncGly 9325\n5YM= 9326\nSUk= 9327\nIGFnZW5jaWVz 9328\nIHE= 9329\nIERvd24= 9330\nYXVm 9331\nIOunmw== 9332\nIHByb2M= 9333\nb2tlZA== 9334\nIHN0b3Jlcw== 9335\ncG93ZXI= 9336\nIFRoaW5ncw== 9337\nIGFjY2Vzc2libGU= 9338\nIHRlxbw= 9339\nIEVkdWM= 9340\nIHNwZWFrZXJz 9341\nIFNhcmFo 9342\nlJQ= 9343\nIGRpdmVyc2U= 9344\n7J6W 9345\nIFVsdA== 9346\nw6B5 9347\nIENoaWNhZ28= 9348\nU2hl 9349\nYXRoeQ== 9350\nIGVuYWJsZQ== 9351\nIHRyYWRpbmc= 9352\nIG11c2NsZXM= 9353\n5ps= 9354\nIENhcmU= 9355\nIFVy 9356\nIFNjb3Q= 9357\nIHBocmFzZQ== 9358\nRU5U 9359\nIOqyvQ== 9360\nIEphYw== 9361\ncGFjaw== 9362\nIGRldGVybWluZWQ= 9363\nw7xuZA== 9364\nIG5lZ290aQ== 9365\nIHZpZMOp 9366\nIHJveg== 9367\nIFN1cw== 9368\nIHJpZGluZw== 9369\naG1lbg== 9370\nIERlZg== 9371\nIENyZQ== 9372\nIFdhbGw= 9373\naWdhbg== 9374\nIHNlbXByZQ== 9375\n0ZbQtA== 9376\nIGRyaXZlbg== 9377\nIGZvb3RhZ2U= 9378\nIGZvbmQ= 9379\nIFdheQ== 9380\nw6Rt 9381\nIE9iYW1h 9382\nIFNlcnZpY2U= 9383\nIDc1 9384\nIERhcms= 9385\nIOq3vOs= 9386\nIENhdA== 9387\n2Lc= 9388\n6Yw= 9389\nIGp1Zw== 9390\nIGV0d2Fz 9391\nIGJyZWF0aGluZw== 9392\n4buD 9393\nIFdlYg== 9394\nIGZvaXM= 9395\nIGxpZ2h0aW5n 9396\nIERB 9397\nIG9ic3Q= 9398\nIGxldXI= 9399\nIEVneXB0 9400\nIEFybXk= 9401\naWNpZGU= 9402\n0LDRgtC4 9403\nIOuLpOs= 9404\nIGFwYXJ0bWVudA== 9405\nIGNoaWVm 9406\nIFdlZA== 9407\nIG5ldHdvcmtz 9408\nIGJhdHQ= 9409\n5rg= 9410\nIEx1Yw== 9411\nIG5pY2VseQ== 9412\nIHZlcmI= 9413\n4Li0 9414\n7LY= 9415\nb3NpdA== 9416\nIHJldmVhbGVk 9417\nIHRhdA== 9418\nIHRpZWQ= 9419\n4buB 9420\nIGFuaW1hdGlvbg== 9421\nIHJvbGVz 9422\n7Iqk7Q== 9423\nIHZlcnNpb25z 9424\n0YfQuNGC 9425\nIHRhc2tz 9426\nr7w= 9427\nIHJlc2M= 9428\nc2hl 9429\nIGxvb3Nl 9430\nIGPhuw== 9431\nIGNvaXNh 9432\nIGFsZXJ0 9433\nIG5pbg== 9434\nIFNBTQ== 9435\nIHRyYWJhag== 9436\naXJ1cw== 9437\nVEg= 9438\nxqE= 9439\nb2dldGhlcg== 9440\nIFRhaQ== 9441\nIGZpZ3VyZXM= 9442\nINeQ16o= 9443\nIGNyZWVw 9444\nIGludmVzdGlnYXRpb24= 9445\nIHJlY29tbWVuZGVk 9446\nIEFr 9447\nIHJlc2lkZW50cw== 9448\n0YHRgtCy0L4= 9449\nc2VjdA== 9450\n0LDQvdC40LU= 9451\nIG1pbmRz 9452\ndWluZw== 9453\n5bE= 9454\nb3dpbmc= 9455\nIG5vZw== 9456\nIHJheg== 9457\n2KfYsQ== 9458\nIHF1b3Q= 9459\nINC40YU= 9460\nIHNlZA== 9461\nIGFwcGxhdWQ= 9462\nIGNvdmVyYWdl 9463\ndm9s 9464\nIFJlYw== 9465\nxJs= 9466\nINCy0YHRkQ== 9467\nIGV4cGVjdGluZw== 9468\nIG9wZXJhdGU= 9469\nIGNvbnZlcg== 9470\nIFN1Y2g= 9471\nIFJhZA== 9472\nIFByaW1l 9473\nIHB1cnBsZQ== 9474\nIDIwMTA= 9475\nIOyViOs= 9476\nIGV4ZW0= 9477\nIGNvbXBhcmlzb24= 9478\nIGxhbmRzY2FwZQ== 9479\nIG5laXRoZXI= 9480\nIEVo 9481\n64U= 9482\nIHN0b21hY2g= 9483\nIGNhc28= 9484\nw6Ju 9485\nIHBlcmNlbnRhZ2U= 9486\nd2ljaA== 9487\naXRhbg== 9488\nIGts 9489\nIGV4cGFucw== 9490\nINin2YTZhQ== 9491\nIG9jY2FzaW9u 9492\ncmV0cw== 9493\naWduaW5n 9494\nIGtpbG9tZXQ= 9495\nIGd1c3Q= 9496\nY3pl 9497\nIHVyYmFu 9498\nIGFncmlj 9499\nIGFzc2lzdGFuY2U= 9500\nIHN1cmY= 9501\naW1ldGVy 9502\nIHBldGl0 9503\nIGFzc2Vzc21lbnQ= 9504\nIG1hbnVhbA== 9505\nIGltcHJvdmVk 9506\nYnN0 9507\nIHBpbG90 9508\nIE1hcnM= 9509\nIHZpZWxl 9510\nIENvbmdyYXR1bGF0aW9ucw== 9511\nIGFyZ3Vl 9512\nIHdpcmtsaWNo 9513\nIGNsaWNraW5n 9514\nUklT 9515\nIGxvZ28= 9516\nIG91dGNvbWU= 9517\nIENlbnRyYWw= 9518\nIEpp 9519\nIGdhbWluZw== 9520\nIGNvbnNlcnY= 9521\nIHVsdGltYXRl 9522\nIFZl 9523\nIFdhbA== 9524\nYXJv 9525\nc3Rhcg== 9526\nIGNvbnN1bWVy 9527\nIHRyYXZlbGluZw== 9528\naW1lcg== 9529\nIDEwMDA= 9530\n0L3QuNC6 9531\nIHByaW5jaXBhbA== 9532\nIHNha2U= 9533\n0ZbQsg== 9534\nIG1vdXNl 9535\nYXJpb3M= 9536\nIHJlbGF0aW9u 9537\nIG1vcmFs 9538\nIHRoZXRh 9539\nd3k= 9540\nIGthbQ== 9541\nIGVpZw== 9542\nIGdvbGRlbg== 9543\n16Q= 9544\nIGFtcGw= 9545\nIHZ1 9546\nc3Ry 9547\ncm9ycw== 9548\nIHdoZXJlYXM= 9549\naXphcg== 9550\nIGFkbWluaXN0cg== 9551\nIG7Ds3M= 9552\nIFByZXQ= 9553\nIEFjYWQ= 9554\nYW5naW5n 9555\nYmFnZQ== 9556\nw6l0YWl0 9557\ndXJp 9558\nIGhlYWxpbmc= 9559\nIHRpcG8= 9560\nIG1hcnJ5 9561\n0YPQsg== 9562\nIGVzdGF0ZQ== 9563\ndXU= 9564\n7JQ= 9565\nIEJlc3Q= 9566\nIHN1ZmZlcg== 9567\nIDE5NA== 9568\nIGJhY3Rlcg== 9569\nINCS0L7Rgg== 9570\nIE9t 9571\nIGR6 9572\n6LY= 9573\n7KY= 9574\nIG9sZHU= 9575\nIHBoeXNpY2FsbHk= 9576\nIExvdWlz 9577\nZXRpbWU= 9578\nY2FzZQ== 9579\nIHBpZXI= 9580\n7KCc 9581\ndmFu 9582\nIGFzc2V0cw== 9583\nIOuB 9584\ndmV0 9585\n0LjQsQ== 9586\nIHByb21vdGU= 9587\nIGNvbmdyYXQ= 9588\ndWVzZGF5 9589\nIGR1dHk= 9590\nIFZpZGVv 9591\n2K4= 9592\nIEpvaG5zb24= 9593\na3Rpb24= 9594\nIFZvY8Oq 9595\n44CL 9596\nIGFp 9597\nIGFubnVhbA== 9598\nIEpvc2g= 9599\naXR0ZQ== 9600\nIEpP 9601\nIHNsaWRlcw== 9602\nIGFuYw== 9603\nuYQ= 9604\ndGVlbg== 9605\nIGNhcnJ5aW5n 9606\nbHltcA== 9607\nZWRpbmc= 9608\nIGZybw== 9609\nIGFkbWl0 9610\ncmVy 9611\nIG9mZmljaWFscw== 9612\ncHRpb25z 9613\nZ2Fs 9614\nIGhldXRl 9615\nIHZvaWNlcw== 9616\nIGJhbGxz 9617\nIGd1ZXN0cw== 9618\nYW5uZXI= 9619\n44CK 9620\naXNoZXI= 9621\nIE1S 9622\nIFJpY2hhcmQ= 9623\nIHJvdWdobHk= 9624\nbMSx 9625\nIHZpY3Rvcnk= 9626\nIGFsZ3Vu 9627\nIE1ycw== 9628\nxZtjaWU= 9629\nIFVr 9630\nIGV5 9631\nIFdhcnM= 9632\nIGJyYW5jaA== 9633\nYXN0eQ== 9634\nIFByaW5jZQ== 9635\n0LXQutGC 9636\nIHJlY29nbml6ZWQ= 9637\nIG11Y2hv 9638\nIExlYXZl 9639\nY29ubmVjdA== 9640\nIHNwZWxs 9641\nIHRvdWNoZWQ= 9642\nIGFnZW5kYQ== 9643\n6L4= 9644\nYXJpYQ== 9645\nIEtvbmc= 9646\nb2dh 9647\nIHBhcmFtZXRlcnM= 9648\n64uk6w== 9649\nIGluc3RhbnQ= 9650\nIHJlZ3Vs 9651\nQ29u 9652\nIGVkaXRvcg== 9653\nIERpc3Q= 9654\nIHVua25vd24= 9655\nIHB1bmlzaA== 9656\nIGV4cGVjdGF0aW9ucw== 9657\nIGNyeXB0 9658\nIGRpdmlkZQ== 9659\nYWtlbg== 9660\nIE1lc3M= 9661\nIGh5cGVy 9662\nIFByb2plY3Q= 9663\naWtp 9664\nIGFnb3Jh 9665\nIGFidXNl 9666\nIGNhdXNpbmc= 9667\nIGNvbnZpbg== 9668\nIExB 9669\nIGNvbmNlbnRyYXRpb24= 9670\nIGJyZWFrcw== 9671\ndXJlcg== 9672\nIGNvbmNyZXRl 9673\nIGZvcm1hbA== 9674\nIGJldGE= 9675\naXRvcnM= 9676\nIENoYW1w 9677\nIGhlYWRpbmc= 9678\nIEJsbw== 9679\nIHByZW5k 9680\nIFNlbmF0ZQ== 9681\nIGFkdmVudHVyZQ== 9682\nb3Nv 9683\nIG9wZW5z 9684\nIFBMQVlJTkc= 9685\nIFNV 9686\ndXJlbg== 9687\naWt0 9688\nINC70Y7QsQ== 9689\nIEZvbGxvdw== 9690\nIEJpZGVu 9691\nZWxu 9692\nIFNreQ== 9693\nZXRpbmc= 9694\nIEV4dA== 9695\n0L3Rg9GO 9696\nIOyZnA== 9697\nIHNocg== 9698\nZWxsYQ== 9699\nIERpdg== 9700\nIHRyYW5zZm9ybWF0aW9u 9701\nIGhvdXNlaG9sZA== 9702\nZXRyeQ== 9703\n6KE= 9704\nIERlc3A= 9705\nIGNvdXJhZ2U= 9706\nIHBhcmtpbmc= 9707\nIGV0dMOk 9708\nY2Fs 9709\nbHlu 9710\nIGxhaWQ= 9711\nIHRyaWVz 9712\naXJ0cw== 9713\naWdh 9714\nIHJlY2FsbA== 9715\naWZpZXI= 9716\nz4HOsQ== 9717\nIGFhbg== 9718\nIGJ1dHRvbnM= 9719\nIHJlYWNoaW5n 9720\nIOq3vOuNsA== 9721\nIHNwYXJr 9722\nIFNvY2lhbA== 9723\nINC10YnQtQ== 9724\nIGNhbmFs 9725\nIGNyaXRlcg== 9726\nIGt0w7NyeQ== 9727\nIHRlbmVtb3M= 9728\ngqw= 9729\nINC90LXRgg== 9730\nIHR1YmU= 9731\nYWNsZXM= 9732\n0LjRiA== 9733\nIGRlxJ9pbA== 9734\nIHN0YW1w 9735\nIGluZmw= 9736\nIGFob3Jh 9737\nIHRyYWls 9738\nIG1peHR1cmU= 9739\nIFJvbGw= 9740\nIHJvdXRpbmU= 9741\nIGNvdW50eQ== 9742\nIGVuam95aW5n 9743\n0L3QvtGB0YLRjA== 9744\nZXJlcw== 9745\nIHB1cnBvc2Vz 9746\nIFNhbnRh 9747\nIGJyZWFzdA== 9748\nw6RuZw== 9749\nIHdyaXRlcg== 9750\n5Yw= 9751\n0YDQvg== 9752\nIG5lbQ== 9753\naWNvcw== 9754\n0LDRgdGC 9755\nIGRldGFpbGVk 9756\nIHJldmVyc2U= 9757\nIFJlYWR5 9758\nIGRpc3RyYWN0 9759\nIEFsb3Jz 9760\ndXR0ZXI= 9761\nIGRlc2VydmU= 9762\nIFJvbg== 9763\n0L3QvtC8 9764\nIG9ic2Vydg== 9765\nIGxvZ2lj 9766\nIFB5 9767\nIEtldmlu 9768\npbQ= 9769\n2YrZhg== 9770\nIHNrYQ== 9771\nIHRhY3Q= 9772\nIGhvbGlkYXk= 9773\nIGJ1bXA= 9774\nINC80L7Qsw== 9775\nIGRlaXg= 9776\n7YU= 9777\nIHdvcnNoaXA= 9778\nQ2w= 9779\nIHN1Y2s= 9780\nINGB0LXQsQ== 9781\nIGFwcGxhdXNl 9782\nIEVw 9783\nINC80L4= 9784\nIHBhdGNo 9785\n4bqt 9786\nIGxhZGllcw== 9787\nIGJyb2FkY2FzdA== 9788\nIGlsbGVn 9789\nIG5hcnJhdGl2ZQ== 9790\nb3NzYQ== 9791\nQVJSQVRPUg== 9792\nIHNhbmc= 9793\nIG1vdmVtZW50cw== 9794\nIHBhcnRuZXJzaGlw 9795\nIG9yZ2FuaXplZA== 9796\nIG5vZGU= 9797\nZXN0eWxl 9798\nIE1lZw== 9799\nIGluZHVzdHJpYWw= 9800\nIGdvbA== 9801\nIGJvcmluZw== 9802\nIGN1dHM= 9803\nIHJlY29u 9804\nYXNh 9805\nIGltcHJlc3Npb24= 9806\n7Jq0 9807\nZ2ll 9808\nTUE= 9809\nhrU= 9810\nIGVkaXRpbmc= 9811\ncm9udA== 9812\nIGZvbGxvd3M= 9813\nIEl0YWxpYW4= 9814\n0YDQvtC0 9815\nIOqwmeydgA== 9816\nIOuwqQ== 9817\nIHBhcnRpY2xlcw== 9818\nIEJvYXJk 9819\n15nXqg== 9820\nanVu 9821\ncm9uaWM= 9822\nIGVq 9823\nIM+Ezrc= 9824\n15XXkw== 9825\nY2lvbg== 9826\naXR0eQ== 9827\nIFR1ZXNkYXk= 9828\ndW1lcw== 9829\nIFByb3Q= 9830\nZWRlcg== 9831\nIHBlc3NvYXM= 9832\nINC90L7Qsg== 9833\nIHNraXA= 9834\nIG9iamVjdGl2ZQ== 9835\nw61hcw== 9836\nIGRlc2s= 9837\nIExvb2tz 9838\ndW5kZW4= 9839\nIHByaW1hcmlseQ== 9840\naW1lbnRv 9841\nIHJlcG9ydGluZw== 9842\nIGhhY2U= 9843\nIGNoZWNrZWQ= 9844\n6Zg= 9845\nIOuztOs= 9846\nIHNtZWxscw== 9847\nIGFjdG9ycw== 9848\nIEFzaWE= 9849\naWzDoA== 9850\nIHJlY2VpdmluZw== 9851\nIHRheGVz 9852\nIGdyYWNl 9853\nIGNvbXBldGl0aXZl 9854\nIGRpdmlzaW9u 9855\nIGVzcGVy 9856\nIHdoZWVscw== 9857\nIGtvbW10 9858\nIHRyZW1lbmRvdXM= 9859\nIGVzcGU= 9860\nLi4uKQ== 9861\nIOyehQ== 9862\nIGxpc3RlZA== 9863\nw6RsbA== 9864\nIHVudXM= 9865\nIEhvbGx5 9866\nIGd1aWRhbmNl 9867\nIGN1Yg== 9868\nIGludGVsbGVjdA== 9869\nINCx0YvQuw== 9870\nIHJlZ2FyZGxlc3M= 9871\nIFN0YW4= 9872\nIGNvbmNsdXNpb24= 9873\nYWNhxJ8= 9874\nIGxvbA== 9875\nIEJhdA== 9876\nIG1hbmlmZXN0 9877\nIENoaWVm 9878\nIHNoYW1l 9879\nIG91dGNvbWVz 9880\nIG1haWw= 9881\nIGt1cg== 9882\nzrnOug== 9883\nZXR6 9884\nIHByZXBhcmluZw== 9885\nMjc= 9886\nIFF1ZWVu 9887\n4K6z 9888\nIOu5hA== 9889\nIHRpc3M= 9890\nIGNvbnNjaW91c25lc3M= 9891\nIHBhbnRz 9892\nIG1lbHQ= 9893\ndWNodA== 9894\naW5o 9895\n7JuM 9896\nIHZvdHJl 9897\nIG1vZHVsZQ== 9898\nb3d5 9899\nIG1vbnN0ZXI= 9900\nIOuG 9901\nIGVsZWN0cm9uaWM= 9902\nIGNlbnRyZQ== 9903\nIHN0b3Bz 9904\nIHRvdQ== 9905\nIOut 9906\nIGxhbWI= 9907\nIGNvbnNlcXVlbmNlcw== 9908\nIHN0cmF3 9909\nIGltcGVy 9910\nIGV4dGVuZA== 9911\nIGFuc3dlcmVk 9912\nIE1haA== 9913\nIExBVVJB 9914\naWZ0aW5n 9915\ndWF0ZQ== 9916\nIFVTQg== 9917\nIEFuZHJldw== 9918\nIEZyZWQ= 9919\nIERF 9920\nIEdlb3Jn 9921\n57s= 9922\nw6xuaA== 9923\nIGRyYXdu 9924\nIGxpcHM= 9925\nYmly 9926\nIG1heW9y 9927\naW1p 9928\nIGVuY29yZQ== 9929\nZm9ydGFibGU= 9930\ndXJzZGF5 9931\nIEZvcm0= 9932\nIGJsYW1l 9933\nIHNob3dlcg== 9934\nIGNvbnRhaW5lcg== 9935\nc3RlcnM= 9936\ndWRlcw== 9937\nIFRheQ== 9938\n4Lil 9939\nIOyYiA== 9940\nIHZvbQ== 9941\nIGJhc3M= 9942\nIExhYg== 9943\naXNzYQ== 9944\nIGRpbWVuc2lvbg== 9945\nIGV4ZWN1dGl2ZQ== 9946\nIFJvbQ== 9947\n6rKM7JqU 9948\nIERvY3Rvcg== 9949\nIGRlbGl2ZXJlZA== 9950\nIGdhbmc= 9951\nIGNlcg== 9952\nIHBpdA== 9953\nZWxp 9954\nIGV4dHJhb3Jk 9955\namFy 9956\nIGRlcml2 9957\nIGlsbG5lc3M= 9958\nIGd1bnM= 9959\nIDIwMTE= 9960\nIGFpcnBvcnQ= 9961\n0JU= 9962\nIGF0dGl0dWRl 9963\nIGdyYXQ= 9964\nIFdy 9965\nIE5BUlJBVE9S 9966\nIOyalA== 9967\nIHJlbmV3 9968\nIGNvc2E= 9969\nIGNvbnRyb2xsZWQ= 9970\nb21teQ== 9971\nb25kcw== 9972\nIGVzZQ== 9973\nw6RjaA== 9974\nIHZlbmQ= 9975\nZGFt 9976\nIGFyZ3U= 9977\nIGFjY2VsZXI= 9978\nIG5haWw= 9979\naWVuZQ== 9980\n7IOd 9981\nIGVuY29udA== 9982\nZXNlYXJjaA== 9983\n6aE= 9984\nIGdvb2Rz 9985\nIGZpc2hpbmc= 9986\nQVBQTEFVU0U= 9987\nIE5BUw== 9988\nZWN0aW9u 9989\nIHRlbXBsZQ== 9990\nbGljaGU= 9991\nIGtleWJvYXJk 9992\nIGRlc2Rl 9993\nIGVkdWNhdGlvbmFs 9994\nIE5pZ2h0 9995\nMzM= 9996\nIGJyZWF0aGU= 9997\nbGljaGVu 9998\ndGht 9999\nacOocmU= 10000\n4Lia 10001\nbGFyxLE= 10002\nIGFsaQ== 10003\nIGNvbXBvcw== 10004\nIHNlbnNvcg== 10005\nIOu2gOs= 10006\nIG5ld3Nw 10007\nIEJ1bmQ= 10008\nIE1p 10009\nIHBlcmZvcm1pbmc= 10010\nIGRydW0= 10011\nQkU= 10012\nIHBvcms= 10013\nIGNvYWw= 10014\nZW5nZXI= 10015\nIHJhbQ== 10016\nIOuyiA== 10017\n0LjRgNC+0LI= 10018\nIFBvcA== 10019\nIHBob25lcw== 10020\nIGZhY2ls 10021\nIHRyYWNrcw== 10022\nb250ZQ== 10023\nIG9yZ2FuaWM= 10024\nIGRpYWxvZ3Vl 10025\nIEhhdmluZw== 10026\nIFBvc3Q= 10027\nIHBheW1lbnQ= 10028\nIGFycmF5 10029\nIGludGVuZGVk 10030\nw7pz 10031\nIGJhcnM= 10032\nIHJldmlld3M= 10033\nbGFuZHM= 10034\nIGtpbmdkb20= 10035\nIHN0YWdlcw== 10036\nIG1vdW50YWlucw== 10037\nIGR1bg== 10038\nIGRlY2ly 10039\nxI0= 10040\nIGJhbmtz 10041\nIHRocm93aW5n 10042\nIOuquw== 10043\nIGFuZ2Vy 10044\nINGB0LXQudGH0LDRgQ== 10045\nIGRpc3R1cg== 10046\nIGh1bWFuaXR5 10047\nIGVsZXM= 10048\nIHNob3VsZGVycw== 10049\nIFBlcmZlY3Q= 10050\nIGZhbmN5 10051\nIGJyaWxsaWFudA== 10052\nIGluc3BpcmF0aW9u 10053\naG1t 10054\nIGxpZA== 10055\nVUw= 10056\nIG3DpQ== 10057\naW5kaQ== 10058\n6Ig= 10059\nIHNoaWVsZA== 10060\nIOyYpOs= 10061\nQ1Q= 10062\nYWdpbmU= 10063\ndWJlcg== 10064\nIEJS 10065\nIHF1ZXN0bw== 10066\nINC30LDQug== 10067\nIEtub3c= 10068\nIHRhbmc= 10069\n7ZWp64uI64uk 10070\nIGJhcmVseQ== 10071\nIFNF 10072\nIG1hcmdpbg== 10073\ncmVp 10074\n0LDRgtC10LvRjA== 10075\nIGNvbnRy 10076\nIHbDoA== 10077\nIGxlZ2l0 10078\n0Jg= 10079\na2lucw== 10080\n0YDQtdC0 10081\nIEFzaA== 10082\nIGFkdmlz 10083\nIEdyZWVr 10084\n0YPQug== 10085\nIHNoYWtl 10086\naWRhZGVz 10087\n0LDRgdGM 10088\nIGNvbnZlbnRpb24= 10089\nIGNvbnRlc3Q= 10090\nTVM= 10091\nIFllYXI= 10092\nIHJlcHJlc2VudGF0aW9u 10093\naW5kZW4= 10094\nZW5kYXI= 10095\nIHByb3N0 10096\nIEh1bWFu 10097\nIEN5 10098\nYW5nZWQ= 10099\nUEE= 10100\nIGF4aXM= 10101\nIHRoZW9yZQ== 10102\nYXR6 10103\nIO2VmOqzoA== 10104\nIGVscw== 10105\nIFJlc2VhcmNo 10106\nIGJlbmVmaWM= 10107\nIGRlbnNpdHk= 10108\naW5kbw== 10109\n7Jy8 10110\naW1kaQ== 10111\nIHJlc2VhcmNoZXJz 10112\n6rGw65Og 10113\naWdocw== 10114\nZGFu 10115\nIGRpY2U= 10116\nIG1hYXI= 10117\nIHN1Ym1pdA== 10118\nIGR1bWI= 10119\nIGJpag== 10120\nYXdheQ== 10121\nIFBhc3M= 10122\nIGV4dGVuc2lvbg== 10123\nIGNydXNo 10124\nIGNvdmVyaW5n 10125\nZWRp 10126\nYm9ybg== 10127\naW5hdGlvbnM= 10128\nINGB0LTQtdC7 10129\n0LLQtdGA 10130\nIE90aGVyd2lzZQ== 10131\naXN0YW50 10132\n0LDQudGC0LU= 10133\nIHRhbnRv 10134\nIHBlcmZvcm1lZA== 10135\nINC30LDQvw== 10136\nYWxv 10137\nIEZvdW5kYXRpb24= 10138\nIHByb3RvY29s 10139\nIFpv 10140\nbWF5 10141\nIGhhY2s= 10142\nIGJ1ZGR5 10143\nbWFkZQ== 10144\nIGFkcw== 10145\nIGZhc2NpbmF0aW5n 10146\nIGVxdWl2YWxlbnQ= 10147\nZ2Vs 10148\nIGFyYw== 10149\nINGH0LXQu9C+0LI= 10150\nIHByb3Bvc2Vk 10151\nIG5vdHJl 10152\nYW5nZXM= 10153\nIGNvdW5zZWw= 10154\nYWxsYQ== 10155\nIDMx 10156\nd2VldA== 10157\nyJk= 10158\nIGVsZWN0cmljaXR5 10159\nIHRveA== 10160\nxYJhZA== 10161\nIOy0 10162\nIGRpZmZpY3VsdHk= 10163\noNeZ 10164\nbmVzZGF5 10165\n0LjRgdGM 10166\nIGFsbGVn 10167\nIEdP 10168\nIHF1aXQ= 10169\nIEhlcnI= 10170\nIGVzdMOhbg== 10171\nIGdpcmxmcmllbmQ= 10172\nIHRlbmc= 10173\naWZpY2lhbA== 10174\nIEphbQ== 10175\nIGNhbmNlbA== 10176\nIGZyZXF1ZW50bHk= 10177\nSVY= 10178\nIGNsb3Npbmc= 10179\nIGRlY2FkZQ== 10180\nIHJlcHJlc2VudGVk 10181\nIENhbmFk 10182\nINC60L7RgtC+0YDRi9C1 10183\nIGVzdGFtb3M= 10184\nIFRodXJzZGF5 10185\nIEdh 10186\nIExpdmU= 10187\nbGVt 10188\nYmJsZQ== 10189\nU09O 10190\nIDIwMDg= 10191\nIGRpY2g= 10192\nIEF3ZXNvbWU= 10193\nIGNvbmNlcHRz 10194\nUEVBSw== 10195\nIGxpdGVyYXR1cmU= 10196\nIE9seW1w 10197\n0LvQsNC0 10198\nIG5vc3Q= 10199\ndml0 10200\nIEVudGVy 10201\nb3JkZXJz 10202\naWNraW5n 10203\nbmllag== 10204\nIGV1Y2g= 10205\nIFRob3VnaA== 10206\nIGJhZ3M= 10207\nIGxpbWl0cw== 10208\nIHN0YWtl 10209\ng6U= 10210\nIG9j 10211\nIFZpcw== 10212\nIDEyMA== 10213\nIG51ZQ== 10214\nIGNvbmNl 10215\nIGRpc2Fn 10216\n56g= 10217\nIGFudGljaXA= 10218\noIg= 10219\nc2w= 10220\nIHZvdGluZw== 10221\nIGV4cG9zdXJl 10222\nIENvbW11bml0eQ== 10223\nIEp1c3RpY2U= 10224\nb3JuZXk= 10225\nc3p5c3Q= 10226\nIGZyaWVk 10227\n7Iuc6w== 10228\nIFdpbg== 10229\nIEA= 10230\nIEhvcGVmdWxseQ== 10231\nZXN6 10232\nIG1vbmRl 10233\nIGNvbWJpbmU= 10234\nZ21lbnQ= 10235\nIHJlY29tbWVuZGF0aW9ucw== 10236\nIHByZWduYW50 10237\n7Iud 10238\ncmFm 10239\nIGx1 10240\nZG9vcg== 10241\n0LDQt9GL0LI= 10242\ndWVnbw== 10243\nIGltcHJvdmVtZW50 10244\nIHRyaW0= 10245\nIGVpZ2Vu 10246\nIGFwcHJveGltYXRlbHk= 10247\nINCy0LDQvA== 10248\nYXdh 10249\nINGB0L7QsQ== 10250\nIGNvcm9u 10251\nIG9uZ29pbmc= 10252\nIGhlcw== 10253\nIGluanVyeQ== 10254\nIGZyYW5r 10255\nIGthZGFy 10256\ncmVuY3k= 10257\nIENvbG9y 10258\nIEdydQ== 10259\nIGRpcA== 10260\n0YDRiw== 10261\nIHRlYXJz 10262\nZ3Q= 10263\nIFBE 10264\nIHBhdXNl 10265\nb3Nj 10266\nIHVzdGVk 10267\nIFdvbw== 10268\nIHdpxJk= 10269\nIGRlbm4= 10270\nIFBldA== 10271\nIG92ZXJjb21l 10272\nIOuCtOqwgA== 10273\nIE1vdmU= 10274\nIGxpY2Vuc2U= 10275\nIHJlcGVhdGVk 10276\n4K+H 10277\nIGNhdGVnb3JpZXM= 10278\nIG5vb2RsZXM= 10279\nIGZsb29k 10280\nIE1hc3M= 10281\nIG51dHM= 10282\nIEplc3M= 10283\nIElo 10284\nIGNoYW5jZXM= 10285\nkJg= 10286\nIGRvbmRl 10287\nSUc= 10288\nIGFuZGVyZQ== 10289\nIGJvbmVz 10290\n7J6R 10291\nIGVmZmljaWVuY3k= 10292\nIG1vZGVy 10293\ncm9hdA== 10294\nIOydtOqyjA== 10295\naWxsZXI= 10296\nIG9tZWdh 10297\nINC/0L7Qsg== 10298\nIEdyb3Vw 10299\nIHByb2R1Y2luZw== 10300\nYW1v 10301\nIHBhcnRpY2lwYW50cw== 10302\ndXBw 10303\naWZpY2U= 10304\nIGZvcnR1bg== 10305\naWV0bmFt 10306\nYWNhaw== 10307\nIEtv 10308\nbWnFnw== 10309\nIGphaWw= 10310\nIEpvbmVz 10311\nxZtteQ== 10312\nIERldXRz 10313\nIGJyaWVmbHk= 10314\nIFRhbA== 10315\nIFBlcmhhcHM= 10316\nIFJ1Yg== 10317\nIEtu 10318\n64uk64qU 10319\ncsOp 10320\nIHZvY8Oqcw== 10321\nIENoYXJsZXM= 10322\n0LXRgtC1 10323\ncmllcnM= 10324\nIGhlYWw= 10325\nYW50ZWU= 10326\nIGRlbW9jcmFjeQ== 10327\nIGxvYW4= 10328\nIGNoZWY= 10329\n0Y/QvA== 10330\nIHVuY29tZm9ydGFibGU= 10331\nIGV0ZXJu 10332\nYXBwaW5n 10333\nIHJlcGFpcg== 10334\ncm90 10335\nIFRhcg== 10336\nIGNvdmVycw== 10337\nb21pbmc= 10338\nIEV0aA== 10339\nIM6t 10340\n0YfQvdC+ 10341\nIGFmdGVyd2FyZHM= 10342\nINCy0LXRgA== 10343\nIGRhaGE= 10344\nIGtuZWVz 10345\nIG9yZGluYXJ5 10346\nw7xs 10347\nZ2Fz 10348\nIHRpY2tldA== 10349\nIOyggOuKlA== 10350\nIOyeiOyKteuLiOuLpA== 10351\nY2h0ZQ== 10352\nTXI= 10353\nIHNpc3Q= 10354\naHVp 10355\n6re46w== 10356\n7Jes 10357\nIHZhcnk= 10358\nIG1lbW9y 10359\nIGNvbnRyb2xsZXI= 10360\nIGLEmWR6aWU= 10361\nIG1pbmlzdGVy 10362\n15I= 10363\nZmxvdw== 10364\nQUg= 10365\nIHRvd2Vy 10366\n55A= 10367\nIHNjYXI= 10368\nIFBlbg== 10369\nIHBhw61z 10370\n15g= 10371\n7J246w== 10372\nIGVuZXJn 10373\nIHN3b3Jk 10374\nIHBhcGVycw== 10375\n0LjQu9Cw 10376\nIFdlZG5lc2RheQ== 10377\nIEZvcmNl 10378\nIGV4dHJhb3JkaW5hcnk= 10379\nIExha2U= 10380\nIOqwgOs= 10381\nIEJlYXV0 10382\nIHJlYXNvbmFibGU= 10383\nIGNvbnRyaWJ1dGU= 10384\nIHBsZWFzZWQ= 10385\nIHVwZGF0ZWQ= 10386\nIHBpw7k= 10387\nZWxv 10388\nIHNpZ25pZmljYW50bHk= 10389\nIGJvdA== 10390\nIGdlbmVyYXRpb25z 10391\nIHByb3RlY3RlZA== 10392\nIGhpZGluZw== 10393\nIElsbA== 10394\nIG5ldXRyYWw= 10395\nXSw= 10396\nz4TOvw== 10397\nIHRvbmd1ZQ== 10398\nVGhhbms= 10399\nIOqzhA== 10400\nIHBheXM= 10401\nzq/OvQ== 10402\nIGFwcGxl 10403\nMDE= 10404\nZXJr 10405\naWVyYQ== 10406\nIGplZw== 10407\nIFN1YnNjcmliZQ== 10408\nIHRoZWF0ZXI= 10409\nIHN0cm9uZ2x5 10410\nIOyGjA== 10411\nINC/0YDQsNCy 10412\ndWNreQ== 10413\nIEppbg== 10414\na3dhcmQ= 10415\n6rG0 10416\nIG9wcG9uZW50 10417\nIFNP 10418\nIGhvbHk= 10419\nIGZpbGxpbmc= 10420\nOl0= 10421\nIGhpag== 10422\n0Jw= 10423\nIGJpc3M= 10424\nIGJsZW5k 10425\nIGltcGxpYw== 10426\nIOy9 10427\nbGxlaWNodA== 10428\n2YrYqQ== 10429\nYXNhbnQ= 10430\nZXJ0ZQ== 10431\nIFNhbWU= 10432\nIGludGVyaW9y 10433\nU2U= 10434\nIGJlbmNo 10435\nIHBvY28= 10436\nIG1hcmtz 10437\nIHdpbnM= 10438\nIM6z 10439\nIGRpc3RpbmN0 10440\nIEFzaWFu 10441\nIG1vbGVj 10442\nIEphY2tzb24= 10443\nIGVhc3Q= 10444\nIHBoeXNpY3M= 10445\naW1hbA== 10446\nIHBlYWs= 10447\nYXJpYW4= 10448\nZXBz 10449\nIG5lYXQ= 10450\nINCy0LDRgQ== 10451\ndXJuaW5n 10452\nIHN5bnRo 10453\nIHJldmVhbA== 10454\nxbo= 10455\nZ29u 10456\nbmlz 10457\nYXRpdg== 10458\nIExhcw== 10459\nIHB5 10460\nIE1hamVzdHk= 10461\nIFZhbGxleQ== 10462\nIGVuZg== 10463\nIGdlbnM= 10464\nIHJvb3Rz 10465\nZXpl 10466\nYmV0 10467\nIGFjdHM= 10468\n6Zo= 10469\n6JA= 10470\nIHBoaWxvc29waHk= 10471\nIG1hdGNoZXM= 10472\nnWk= 10473\nIGp1xbw= 10474\nIGRlc3Blcg== 10475\nIEVkdWNhdGlvbg== 10476\nIHNwb3Rz 10477\nIHJlZ2lvbnM= 10478\nQXI= 10479\nIE5hbQ== 10480\nZWVu 10481\nIGRpYWdyYW0= 10482\nIHJlbHk= 10483\nIHRlbnM= 10484\nIGRhdGluZw== 10485\nIGNvYXQ= 10486\nIEhvcg== 10487\nIGFja25vd2xlZGdl 10488\nIFByZXR0eQ== 10489\nINC/0L7Qvw== 10490\nIHZvaXI= 10491\nIGZhdm91cml0ZQ== 10492\nIG1vxbw= 10493\nIGtt 10494\nIERP 10495\nIGZlcnQ= 10496\nIOuPhA== 10497\nIFBhYw== 10498\nIGZvbnQ= 10499\nIGZpbmRz 10500\nIEl0YWx5 10501\nINC60L7Quw== 10502\nIGNvbXBhc3M= 10503\n67M= 10504\nbGlhbWVudA== 10505\nIG5vdGlvbg== 10506\nIGluamVjdA== 10507\nIHdpc2RvbQ== 10508\nIMOc 10509\nIE1vb24= 10510\nIEJ1c2luZXNz 10511\ncmljcw== 10512\nIFlvdXQ= 10513\nIGZvcmdpdmU= 10514\nIGZpbmFuY2U= 10515\naWxv 10516\n2KM= 10517\nYWhs 10518\nIGRlbW8= 10519\nIGNsaW1i 10520\nIGV4cG9ydA== 10521\n5aA= 10522\nIHN1Y2Nlc3NmdWxseQ== 10523\nIEZlcg== 10524\ncGVjdGVk 10525\nZGVt 10526\nIHJldGlyZQ== 10527\nIGxhcHRvcA== 10528\nIHNwaXI= 10529\nIEFzc29jaWF0aW9u 10530\nINCz0Ls= 10531\nIFNlbA== 10532\nIO2VnOs= 10533\nIGVtcGxveWVl 10534\nIG1vbHQ= 10535\nUkw= 10536\n0K8= 10537\nIGNvbnRyYQ== 10538\nIHVn 10539\nIEJhbGw= 10540\nIEphdmE= 10541\nw6lyaWU= 10542\nIHByb2NlZHVyZQ== 10543\nIGdyaWQ= 10544\nIOuKkOs= 10545\nIGJlbHQ= 10546\nINGN0YLQvtCz0L4= 10547\ndXJk 10548\nIGNvbXByZWg= 10549\nIGRldmVsb3Blcg== 10550\nINGN0YLQvtC8 10551\n5Zg= 10552\nY3I= 10553\nIOuT 10554\nIHNwb2tlbg== 10555\ncmVuY2U= 10556\nIHRlcm1pbg== 10557\nIGFnZ3Jlc3NpdmU= 10558\nIGJpc3NjaGVu 10559\nIGhhc3Rh 10560\nIEJyaWFu 10561\nIENvbW1pc3Npb24= 10562\nIFl1 10563\nIHByb21pc2Vk 10564\nIGVxdWl0eQ== 10565\naWtv 10566\ndmVydHk= 10567\nIHJlcGxhY2Vk 10568\nIEhlbHA= 10569\nIHBvc2U= 10570\nIE1pZGRsZQ== 10571\nIGtpbQ== 10572\nIG1laW4= 10573\nIENvdW5jaWxs 10574\nINCS0YE= 10575\nb3Jv 10576\nIEJlcm4= 10577\nIGJleg== 10578\nIGFuYWx5dA== 10579\nYW5nZW4= 10580\nIOyLtg== 10581\nIEdsbw== 10582\nIHF1YWQ= 10583\n0YLQsA== 10584\nIHNwZWFrcw== 10585\n7JiI7JqU 10586\nIOyXrOufrOs= 10587\nZnJlZQ== 10588\n0L3Rlg== 10589\ncmljaA== 10590\nIOuvuA== 10591\nIERpZXM= 10592\nYWJi 10593\npbg= 10594\nIGRlcHJlc3Npb24= 10595\nIHJldGFpbA== 10596\nhOuTpA== 10597\nIFZvdXM= 10598\nIExhdGlu 10599\n4bk= 10600\nIOyii+yVhA== 10601\nIHRvcnQ= 10602\nIGNvbXB1dGVycw== 10603\nIHNlYXJjaGluZw== 10604\nIHR1Yg== 10605\nYXRlbGw= 10606\nIG1lcmM= 10607\nIGdsYXNzZXM= 10608\ncGVyc29u 10609\nIGRpc2hlcw== 10610\nIGd1YXJhbnRlZQ== 10611\nIG1lZw== 10612\nc20= 10613\nIFdhbGs= 10614\n7Jy866m0 10615\nIGZvbGRlcg== 10616\nIE1pdA== 10617\nIHRpbWluZw== 10618\nIGFic3Q= 10619\nIExvZw== 10620\nIGFwcHJvdmVk 10621\nIFVTQQ== 10622\n0LLQtdGC 10623\nIHdpc2U= 10624\nZXNzZWQ= 10625\nIGRvdWI= 10626\nIHJlc2lkZW50 10627\nIGdlbmVyYXRlZA== 10628\nIHN0YXlz 10629\nIGV4cGxhbmF0aW9u 10630\nIHBvaXNvbg== 10631\nYXRyZQ== 10632\nIGluc2FuZQ== 10633\nIHJlZmVycmVk 10634\nYWlyZXM= 10635\nIFRSQQ== 10636\nIHNlaQ== 10637\nIGlubm9j 10638\nQWg= 10639\nIG1hbnQ= 10640\naHVz 10641\nIG91dGVy 10642\nZ2Vi 10643\nb2ljZQ== 10644\nIGRpc2N1c3Npbmc= 10645\nIGNvbnZlbmllbnQ= 10646\nX18= 10647\nIGF2b2ly 10648\nIHNoYXBlcw== 10649\nIGdyYXk= 10650\nIGRlbnRybw== 10651\nIG1hY2h0 10652\nIDE5NQ== 10653\n2Y8= 10654\nIGFkZHM= 10655\ndXRpbmc= 10656\nIGNhcGFiaWxpdGllcw== 10657\nIHNlY3Rpb25z 10658\nIHR1bmU= 10659\nIENhdXNl 10660\nYXJkZQ== 10661\nINGB0LrQsNC3 10662\nYXZpcnVz 10663\nIFJF 10664\nIHR1bmVk 10665\nIGxlYWY= 10666\ndGVyaW9y 10667\nIENhcHRhaW4= 10668\nINis 10669\nIGNob29zaW5n 10670\naGlu 10671\nZ2dpbmc= 10672\ndmlldA== 10673\nIHJlZ3JldA== 10674\nMjY= 10675\nb25kZXJu 10676\nIGJvbnVz 10677\nIFJheQ== 10678\nQXM= 10679\nIHRvcm4= 10680\nIEhpZXI= 10681\nIEVV 10682\nIHJpc2tz 10683\nIGFtYQ== 10684\nIFlldA== 10685\nIGNoYXJhY3RlcmlzdGljcw== 10686\nIOqwkA== 10687\nIFNlbmF0b3I= 10688\nIFZhbW9z 10689\nIHJvc2U= 10690\nIGNvcnBvcmF0ZQ== 10691\nZ2hhbg== 10692\nIGNlbnRlcnM= 10693\nc3RhaXJz 10694\nIG5pdA== 10695\nIHVudXN1YWw= 10696\nIFRvbnk= 10697\nIEdS 10698\nIFdpbGQ= 10699\nIFNpbWlsYXI= 10700\nIHRvZGFz 10701\nIGhvcml6b250 10702\nbWVs 10703\nIHN0cmljdA== 10704\nIGN1YWw= 10705\nIHdyaXQ= 10706\nIGV4dGVuZGVk 10707\nIO2VmOuKlA== 10708\nIHJlbGllZg== 10709\nIG9uaW9u 10710\nIGJhYmllcw== 10711\nIGRpZmVy 10712\nIGludGVncmF0ZWQ= 10713\nw7x6aWs= 10714\nZXBpbmc= 10715\nLS0tLQ== 10716\nIG1lbnM= 10717\nIHN0cmF0ZWdpYw== 10718\nZmluaXRlbHk= 10719\nIGVpZ2VudGxpY2g= 10720\nV2hv 10721\nIHs= 10722\nIFRyaQ== 10723\nIHBvaW50ZWQ= 10724\n8J0= 10725\nbmFtZW50 10726\n0LXRhg== 10727\nIHByaWRl 10728\nIFJlcHVibGljYW4= 10729\nIHNhbXBsZXM= 10730\nIGRvbWVzdGlj 10731\nTFk= 10732\ndmV6 10733\nIHdlYmluYXI= 10734\n2KfZhQ== 10735\nIGVuaA== 10736\nIHN1Z2dlc3RlZA== 10737\nIG1laW5l 10738\nIHB1ZWQ= 10739\nb3Jlbg== 10740\ncmly 10741\nIGhlYXZpbHk= 10742\nIGluc3RydWN0aW9u 10743\nIG1pY3JvcGhvbmU= 10744\nIGlndWFs 10745\nIElyYQ== 10746\nIHZ1bG5lcmFibGU= 10747\nIFZpcmdpbmlh 10748\nIGNvbnRpbnVvdXM= 10749\nIHBvdmVydHk= 10750\nIGJsYWRl 10751\nIHJlbGF0ZQ== 10752\nIGNhcmE= 10753\nIEdvaW5n 10754\nIHJlZ2lvbmFs 10755\nIEZ1Y2s= 10756\nIHRvdw== 10757\nIE11c2V1bQ== 10758\ncmFudHM= 10759\nINCx0LXQtw== 10760\nbGFpbQ== 10761\nIGNoYW1waW9u 10762\ndGxl 10763\nw61u 10764\nZW5jaWE= 10765\nIGRpZXNlbQ== 10766\nIERpZw== 10767\nbWF0ZXM= 10768\nIGludmVzdGluZw== 10769\nIEpvcmRhbg== 10770\nIGludGVncmF0aW9u 10771\nIO2O 10772\n4Lir 10773\nZW5zdXM= 10774\nIEFyY2g= 10775\nIHBlbmNpbA== 10776\n0LDQu9GM0L3Qvg== 10777\naXNzZW4= 10778\nIEth 10779\nIHJvY2tz 10780\nIHJhdGluZw== 10781\nIHJlZnVnZQ== 10782\nIGFwcg== 10783\nZXRlZA== 10784\nIGFzc2lzdGFudA== 10785\nIG1lYW5pbmdmdWw= 10786\nIHBlcm1hbmVudA== 10787\nIGhpbGw= 10788\nIHdzenlzdA== 10789\nIHdvdW5k 10790\nIEF0bA== 10791\nIGxha2U= 10792\nIEZvcnQ= 10793\nIHJlZHVjdGlvbg== 10794\nIHZpdg== 10795\nIHNvdXI= 10796\nIGVjb3M= 10797\nIGhheg== 10798\nIHN0ZWFs 10799\nIG15c3Rlcg== 10800\nINCa0LDQug== 10801\nINGN0YLQuA== 10802\nIFZpZXRuYW0= 10803\nIGFudGVz 10804\nIGNvbm5lY3Rpbmc= 10805\nIERhdmU= 10806\nIGLDtnlsZQ== 10807\nIENhc3Q= 10808\nTGU= 10809\nIGN1bA== 10810\nIGdlbnJl 10811\n66eQ 10812\nIGNvbXBsYWlu 10813\nIGh1cnJ5 10814\nYXJ0ZQ== 10815\nZ3JlZw== 10816\nIG1vbml0b3Jpbmc= 10817\nIGRlc2VydA== 10818\nINGB0L7Qsg== 10819\nZWxpbmc= 10820\nIFN1cHJlbWU= 10821\nIGdpYmk= 10822\nIGxhcmc= 10823\nIG5hdGlvbnM= 10824\nIFRvaw== 10825\nIG5lZWRsZQ== 10826\n5rU= 10827\nIGFzbGVlcA== 10828\nIGNvbXVu 10829\nIEpld3M= 10830\nIGFjaGlldmVk 10831\nIGV4aXQ= 10832\nIGRpc2Vhc2Vz 10833\nbGluZXM= 10834\ncmllbmRz 10835\nIHJlY3Q= 10836\nIHNjYW4= 10837\nIGh1cnRz 10838\nesSZ 10839\nIExvb2tpbmc= 10840\n7ZI= 10841\ndWx0dXJhbA== 10842\n4buT 10843\naW5lbnQ= 10844\nIHB1ZXM= 10845\nIGNoZWVyaW5n 10846\np4A= 10847\nYWdnZXI= 10848\nIGFkYQ== 10849\nTGF1Z2h0ZXI= 10850\nIFdvbWVu 10851\n6Ks= 10852\nIG9jY3VycmVk 10853\nIHNlYXRz 10854\nIGVtcG93ZXI= 10855\ndW51 10856\nZWxsaW5n 10857\nQkVS 10858\nZW5zaW9uYWw= 10859\nIGNvbnNvbGU= 10860\nYXNoaW5n 10861\nIGVpbm1hbA== 10862\nZmFyZQ== 10863\nIOuPvA== 10864\nIHNlc3Npb25z 10865\n2ZA= 10866\nIHJpZGljdWxvdXM= 10867\nw61hbg== 10868\nIEhlbnJ5 10869\nIEhvbA== 10870\nIGNvbGxlY3RlZA== 10871\nIGRpc2N1c3Npb25z 10872\nRGU= 10873\nIGRpc2FiaWxpdHk= 10874\nIO2b 10875\nIHN1YnNjcmliZXJz 10876\nIGlyZ2VuZA== 10877\nIGZlbA== 10878\nIGRpcmVjdGlvbnM= 10879\nIG1hbnVmYWN0dXJpbmc= 10880\nIFJvZA== 10881\nIOyWmA== 10882\n4LiX 10883\nIGNyaXRlcmlh 10884\nIG1vbGQ= 10885\nIGVudGVyaW5n 10886\ncmlq 10887\naXNlbg== 10888\nIFBhcmE= 10889\naWV2ZQ== 10890\nIGNoYXJnZWQ= 10891\nIGpvdQ== 10892\nIGNhdHM= 10893\n0LvQtdC0 10894\nYWRheXM= 10895\n0LDQvdC+0LI= 10896\nasSZ 10897\ndmF0aW9u 10898\nIGFzdHJvbg== 10899\naXRhbHM= 10900\nIEJyYW5k 10901\nIEthbg== 10902\nIHBsYWlu 10903\nIGFuZGVyZW4= 10904\nYW5kZQ== 10905\n0Y/Qtw== 10906\nIHRvbGVy 10907\nxYJlbQ== 10908\nIHByw6k= 10909\n0LzQvtGC0YA= 10910\nYWdlbWVudA== 10911\ndWN0 10912\nY2jDqQ== 10913\nIEVuZXI= 10914\nYWrEhQ== 10915\nIO2VtOs= 10916\nIHN0YQ== 10917\nIHJpbmdz 10918\nIHRvaWxldA== 10919\nIENyYQ== 10920\nIGV4cGVyaWVuY2luZw== 10921\nIHNsaXA= 10922\nIHNhbmR3aWNo 10923\nIFVzaW5n 10924\nIHNwZWN0cnVt 10925\nIFJvcw== 10926\nYXBzZQ== 10927\nIEpheQ== 10928\n0LzRgw== 10929\nRXg= 10930\nIHJlY29nbml0aW9u 10931\nIERpZG4= 10932\ndWRh 10933\nYWpl 10934\nZXN0bHk= 10935\nIGZlbWlu 10936\naXR1cmU= 10937\n0YDQsNGC 10938\nIGhpcmU= 10939\nIG5vd2hlcmU= 10940\n4bqn 10941\nIHdpbmc= 10942\nIHNhdg== 10943\nIFNlY3VyaXR5 10944\nIHJ1cmFs 10945\nIEZ1bg== 10946\nYXllcg== 10947\nIGFjY3Vz 10948\nIG1t 10949\nIEpvc2VwaA== 10950\nIHNjcmVlbnM= 10951\nIGJvcnJvdw== 10952\nIHN3aW5n 10953\nIDQ4 10954\nIHRvdWNoaW5n 10955\ndGhpcw== 10956\naW50ZW5kbw== 10957\n6YM= 10958\n0KA= 10959\nIFNjb3RsYW5k 10960\nIEphc29u 10961\nIFZlbg== 10962\nIGV4Y2VwdGlvbg== 10963\nIG5lYXJieQ== 10964\nIGJyb3dzZXI= 10965\nYW5nZXJz 10966\nIFNpbg== 10967\nz4DOvw== 10968\nb3NwZWw= 10969\nIHd1cmRl 10970\nIGRydW5r 10971\n7Zo= 10972\n7IaN 10973\nIOyKpO0= 10974\nIExpZQ== 10975\nb2Nv 10976\nIExlYWd1ZQ== 10977\nIGlnbm9yZQ== 10978\nIDop 10979\nIGxhbmRpbmc= 10980\nINi52YQ= 10981\nIFRhZw== 10982\nMjg= 10983\nIGRyYWZ0 10984\nIGFlcg== 10985\nIOq3uOuDpQ== 10986\nIHBlbnNl 10987\nINC00LDQttC1 10988\nIGJlZHJvb20= 10989\nIG5hag== 10990\n7KeA6rOg 10991\naWdlbm91cw== 10992\nIGRlYWxz 10993\nZWxsbw== 10994\nIHBvc2l0 10995\n6rs= 10996\nIHZpc2l0ZWQ= 10997\naWZpZXM= 10998\nIHByZW1p 10999\nIGNhbnQ= 11000\nIFJpY2s= 11001\nIHJhaXNpbmc= 11002\nIHBlcm1pc3Npb24= 11003\nIHB1Ymw= 11004\ndW5jaQ== 11005\nIGJlbmQ= 11006\nIGNoYW1waW9ucw== 11007\nZGll 11008\nIGF3ZnVs 11009\nIGp1bXBpbmc= 11010\nIGxsZWc= 11011\nIHN1c3RhaW5hYmxl 11012\nIFRvdA== 11013\nIGNhbmR5 11014\nIHNhdGlzZmllZA== 11015\nIHBpcGU= 11016\nIGNvY2s= 11017\n2LY= 11018\nc3RvbmU= 11019\nIG1vbWVudHVt 11020\nINCd0LA= 11021\nIGFsb3Jz 11022\nIHJldHVybnM= 11023\nYW1tZW4= 11024\n564= 11025\n0YvQvA== 11026\nYXdu 11027\nb3R0ZWQ= 11028\nIHdvbGxlbg== 11029\naWN0ZWQ= 11030\nIGNhbmRpZGF0ZXM= 11031\nIExhZHk= 11032\nIHlpZWxk 11033\nIG1haW50ZW5hbmNl 11034\nZmZlY3Q= 11035\nIGV4cGFuc2lvbg== 11036\nIExFRA== 11037\nIGRhcmtuZXNz 11038\nIG91dGZpdA== 11039\n7JWI 11040\nINC40YHQvw== 11041\ncnVwdGlvbg== 11042\nIGVuZ2FnaW5n 11043\nIGluc2lnaHQ= 11044\nIEFsd2F5cw== 11045\nIGdlZg== 11046\ncmFr 11047\nIHBpeA== 11048\nIHF1YW50aXR5 11049\nIGluaw== 11050\nIEtpbmdkb20= 11051\nIGNvcnQ= 11052\nIGdvdmVybm1lbnRz 11053\nIHByb3Rlc3Q= 11054\ncG9vbg== 11055\nINGC0L7Qs9C+ 11056\ndWNoZW4= 11057\ncXVhbGl0eQ== 11058\nIFBvcnF1ZQ== 11059\nIENsdWI= 11060\nIHJpdA== 11061\nIGFydGljbGVz 11062\nQkk= 11063\naWdpYmxl 11064\nIGRpc2FzdGVy 11065\n0LjQsw== 11066\nINC90LjQug== 11067\n2YfYpw== 11068\n66W8 11069\nYXJldA== 11070\nIHVuYWJsZQ== 11071\nIMOu 11072\nIGVyc3Q= 11073\nINeg 11074\ndmFyZA== 11075\nIGFubm95aW5n 11076\nIEtpcg== 11077\n0LXRgNC2 11078\nZW5uaXM= 11079\nIHVuY2VydGFpbg== 11080\nMzY= 11081\nw7Zz 11082\nIGVjb3N5c3RlbQ== 11083\nemVk 11084\nasOg 11085\nc3Vu 11086\n7Ja07ISc 11087\nIMW8ZWJ5 11088\nIG1hcHM= 11089\n64KY 11090\nIEp1c3Rpbg== 11091\nIHRyYXNo 11092\nIGVub3Jtb3Vz 11093\nIHN0YXRlZA== 11094\nIGJyYW5kcw== 11095\nIHlvdXQ= 11096\nINGH0LXQu9C+0LLQtdC6 11097\nIE1hdHRo 11098\nIHRyYW5zcG9ydGF0aW9u 11099\nIGxlZ2lzbGF0aW9u 11100\nIHByb3ZpZGVycw== 11101\nINit 11102\nIG1hZ2F6aW5l 11103\nIHNlaGVu 11104\nIERlc3BpdGU= 11105\nIHBhc3Nlcw== 11106\nIGFsdGVy 11107\nYWRhbg== 11108\nIGZhcm1lcnM= 11109\nIGNvbmZpcm1lZA== 11110\nIGVzYQ== 11111\naXRvcw== 11112\nIHJvYWRz 11113\nVklT 11114\nIHdvcmtlcg== 11115\nIGRlc2lnbnM= 11116\nIFNvdmlldA== 11117\nYnJpZA== 11118\nIHByYWN0aWNpbmc= 11119\nIOu2gA== 11120\nIFNlYQ== 11121\nINC/0YDQvtC0 11122\nIGNoaWxs 11123\nIGxlbW9u 11124\n7JeQ64qU 11125\nIGZsZXhpYmxl 11126\nIEV4Y3VzZQ== 11127\nIHRlcnJpdG9yeQ== 11128\nIGx1eA== 11129\nIGxpZmV0aW1l 11130\nIGRpc3Rpbmd1 11131\nIFRpbWVz 11132\nIGdyb3Nz 11133\nZW56 11134\nIHNjcm9sbA== 11135\nbcSxxZ8= 11136\nY2lw 11137\no7w= 11138\nRFA= 11139\nIHB1Ymxpc2g= 11140\nIGViZW4= 11141\nIHJlZ2lzdA== 11142\nIGVkaXRpb24= 11143\nIExF 11144\nIGNoYXJnaW5n 11145\ndXRhdGlvbg== 11146\neXJpY3M= 11147\naWRhcw== 11148\nIM6/ 11149\nINC60L7RgA== 11150\nIFRvbg== 11151\nIHdob2V2ZXI= 11152\nIEZveA== 11153\n6rGw65Og7JqU 11154\nIGZvdWdodA== 11155\nIGRyaWxs 11156\nIEFmZ2hhbg== 11157\nfiE= 11158\nIFRvbw== 11159\nIHNlY29uZGFyeQ== 11160\ncsOk 11161\nIEhlYWQ= 11162\naW5uZW4= 11163\nIHlhcm4= 11164\nINC90LDQvA== 11165\nIHdpZHRo 11166\nIGVuZ2luZWVy 11167\nacSF 11168\nIHdpbmdz 11169\nIOuVjOusuA== 11170\nIHRyYXVtYQ== 11171\nIHJlcHJvZHU= 11172\nIGNoaXA= 11173\nIHBhc3Npb25hdGU= 11174\nIGF3a3dhcmQ= 11175\nIO2K 11176\n0LDQttC0 11177\nIEJpdGNvaW4= 11178\nIGtow7RuZw== 11179\nIHLDsw== 11180\ncmVjdGlvbg== 11181\nINCz0LTQtQ== 11182\nIFVzdWFsbHk= 11183\nIGltcGxlbWVudGF0aW9u 11184\nIGdhbWVwbGF5 11185\nIG15c3Rlcnk= 11186\nINC+0Lo= 11187\nIGHDsW9z 11188\nYW5keQ== 11189\n0LjQvNC4 11190\nIHByaXZhY3k= 11191\nYWNv 11192\nIGR1bXA= 11193\nIFBheQ== 11194\nIGRpcGw= 11195\nIGZ1cm4= 11196\nIHNoaXBz 11197\nTEE= 11198\nINGF0L7RgNC+0Yg= 11199\nIGVj 11200\nIGRyb3Bz 11201\nY2hs 11202\nMzI= 11203\nIG9ic2VydmU= 11204\nIERldmVsb3A= 11205\nTcO8emlr 11206\nYW5uZWw= 11207\nb3dhxIc= 11208\nIGZhY2Vk 11209\nw6Fs 11210\nIHZpY3RpbXM= 11211\nIGdpZnRz 11212\nIGJvb3Q= 11213\nw59l 11214\ncm9k 11215\nIDIwMDk= 11216\nw7ZydA== 11217\nIHVuaXZlcnNhbA== 11218\nIG5vdXZl 11219\nIGJveWZyaWVuZA== 11220\nIGNldGVyYQ== 11221\n0YHRgtCw 11222\nJ1M= 11223\nIG5pdmU= 11224\nIGNydWNpYWw= 11225\nIHN1cnZl 11226\nIGNvaW4= 11227\nIHNvbmRlcm4= 11228\nIHNoYWRl 11229\nIGx1Z2Fy 11230\nIHN1cmVseQ== 11231\nIG1heA== 11232\nIGltcHJvdmluZw== 11233\nIHdlbg== 11234\nINeR 11235\nIOyWtOw= 11236\nIGVuZm9yY2VtZW50 11237\naWJs 11238\nIGxpdg== 11239\nbGVyaQ== 11240\nIG1lam9y 11241\nIENhcm9saW5h 11242\nIHZhcw== 11243\nIGNvbXByb20= 11244\nIGRpcnQ= 11245\nIHVwZ3JhZGU= 11246\nIEJlbGw= 11247\nIHJlc3RhdXJhbnRz 11248\nIHRyYXA= 11249\nIHRlYXM= 11250\nYmxpYw== 11251\nIEdyZWc= 11252\nc2Fu 11253\nIG93 11254\ndWVzdA== 11255\nIHByb3Bvc2Fs 11256\nIFJldA== 11257\nZnJvbnQ= 11258\nIHBhc3NhZ2U= 11259\nIHN1cnJvdW5kaW5n 11260\nIMO6bHQ= 11261\nIHVwY29taW5n 11262\nIGhvcnJvcg== 11263\nIGNsb3RoaW5n 11264\nIOyVvQ== 11265\nIGRpbA== 11266\ncm9tZQ== 11267\nIElk 11268\nIFJvYWQ= 11269\nINGN0YLQvtGC 11270\nY2hhaW4= 11271\nINCx0YvRgtGM 11272\nIE9mZmlj 11273\nINCd0LU= 11274\nIGluc2Fu 11275\nIGRlY3JlYXNl 11276\nINGF0L7Rgg== 11277\nYnVpbGQ= 11278\nIERyYWdvbg== 11279\n5YI= 11280\nIGludmVzdG9ycw== 11281\nYW50aQ== 11282\nIHNhY3JpZmljZQ== 11283\nIHRyb29wcw== 11284\nIEJhZA== 11285\nIHBhc3N3b3Jk 11286\nIGNvbnN0cmE= 11287\n4LiV 11288\nIMOHYQ== 11289\nYWRvdw== 11290\ndGhyb3VnaA== 11291\n0YbQsA== 11292\nQ2Fu 11293\nIGNhbmRpZGF0ZQ== 11294\nIGFudGli 11295\n7JeF 11296\nIHRhc3R5 11297\n2YjZhg== 11298\nIEluZg== 11299\nIEJhbmc= 11300\nacOfdA== 11301\naW5pdHk= 11302\nZmF0aGVy 11303\nIGNvbnRyb3ZlcnM= 11304\nIFBhaw== 11305\naWx0eQ== 11306\n6rWs6w== 11307\nIGxpZ2h0ZXI= 11308\nIGZhbGxlbg== 11309\nIHp1cw== 11310\nIEd1YXJk 11311\nIGNvdHQ= 11312\nIEZyZWU= 11313\nIGluaXRpYXRpdmU= 11314\nYWxvdXM= 11315\nIG5vdGlmaWNhdGlvbg== 11316\nIE1lZGlj 11317\nIENvbW1pdHRlZQ== 11318\n7Jew 11319\nIFdvb2Q= 11320\nIG11c2g= 11321\ndWx1bQ== 11322\n6LI= 11323\nYWhhaA== 11324\nIHN1ZmZpY2llbnQ= 11325\nIHNpbmdlcg== 11326\n0LrQvtC5 11327\nQUxJ 11328\nw6R0dA== 11329\nIFBS 11330\nIExhcg== 11331\nY3VsZXM= 11332\naWVtcG8= 11333\nIHVuZXg= 11334\nIGludGVncmFs 11335\nIHRyYW5zbWlzc2lvbg== 11336\nIGljaQ== 11337\n0YPRhQ== 11338\nZ2lj 11339\nIE5pbnRlbmRv 11340\nIENvcA== 11341\nIFRydXN0 11342\nZW5hcw== 11343\nIGFiaWxpdGllcw== 11344\nIGNoaXBz 11345\ncGF0 11346\nIGFuY2hl 11347\n0LvQtdC9 11348\nIGFwcHJvYWNoZXM= 11349\nIHRob3I= 11350\nIHNpc3RlcnM= 11351\nIGRyaXZlcnM= 11352\nIGFsbGE= 11353\nMDM= 11354\nIHJ1YmJlcg== 11355\nIG7DpQ== 11356\nQUNL 11357\nIGRpc2FwcGVhcg== 11358\n6rCc 11359\nIGNvbXBlbnM= 11360\nIHZpYnI= 11361\nR08= 11362\nIHNpemVz 11363\nIHRyYWNraW5n 11364\n7ZmU 11365\nIOyEuA== 11366\nIGltcGFjdHM= 11367\naWJpbA== 11368\nZmlzaA== 11369\nQlI= 11370\nIGFycm93 11371\nIGxhcmdlbHk= 11372\nYW5ueQ== 11373\nIGxhd3llcg== 11374\nam91cnM= 11375\n2ro= 11376\ndmlh 11377\nIGRlbGxh 11378\nIG1hdGhlbWF0 11379\nIE1pbmU= 11380\nIEtvbGw= 11381\n2LI= 11382\nIENyb3Nz 11383\nIDY1 11384\nIGdyYWM= 11385\nIGludm9sdmVz 11386\nIGRlbGlnaHQ= 11387\nIEhvbGx5d29vZA== 11388\nIGltbWVkaWF0ZQ== 11389\nb25pYw== 11390\nIGxhZG8= 11391\nIGJ1bGxldA== 11392\nIE5vdGU= 11393\nIHVubG9jaw== 11394\nIGRpc2NvdW50 11395\nIHJpc2luZw== 11396\ncHJlc3M= 11397\nIHBhY2U= 11398\nIHNob3J0ZXI= 11399\nIHRlbmVy 11400\nZ2Vvbg== 11401\nIG1hbmFnaW5n 11402\nIGNlcmU= 11403\nQ2hy 11404\nV2hlbg== 11405\nYWNoZW4= 11406\nIOyT 11407\nIEh1bg== 11408\nIG9mdA== 11409\nIDI1MA== 11410\naWVydW5n 11411\nIHN0YWJpbA== 11412\nIENvbm5lY3Q= 11413\nIHlhbmk= 11414\nIGRvd250 11415\nzrzOsQ== 11416\nIHZvY2Fs 11417\nzr3OsQ== 11418\nIGxlYW4= 11419\nIHZpZMOpbw== 11420\nIEZhbWlseQ== 11421\ncmVzZW50 11422\nIGFtb3VudHM= 11423\n7KeB 11424\nY2xhc3M= 11425\nIHZpYg== 11426\nIEF2 11427\nYXJzZQ== 11428\nIGdlbnRsZW1lbg== 11429\nIHNlZWtpbmc= 11430\nIHVuaW9u 11431\nIHJlZ3VsYXJseQ== 11432\n5o8= 11433\nIEphaHI= 11434\nIEZvb2Q= 11435\nIFByb2JsZW0= 11436\nIGFydGlmaWNpYWw= 11437\nIFNpeA== 11438\nIGltcHJlc3NlZA== 11439\nIHRvb3Ro 11440\nIEto 11441\nIHlhcmQ= 11442\nIO2VtA== 11443\nIG93bmVk 11444\nIOuPmQ== 11445\n7LKt 11446\nIHRvZGE= 11447\nIHBvcnRmb2w= 11448\nIOuCqA== 11449\nb3JnZW91cw== 11450\nIGRhdGVz 11451\n0L7Qu9GM0Lc= 11452\n0LXRh9C90L4= 11453\nIGNvbmZpZ3VyYXRpb24= 11454\nIHJlcXVpcmVtZW50 11455\nIGJlbGx5 11456\nIHBhaW5mdWw= 11457\nIGRlbW9uc3RyYXRl 11458\nIGdsZWljaA== 11459\nIHZpc2l0aW5n 11460\nIENvbmY= 11461\nIGRhbA== 11462\n2ZE= 11463\nIGFtZW5k 11464\nIEZ1cg== 11465\nIHZpdGFs 11466\n4buL 11467\nIG1hdGU= 11468\nIE91 11469\nIGxlZ2FjeQ== 11470\ndXN0aW5n 11471\nIGFjY29tbW9k 11472\nIHF1b2k= 11473\nYXVlbg== 11474\nIGxpZmVzdHlsZQ== 11475\nQ0M= 11476\nw6TDpG4= 11477\nYXJ0ZW4= 11478\nIG1pbmhh 11479\ncsOz 11480\nIOuqqA== 11481\nIGZvcm1hdGlvbg== 11482\nIHRyYWlsZXI= 11483\ncGVyb3I= 11484\nINCz0YA= 11485\nIHVk 11486\nenU= 11487\nIGtvbW1lbg== 11488\nIGNhdmU= 11489\nIENvdW5jaWxsb3I= 11490\nIHRocm93bg== 11491\nIHRyaWNrcw== 11492\nTEFVR0hURVI= 11493\nIEFjYWRlbXk= 11494\ncm93ZA== 11495\noZ0= 11496\n7KCA 11497\nIEltYWdpbmU= 11498\nIGluZm9ybWVk 11499\ncm9waA== 11500\nIGxpZw== 11501\nIHNrdWxs 11502\nYWJldGg= 11503\nIGZ1bmN0aW9uYWw= 11504\nZXJlaw== 11505\nT24= 11506\n6aY= 11507\nIGFuY2VzdA== 11508\nIHNhZmVseQ== 11509\nIEhU 11510\n64u5 11511\nIGRhdg== 11512\nIGRyaXZlcw== 11513\nQW1lcmlj 11514\nIHRpcmU= 11515\nIHNhaXM= 11516\nw6FyaQ== 11517\nYXZvcnM= 11518\nIGNvcnJlc3BvbmRpbmc= 11519\nIHByw6lz 11520\nY2hlc3Q= 11521\nIGJhY3Rlcmlh 11522\nIGluZmVjdGlvbg== 11523\ndXNhbA== 11524\nIGF2ZXo= 11525\nIGJhc2tldGJhbGw= 11526\nIHN1cHBsaWVz 11527\nIGV4cGVydGlzZQ== 11528\noKU= 11529\nZmE= 11530\nIHRpZW1wbw== 11531\nIFdhbnQ= 11532\nIHNpbGx5 11533\nIHVwcA== 11534\nIGVsZWN0ZWQ= 11535\nIGZpcmVk 11536\nINiv 11537\nIHVuaXZlcnNpdGllcw== 11538\nYWxsZQ== 11539\nIGphY2tldA== 11540\nwrA= 11541\nIHRyYXY= 11542\nbHM= 11543\nIGRlZmVhdA== 11544\nIGNvZ24= 11545\nIGVxdWF0aW9ucw== 11546\ndWtp 11547\nIFNoZXI= 11548\nIHRoaXJ0eQ== 11549\nIHN0cmVhbWluZw== 11550\nb3Ryb3M= 11551\nIFByb2R1 11552\nbmVq 11553\nIGRlc2lnbmVy 11554\nIOuKkOuC 11555\nIHBhaW50ZWQ= 11556\ncmFpbmU= 11557\nbWFpbA== 11558\nIHZlc3M= 11559\nIHJoeXRobQ== 11560\nbGVzaA== 11561\nIDk5 11562\nIGFpbmRh 11563\nY2hpZWQ= 11564\nIMOpdGFpdA== 11565\nIGFmZmVjdHM= 11566\n6aM= 11567\nIEZpbmQ= 11568\nIMOpbA== 11569\nIHBvdGF0b2Vz 11570\nIHBhZw== 11571\nINC/0LDRgA== 11572\nYXJ0cw== 11573\nIE5hY2g= 11574\nIDMz 11575\nIEhhcmQ= 11576\nIElyYXE= 11577\nIG9waW5pb25z 11578\nd2l0aA== 11579\nZXJtYW4= 11580\nw70= 11581\n6K0= 11582\nIFNQRUFL 11583\nrLw= 11584\nIHN0YWJpbGl0eQ== 11585\nIEhF 11586\nIGNhcHR1cmVk 11587\nIGJ1Y2tz 11588\nIG1hc2tz 11589\nIGNvbXBldGU= 11590\nIGZvcmdvdHRlbg== 11591\n0LvRjtGH 11592\nc2VxdQ== 11593\nIOyEoA== 11594\naWxsaW9u 11595\nIGdyYXBoaWNz 11596\nIGh1Yg== 11597\nIOyXsA== 11598\nZW1wb3I= 11599\nIGNyb3du 11600\nIHdpZGVy 11601\nIG9jY3Vycw== 11602\nRFM= 11603\n5oE= 11604\nIEJhdHRsZQ== 11605\nIGR1YWw= 11606\nIDYwMA== 11607\nYXRoZXJz 11608\n4LmB 11609\nIHNldHRsZQ== 11610\nIGF2YWl0 11611\nIGRvaXM= 11612\n0LrQuNGF 11613\nYWRvcmVz 11614\nIMOz 11615\nbmVnbw== 11616\nIEdlb3JnaWE= 11617\nIFJvZw== 11618\nIGRpdm9y 11619\nIFNvbmc= 11620\nIFNwZWNpYWw= 11621\nIG11bg== 11622\nIHByZXRlbmQ= 11623\nTUFO 11624\nIHZpb2xlbnQ= 11625\nIGJlc2lkZXM= 11626\ndnk= 11627\nIE5heg== 11628\nMjk= 11629\nIHN3ZWF0 11630\nIHp3 11631\nIEh1 11632\nIEJ1aWxk 11633\nIGhvcm0= 11634\nIENhcmQ= 11635\nIOycoA== 11636\nIHJlY29tbWVuZGF0aW9u 11637\nY2FsbGVk 11638\nc3RpY2s= 11639\nIFBvbGljZQ== 11640\nIGNvbnN1bWVycw== 11641\nIGdyb2Nlcg== 11642\nIHN0dW4= 11643\nINCS0Ys= 11644\n0KM= 11645\nIERhdGE= 11646\nIHN1YnN0YW50 11647\naXJlY3Q= 11648\n4LI= 11649\nINCy0Lc= 11650\nIEFybQ== 11651\nIHNlbWVzdGVy 11652\nIEJyYWQ= 11653\nIG91cnM= 11654\nINC60L7RgtC+0YDRi9C5 11655\np2E= 11656\nIGdyYW1z 11657\nIGV4ZXJjaXNlcw== 11658\nNzU= 11659\nIHN3ZWFy 11660\nIGluY2VudA== 11661\nz4HOvw== 11662\nIGlsbGVnYWw= 11663\nIERhbW4= 11664\nIG7Dug== 11665\nIG5lY2Vz 11666\nIGN1eg== 11667\naWNvbg== 11668\nIGhvcnM= 11669\nIENvbW8= 11670\nIOuRkA== 11671\nIG92ZXJzZQ== 11672\nIGhhcnZlc3Q= 11673\nIHRocmV3 11674\nINC/0L7RgtC+0LzRgw== 11675\n15nXlA== 11676\nIG90cm8= 11677\nINC/0LXRgNCy 11678\nIHNjb3Bl 11679\nIGdsb3J5 11680\nIE1pY2hpZ2Fu 11681\nIGFzc3VtaW5n 11682\nINGD0LQ= 11683\nIGJvbGQ= 11684\nZ3Vl 11685\nbW90aGVy 11686\nIHdhcmVu 11687\nINil 11688\nIEthbQ== 11689\naXNwaWVs 11690\nIHRvdWpvdXJz 11691\nIGNvbnN0aXR1dGlvbg== 11692\nIH4= 11693\nIGZyYW5rbHk= 11694\nb2xlbg== 11695\nb25zY2lvdXM= 11696\nIHfDvHJkZQ== 11697\ndGhvbg== 11698\nIE9G 11699\n7J6Q6w== 11700\ndW5kYQ== 11701\nINC/0L7RgA== 11702\nIGVtcGxveW1lbnQ= 11703\n0ZHRgg== 11704\nIHN0ZWFt 11705\nIERJ 11706\nIHByb2Zlc3Npb25hbHM= 11707\nIGVuZ2luZWVycw== 11708\nIFhpYQ== 11709\n56s= 11710\n7JiB 11711\nIER1bg== 11712\nIGJpdGNo 11713\nIEZvcmQ= 11714\nc2VjdGlvbg== 11715\nIHZpY2U= 11716\nIExhdGVy 11717\nb3N0b24= 11718\n0Y3Rgg== 11719\n16Y= 11720\nIEF6dXJl 11721\ncGxpbmc= 11722\nIDE4MA== 11723\nIENyZWF0 11724\nSVNIQQ== 11725\nIGJ1ZW5v 11726\n7Z2s 11727\ncnVw 11728\nbGVycw== 11729\nIFlhbmc= 11730\nIEhB 11731\nYmF0 11732\nIENhdGhvbGlj 11733\nIGFjY2VudA== 11734\nIG1peGluZw== 11735\nY2tldHM= 11736\nIGVuaGFuY2U= 11737\nw7xocg== 11738\nw6pz 11739\nIO2W 11740\nIHN3aW1taW5n 11741\nIGPhu6dh 11742\nIEVsaXo= 11743\nIGltbXVuZQ== 11744\nINCx0L7Quw== 11745\nIGZhcmU= 11746\nIEdhYg== 11747\n16E= 11748\nIHNhdGVsbA== 11749\nIEFueXRoaW5n 11750\nIGFzc2V0 11751\nIHNjaGVkdWw= 11752\nIHJhZGljYWw= 11753\nIHp3ZWk= 11754\nIE1F 11755\ncmVsYXRlZA== 11756\nIHNlcGFyYXRlZA== 11757\nIExpYnI= 11758\nIGdyaXA= 11759\nIOCuqg== 11760\nIGJlYW5z 11761\nIE9w 11762\n7IaM 11763\nIHBvdW5k 11764\nIGVudHJhbmNl 11765\nz4Y= 11766\nIE5pZQ== 11767\nIFJlcHVibGljYW5z 11768\nIGF0b20= 11769\nIHBlcnNvbmFz 11770\nIEFsaQ== 11771\nw6Rocg== 11772\nIGRyYW1hdGlj 11773\nIEZpbmU= 11774\nIHJlbWluZHM= 11775\n6Jk= 11776\nIGTDqWrDoA== 11777\nIGFmZm9yZGFibGU= 11778\nIGJyYW4= 11779\naWVybw== 11780\nYWxhcg== 11781\nY3U= 11782\nIFw= 11783\nIG1vxbxl 11784\nIGJsYXN0 11785\nIHJlY3k= 11786\nZmlyZQ== 11787\nIGxsZQ== 11788\nINCy0YDQtdC80Y8= 11789\nIFdX 11790\nIHZz 11791\nIER1ZGU= 11792\nIFJvbWU= 11793\nIGdyZWV0 11794\nIEhldA== 11795\nY2lhcw== 11796\nIOuLuQ== 11797\nbGVzc2x5 11798\nIHByZW1pdW0= 11799\nIGV4cGVyaW1lbnRz 11800\nYXRhcg== 11801\nw6lyaQ== 11802\nIG9mZmljaWFsbHk= 11803\nIGZlZQ== 11804\n4LmH 11805\nINGH0LXQvA== 11806\ncmVh 11807\nIHRveQ== 11808\nT1A= 11809\nIFRheWxvcg== 11810\nIE1jQw== 11811\naWxleQ== 11812\nIEJhaw== 11813\nIGFsdW0= 11814\nIFVudGVy 11815\nIG1hZ2ljYWw= 11816\nIHRyYWJhbA== 11817\nIHZvdGVz 11818\naXRhZ2U= 11819\nIG1lY2hhbmljYWw= 11820\naG4= 11821\nINC40L3RgtC10YA= 11822\nIGhpbnQ= 11823\nIGF1dGhvcml0aWVz 11824\nIE5BU0E= 11825\naXZlcnNhcnk= 11826\nINC/0L7Rhw== 11827\ncmFj 11828\nIFNQRUFLRVI= 11829\nw7Z0 11830\nIGZyYW1lcw== 11831\nIGdvb2RieWU= 11832\nIGNoZXI= 11833\naHU= 11834\nIG5ldXI= 11835\nIE1hY2g= 11836\nIEhlbGw= 11837\nIGZlc3RpdmFs 11838\n64WE 11839\ndXRh 11840\nIG11c2hyb29t 11841\nIHRhbnQ= 11842\nIHRhdHRv 11843\nIGRlbGV0ZQ== 11844\nIGRpeg== 11845\nIHbDpA== 11846\nIHNldmVudA== 11847\nIFF1aWNr 11848\nIGJha2luZw== 11849\nIGFzc2VtYmx5 11850\nR28= 11851\nIERyZWFt 11852\nIExhZA== 11853\nw6J5 11854\nYWdz 11855\nIGdyYXZpdHk= 11856\nIOynkQ== 11857\nZW1wbG95 11858\nIGRpZXNlcw== 11859\nIGRpc2NvdmVyeQ== 11860\n0YHRgtCy0LA= 11861\nIGhlYmJlbg== 11862\nIGdlcmFkZQ== 11863\nIERS 11864\nICcn 11865\nIHRlY2huaWNhbGx5 11866\nINCf0L4= 11867\nIHByaXZpbGVnZQ== 11868\nIEV2ZXI= 11869\nIFNlcnZpY2Vz 11870\ndXJhbg== 11871\nIGNvbnN1bXB0aW9u 11872\nIFJldg== 11873\nIFNoYWxs 11874\nYXNzZXI= 11875\ntoDthLA= 11876\nIHJhY2lhbA== 11877\nIFlvdXR1YmU= 11878\nIFByYQ== 11879\n0YHRgtCy0LXQvQ== 11880\nY2Vr 11881\n5rQ= 11882\nYXNoYQ== 11883\nINuB 11884\nkZw= 11885\nYWhu 11886\nSUNL 11887\nIGRyaW5rcw== 11888\nIGNhcmI= 11889\nIDY0 11890\nIE1tbQ== 11891\nIGVsZWN0cmljYWw= 11892\nIGZydWl0cw== 11893\nIEhE 11894\nw7Fh 11895\nIERlZmluaXRlbHk= 11896\nIOuwmw== 11897\nIGZhaXM= 11898\ncmF0aW9ucw== 11899\nIGNvZQ== 11900\nYWh1 11901\nIEZhaXI= 11902\nIGVhdGVu 11903\nIGZpcg== 11904\nIEF1 11905\n0YPQvQ== 11906\ndWxhdGluZw== 11907\naW5nbHk= 11908\nIHZhY2NpbmVz 11909\nIGRyYWdvbg== 11910\nIHBvaW50aW5n 11911\nIHBlbG8= 11912\nb3J0ZXJz 11913\nIHdvcmtvdXQ= 11914\n0LjQvNC10YA= 11915\nbW9uZA== 11916\nIE5vcGU= 11917\nINeW15Q= 11918\nINmC 11919\nIGFkb3B0ZWQ= 11920\nYnVs 11921\nIHNhbnM= 11922\nIHBvc3NpYmlsaXRpZXM= 11923\nIHBlbmQ= 11924\nIHphbWFu 11925\naG91 11926\nIHNoYXJlcw== 11927\nIGNhbGVuZGFy 11928\nIHBlcnNvbmE= 11929\nIHNlYWw= 11930\nIGdlbmU= 11931\nIHN0b3JlZA== 11932\nINC/0L7Qtw== 11933\nIGx5cmljcw== 11934\nIGluc3RydW1lbnRz 11935\nIE1B 11936\ngOydtA== 11937\nIGNsb3Vkcw== 11938\naG90 11939\n4bqv 11940\nIOqwmeyVhOyalA== 11941\nIEVtcGlyZQ== 11942\nIGJpbw== 11943\nd2luZA== 11944\naWVnbw== 11945\nIEV1cm9w 11946\nZWRnZQ== 11947\nIGJhY2t3YXJkcw== 11948\nIOyngOs= 11949\nIHF1ZWVu 11950\nIHNoaW5l 11951\nIMOnxLFr 11952\nIGNhZA== 11953\nIE9k 11954\nIOyCrOuejA== 11955\nIGJ1YmJsZQ== 11956\nw7Rp 11957\nemVz 11958\nIHJlYWN0aW9ucw== 11959\nIGp1ZGdtZW50 11960\nIERlbW9jcmF0cw== 11961\nIGNvc2Fz 11962\nYXNoZWQ= 11963\nINC00L7Qu9C2 11964\nxZtuaWU= 11965\n6rQ= 11966\nIGV4ZW1wbGU= 11967\nTVA= 11968\n4buv 11969\nIFZlcnM= 11970\nIHJlc2ls 11971\nIG3DoQ== 11972\nxYRzdA== 11973\nYmVsaWV2 11974\nIFZvcg== 11975\nIHNjaGVtZQ== 11976\nb25kYQ== 11977\nIHBvZGVtb3M= 11978\nIGNoYXJnZXM= 11979\nIGRlc3RpbmF0aW9u 11980\nIEt5 11981\nIFNT 11982\nIHNpbGVuY2U= 11983\nIGVtYmVk 11984\nbmF0 11985\n4bubaQ== 11986\nQU5U 11987\nZ2dlZA== 11988\nIHJlZHVjaW5n 11989\nIHVnbHk= 11990\nIG1pbQ== 11991\n0YPQtNCw 11992\nMzQ= 11993\nIGNvcmQ= 11994\nINGC0L7QttC1 11995\nIExpc2E= 11996\nIMO2bg== 11997\nIENocmlzdGlhbnM= 11998\ndW1ibGVz 11999\nb2xvZ2lzdHM= 12000\nYXph 12001\nIHRlbmRz 12002\nIENvb2s= 12003\nIGdlc2FndA== 12004\nIO2VmOuCmA== 12005\nIFRlcw== 12006\nZXJlbW9ueQ== 12007\nINC90YPQttC90L4= 12008\nIE1BUklTSEE= 12009\nIGVucm9sbA== 12010\nIENyeQ== 12011\nRVNT 12012\nIFNhZA== 12013\nIGltcGxlbWVudGVk 12014\nIGTDrWE= 12015\nw5w= 12016\nIHBpc3Q= 12017\nRHI= 12018\nIHNhYmU= 12019\nIFNvY2k= 12020\nw6RyZQ== 12021\nINC60YLQvg== 12022\nIEZyYW5jaXNjbw== 12023\nIOyepQ== 12024\nIGNyZWF0dXJlcw== 12025\nYXdz 12026\nIGVhcm5lZA== 12027\nIGNoZWFwZXI= 12028\nIGRsYQ== 12029\nIHdhcm4= 12030\nc2NoZQ== 12031\nIGJsYWg= 12032\nIG51dHI= 12033\n6Lw= 12034\nIGdvcmdlb3Vz 12035\nIEFuZ2VsZXM= 12036\nIGdlbWFjaHQ= 12037\nIGhvbWVsZXNz 12038\nb2dyYXBoaWM= 12039\nIFRhaXdhbg== 12040\nIFNvbQ== 12041\nIEhhZA== 12042\nYWN0aW9ucw== 12043\nIHBvc3Rz 12044\nIG91dHJh 12045\nIE1lYW4= 12046\na2Fy 12047\nIGNvdXM= 12048\nIGJyYWNr 12049\n0LjRgtGM0YHRjw== 12050\nIGJlbGlldmVz 12051\nIHN1aWNpZGU= 12052\nIGVxdWFsbHk= 12053\nIGNhcmVz 12054\n0L7QttC90L4= 12055\nIHN0ZW0= 12056\nIE11Y2g= 12057\nIHByb2R1Y2Vy 12058\n15XXkA== 12059\nIHByb3RlY3Rpbmc= 12060\nIFRSQVZJUw== 12061\nIGludGVydmlld3M= 12062\nIGFsaWVu 12063\nIEFzaw== 12064\nIHNvbGU= 12065\nQ08= 12066\nIFN1ZA== 12067\nIHN1cnZpdg== 12068\nIHNrZXRjaA== 12069\nIHfFgmE= 12070\nIGNvbG9j 12071\nIGFwb2xvZ2l6ZQ== 12072\nd2VpZ2h0 12073\nIDU1 12074\nID4= 12075\nIGhlcm9lcw== 12076\nIEJvc3Rvbg== 12077\nIGRlcGVuZGVudA== 12078\nIG1vdGl2YXRpb24= 12079\nZmxpeA== 12080\nIHNlYW0= 12081\n0LrQuNC1 12082\nIGRyYWlu 12083\nb2RlZA== 12084\nIGd1aWx0eQ== 12085\nIEplbm4= 12086\naW5nZW4= 12087\nIGdyYW50ZWQ= 12088\nIEtlbGx5 12089\nIFNhdg== 12090\nIFVuY2xl 12091\nIEhvbmVzdGx5 12092\nRUxJ 12093\nIG5hdmlnYXRl 12094\nIGJsZXNzZWQ= 12095\nY29yZQ== 12096\nIGVhcm5pbmc= 12097\nIHNpZ25hbHM= 12098\nIGRpc2s= 12099\naWFscw== 12100\nIGFnZXM= 12101\n5oU= 12102\nIHBhcnRpY2xl 12103\nINGH0LXRgA== 12104\nIGNhbm4= 12105\nIHRpZXI= 12106\nIHN0YXRlbWVudHM= 12107\n6rOg7JqU 12108\nIOuVjOusuOyXkA== 12109\nIENobw== 12110\nIHBvbGFy 12111\nYW7Dpw== 12112\nIEtlbm4= 12113\nIE5p 12114\nIEZpZ2h0 12115\nb3JnYW4= 12116\n6ZU= 12117\nIENoYQ== 12118\nIFPDrQ== 12119\nIHNsaWM= 12120\nIGNlcnRpZmlj 12121\nIHRlbXBsYXRl 12122\nIEZlZGVyYWw= 12123\nIGNvbnNpZGVyYXRpb24= 12124\nIGV4cGxv 12125\nIE1haW4= 12126\nIE5F 12127\nIGFsb25nc2lkZQ== 12128\nIGRyZXNzZWQ= 12129\nIFBvaW50 12130\nIGVudmlyb25tZW50cw== 12131\nIHByw7N4aW0= 12132\nIGRhYXI= 12133\nIHByb21wdA== 12134\nIHB1cnN1ZQ== 12135\nIGVudGVydGFpbm1lbnQ= 12136\nIHRocm9hdA== 12137\nIHByb2JsZW1h 12138\nIG1hcnQ= 12139\n7Lw= 12140\nIHByb3ZpZGVy 12141\n2Iw= 12142\nINeX 12143\naW50ZQ== 12144\nbWFraW5n 12145\nIHN0cm9rZQ== 12146\nIHRpc3N1ZQ== 12147\nVW4= 12148\nIHByZWNpb3Vz 12149\nIEFydHM= 12150\naW5raW5n 12151\nINCe0L0= 12152\nINC40YE= 12153\nbmFo 12154\nINCV0YHQu9C4 12155\nIGNvcm5lcnM= 12156\nIHRyaWNreQ== 12157\naW5jaA== 12158\nbGlqaw== 12159\nIHByZXNzaW5n 12160\nbGV2ZWw= 12161\nQU5H 12162\nIHJhZGlhdGlvbg== 12163\n7ISg 12164\nIGNvbmZyb250 12165\nIHZldA== 12166\nIHJlcHJlc2VudGF0aXZl 12167\nIHByb3BhZw== 12168\nIGNyYXA= 12169\nIERlYw== 12170\nIHJhbXA= 12171\n0LXQv9C10YDRjA== 12172\ndcOpcw== 12173\nZXNzZW4= 12174\nY3JpcHRpb24= 12175\nIGJpbGxz 12176\nIE1hdHRoZXc= 12177\nIGFuaW1l 12178\n4bqldA== 12179\nIGxvd2VzdA== 12180\naGFz 12181\nc2NyZWVu 12182\nb2dyYXA= 12183\n0LDQu9C+ 12184\naW50b24= 12185\nIEphaA== 12186\naXTDoA== 12187\nIGtheQ== 12188\nIHJvdGF0aW9u 12189\nIFdlcmU= 12190\nYWJlaQ== 12191\nIHRyaWFscw== 12192\nIGxldmVy 12193\naWdodHk= 12194\nIHNwb29u 12195\nIGh1bnQ= 12196\nY2xpbmc= 12197\nIGRpc20= 12198\nINCx0L7Qu9GM0Yg= 12199\nIGFzc2F1bHQ= 12200\nIO2YlQ== 12201\nIHdlZWtseQ== 12202\nIG1pc21v 12203\nIGdlbmV0aWM= 12204\ndWxwdA== 12205\nIFN0dWRlbnQ= 12206\nIHJlYWxpc3RpYw== 12207\nIGF1dGhlbnRpYw== 12208\nYXN0YQ== 12209\nIGFycmVzdGVk 12210\nIGd1aWRlbGluZXM= 12211\nINec15A= 12212\nINC00LDQsg== 12213\nIENvbWluZw== 12214\nZsO8cg== 12215\nIHJlcXVlc3Rz 12216\ng5A= 12217\nIGFuYWx5emU= 12218\nIGludGVyZXNz 12219\nIGhhbHQ= 12220\nIE9wZXI= 12221\nb25vbQ== 12222\nIGR1Y2s= 12223\nIHdpdGhk 12224\nc2Vy 12225\nIM+M 12226\nIEhpc3Rvcnk= 12227\nIHlvdXR1YmU= 12228\nIHNhYmVy 12229\nd2Fsaw== 12230\nZm9udA== 12231\nIG92ZXJ2aWV3 12232\nMzk= 12233\nw7x5 12234\nZXR0aQ== 12235\nIGZyb3plbg== 12236\nIGZsZXNo 12237\nxJ9p 12238\nIFBN 12239\nIOyZgA== 12240\n6aI= 12241\n0YbQuNC4 12242\nIOq4sOs= 12243\n7YGs 12244\nIHByb3Nl 12245\nb29vbw== 12246\ncmF0ZXM= 12247\nV1M= 12248\nIGF1dG9tYXRpYw== 12249\nIGNvbGxlY3Rpbmc= 12250\nxZE= 12251\nIG5laWdoYm9ycw== 12252\nwrsu 12253\nIEV4cGw= 12254\nIGNpcmN1bA== 12255\nY292ZXI= 12256\nd2Vn 12257\nIHN0aWNrcw== 12258\nIGVsbGVy 12259\nIHd3dw== 12260\nIGRvcm0= 12261\nIEV4cGVy 12262\nIHN0YXRpc3RpY3M= 12263\nIGVtYWlscw== 12264\nIGdyYXZl 12265\naW1peg== 12266\nSFM= 12267\nIHVpdA== 12268\nLCc= 12269\nIGxhc2Vy 12270\n6Ik= 12271\nINGC0LXQvA== 12272\n0YvRiA== 12273\n0YnRkQ== 12274\nIGdlbmF1 12275\nIHRpZW5lbg== 12276\nIG1lZGl0YXRpb24= 12277\nIE9yZ2Fu 12278\nIGVzdGltYXRl 12279\nIOustOw= 12280\nbGV0cw== 12281\nIG7DoHk= 12282\nIG1pbmRzZXQ= 12283\nIHJlc29u 12284\nIG3DqXM= 12285\nIG51bWVyb3Vz 12286\nIHZpZWxsZWljaHQ= 12287\nIFRoaXJk 12288\ndW91cw== 12289\nIERlYWQ= 12290\n0LDQvdC0 12291\nSE4= 12292\nIHJhY2luZw== 12293\nIGFnZW50cw== 12294\nIFV0 12295\nIHRlYXI= 12296\nIEhQ 12297\nIGNoZW1pc3RyeQ== 12298\nIHN1cnZpdmFs 12299\nIGNvbnZpbmNlZA== 12300\nIDs= 12301\nIHJlZ3VsYXRpb25z 12302\nIEVT 12303\nMzAw 12304\nIGVuc2U= 12305\nIOy1 12306\nIGRpY3Q= 12307\nR0E= 12308\nIGFow60= 12309\nIHRlag== 12310\nINC+0YHRgg== 12311\nIEVsZWN0 12312\nIGludGVsbGVjdHVhbA== 12313\nIGJpYXM= 12314\nIGJ1cmRlbg== 12315\nIOyWtOuWuw== 12316\nIGNoZWVy 12317\nIHNvcGg= 12318\nIHBvcnRmb2xpbw== 12319\ndWJh 12320\nIGVzdG9z 12321\nVFY= 12322\nRm9y 12323\nIGFzaA== 12324\nIGtvbW1lcg== 12325\nIGNvbGxlY3RpdmU= 12326\nIHdyZXN0 12327\nIEpldHp0 12328\nIFdhdA== 12329\ncmVpY2g= 12330\nIHByaW1lcg== 12331\nYWN0aXZl 12332\nIG1pZQ== 12333\naWNrZWQ= 12334\nIGh1bnRpbmc= 12335\nIHRlc3RpbQ== 12336\nIGNvbXBhc3Npb24= 12337\nINix 12338\nIGJydXQ= 12339\nIHNhbGFk 12340\n0L7QsdGJ0LU= 12341\nIHNvbHZpbmc= 12342\nIGZsb2F0aW5n 12343\n57c= 12344\nIGF0dHJhY3RpdmU= 12345\n2YjZhA== 12346\nIHBlcmQ= 12347\naWZmZXI= 12348\nIHNjdWxwdA== 12349\naGho 12350\nIFdlZWs= 12351\nIGVudGh1cw== 12352\nIG5hZA== 12353\nIG1lcmNo 12354\nIO2ZlQ== 12355\nIG1pbGU= 12356\nIM64 12357\nIOuCmOs= 12358\nMzg= 12359\nIGNoYWlucw== 12360\nIEFsbW9zdA== 12361\nIHRpY2tldHM= 12362\ncmlu 12363\nIEND 12364\nIGRpc3RyaWJ1dGVk 12365\nYWJldGVz 12366\nIHRlbXBlcmF0dXJlcw== 12367\nIGdhaW5lZA== 12368\nIGZsZXhpYmlsaXR5 12369\nIHNjcmVhbWluZw== 12370\nIGFicm9hZA== 12371\ndW5v 12372\nIGVudHJlcHJlbmV1cnM= 12373\nIE5ldHdvcms= 12374\nIENhbmFkaWFu 12375\nIHByZXY= 12376\nIHPDtg== 12377\nINGC0LXQsdGP 12378\nIFBva2U= 12379\nIFBvZA== 12380\nIFR1cmtleQ== 12381\nIGFic3RyYWN0 12382\nIHNuYWtl 12383\nIEFteQ== 12384\nIOuKkOuCjA== 12385\nIGJyYXZl 12386\nIOyeiOyWtOyalA== 12387\nIEthbA== 12388\nIDIwMDc= 12389\nw6FyaW8= 12390\nIG1hcmtlZA== 12391\nZ2luZXM= 12392\nIGFsbG9j 12393\nT05H 12394\nIHNjaWVudGlzdA== 12395\nIGVzY2E= 12396\nIHJhY2lzbQ== 12397\n15HX 12398\nIFNhbXM= 12399\nIFBlbm4= 12400\nIGxvYWRz 12401\nIOCuqA== 12402\nw7xiZXI= 12403\nTWU= 12404\naXjDsg== 12405\nIHBlcsOy 12406\nYW5uZQ== 12407\nIGV4cHJlc3NlZA== 12408\n0LzQtdGA 12409\nIG1vZXQ= 12410\nIHJldHVybmluZw== 12411\nbmlh 12412\nIGV4cG9u 12413\nUHJv 12414\nIGxveWFs 12415\nTUw= 12416\nIGxhbXA= 12417\nIHNoeQ== 12418\nIGNvbXBvc2l0aW9u 12419\nIEx5 12420\nIG1hZ25ldGlj 12421\nIHByZW1pZXI= 12422\nIG1lYXN1cmVk 12423\nIHN1bW1hcnk= 12424\nIGF0dGFja2Vk 12425\nIGZpbmlzaGluZw== 12426\n0Jc= 12427\n56U= 12428\nIHNpdHM= 12429\nIGh5ZHJvZ2Vu 12430\nIG1haQ== 12431\nIERldXRzY2g= 12432\nYXPEsQ== 12433\nIG9idGFpbg== 12434\ndmll 12435\nIHNvaXQ= 12436\nIOuwlA== 12437\nIGxhbmU= 12438\nIGNvbnNlZ3U= 12439\n0LLQvg== 12440\nIGVhc2U= 12441\nYWtpbg== 12442\nIEZh 12443\nIHVudHVr 12444\nIGJ1cnN0 12445\nIGN1bQ== 12446\nYWzEsW0= 12447\nw7pibGlj 12448\naWRp 12449\nIFJveWFs 12450\nIEtvbg== 12451\nIGNvbW1vbmx5 12452\nIHJlbW92aW5n 12453\nIGp1cg== 12454\naWxpYg== 12455\nIGFuY2g= 12456\n7ZaJ 12457\nxrDhu6M= 12458\nINCc0Ys= 12459\nIEFudGg= 12460\nIFPDpQ== 12461\nIGludGVycnVwdA== 12462\nIHN0ZXJl 12463\nIE9T 12464\nb255bQ== 12465\ndGVyeQ== 12466\nIE1hcmlh 12467\n6rKD 12468\nIGV4cGxvcmluZw== 12469\nIHRyYW5zcGFyZW50 12470\nIGZhdGU= 12471\nIEp1bmc= 12472\nIGdydXA= 12473\nIGRhcmtlcg== 12474\nIERvdWc= 12475\nIG1hbmU= 12476\n4bqhaQ== 12477\nZHJp 12478\nbG9vaw== 12479\nIERlc2lnbg== 12480\nIHR1dGFq 12481\nIGhvcml6b250YWw= 12482\ncmVvbg== 12483\nb3J0ZQ== 12484\nIENvcnJlY3Q= 12485\nIFN0ZXZlbg== 12486\nIHZpbmU= 12487\nMDI= 12488\nacSH 12489\nIHNpZW1wcmU= 12490\nIEtleQ== 12491\nIEdhbWVz 12492\nIG5hYXI= 12493\nIHNob2NrZWQ= 12494\nZWx2ZQ== 12495\nIFJvc2U= 12496\n7Ius 12497\nIHN0b3BwaW5n 12498\nb2hs 12499\nIE1peA== 12500\nIHN1ZmZlcmVk 12501\nIHNpZ21h 12502\nIHdlYWtuZXNz 12503\nIE93 12504\n4Li14LmI 12505\nSUY= 12506\nIOCuhQ== 12507\nYWRlZA== 12508\nIE5ldGZsaXg= 12509\nYW5lcw== 12510\nIHJlbWFpbmVk 12511\naXJ5 12512\nIHJpcA== 12513\nZWxsdA== 12514\nIHNpbGVudA== 12515\nIHByb3Zlbg== 12516\nIHRveGlj 12517\nIGFsdW1pbg== 12518\nIG11bHRpcGw= 12519\nYWxhbmQ= 12520\nIDM0 12521\nMDY= 12522\nIEJydQ== 12523\nIOygleunkA== 12524\nSnVzdA== 12525\nYm95 12526\nIHNob2U= 12527\nIGNyZWF0dXJl 12528\nIGhlYWRlZA== 12529\nINC+0YLQug== 12530\n5rE= 12531\nIGVzc2VuY2U= 12532\nIHJlbWFya2FibGU= 12533\nIG7Dum1lcg== 12534\nIGRyZXc= 12535\nIHB1enpsZQ== 12536\nIExpYnJhcnk= 12537\nIEZ1 12538\nYXNoZXM= 12539\na2s= 12540\nIElzdA== 12541\nprA= 12542\nIEJyeQ== 12543\nIGNlcmVtb255 12544\nIOCujg== 12545\nIGNyaQ== 12546\nZXF1 12547\nIHByaXpl 12548\nIGRpbWVuc2lvbnM= 12549\nb2dyYW0= 12550\nIGxlYXRoZXI= 12551\nIHBvcHVsYXRpb25z 12552\ndXVt 12553\nIHZlZ2Fu 12554\n0Y/QtA== 12555\nIGPDs21v 12556\n5YQ= 12557\nIHN0cmlw 12558\n5aM= 12559\nIHZhY2F0aW9u 12560\nhZU= 12561\nIG1lYWxz 12562\naWxpcHA= 12563\nIGVudHM= 12564\nYXJhbQ== 12565\ncmljaHQ= 12566\nIGdyYWlu 12567\nIFNwYWlu 12568\nIGNoZWVr 12569\nIEFmZg== 12570\nSU9O 12571\nIEJyaW5n 12572\nIDM4 12573\naWVsZW4= 12574\ndWx1 12575\nINCx0L7Qu9GM0YjQtQ== 12576\nIGFubm91bmNlbWVudA== 12577\nINGC0YPRgg== 12578\nIFByb3BoZXQ= 12579\nYXJkbw== 12580\nMzc= 12581\nIHdva2U= 12582\nIHRyYW5zbGF0aW9u 12583\nIE5PVA== 12584\nIENM 12585\nIGTDvMWf 12586\n0YbRlg== 12587\nYWNlcg== 12588\nIExvYw== 12589\nIHBlcmNlcHRpb24= 12590\nTk8= 12591\nIGRpZXNlbg== 12592\nTG9vaw== 12593\naGVhcnQ= 12594\nYXZlZA== 12595\nIGJvdW5kYXJ5 12596\nIGZsb3dz 12597\n0ZHQvA== 12598\nIGFyZ3VtZW50cw== 12599\nIGVsZWN0aW9ucw== 12600\nxLFz 12601\nIGhlY2s= 12602\nIHN1aXRhYmxl 12603\nIGZpYmVy 12604\nIFN0cmE= 12605\neHk= 12606\nIEh1bQ== 12607\nIG1vbnRobHk= 12608\ndXBlcg== 12609\nIGdvbGY= 12610\nIGxhdGVseQ== 12611\nIEdhcmQ= 12612\nIFJlbg== 12613\nIEFzdA== 12614\nIEZhbnQ= 12615\n0LDRgdGB 12616\nIG9ic2Vy 12617\n66Gc 12618\nIGVhc2llc3Q= 12619\njZTr 12620\nIHdlYnNpdGVz 12621\ncG9s 12622\nIGNvY29u 12623\nIOCuhw== 12624\nIFZlZw== 12625\nIHdhbGtz 12626\nIGludHJv 12627\nIGRpcmVjdGVk 12628\nIEFubmE= 12629\nIOuTpOyWtA== 12630\nIEVhc3Rlcm4= 12631\nIFNhaW50 12632\nIEJvdw== 12633\nIHJvYXN0 12634\nIFVSTA== 12635\nIGplZGVu 12636\ndXJhcw== 12637\nYWph 12638\nIHNlbWk= 12639\nIHJhcGlkbHk= 12640\nIHRhcmdldHM= 12641\nIENvbnRyb2w= 12642\nIGJhaA== 12643\nIHJlZmxlY3Rpb24= 12644\nIGNyZWF0aXZpdHk= 12645\naG9sZGVycw== 12646\nIOyYrOs= 12647\nIGFtb25nc3Q= 12648\nIGZlZWRpbmc= 12649\n0Y3RgtC+0LzRgw== 12650\nINCy0LjQtNC1 12651\nIOunjOuTpA== 12652\nIFNtYXJ0 12653\nIHJlbGlhYmxl 12654\nIHZlemVz 12655\nINeo 12656\nY2h1Y2tsZXM= 12657\nYXppb25l 12658\nIFdpbGxpYW1z 12659\nIGHDpw== 12660\nIHNsZWU= 12661\n0LXRiQ== 12662\nIHRpbWVsaW5l 12663\nIHRob3JvdWdo 12664\n4buN 12665\nIE90 12666\n4bqhbg== 12667\nIGltYWdpbmF0aW9u 12668\nIG1lY2hhbmljcw== 12669\ncmlzdA== 12670\nIGNsYWltZWQ= 12671\nz4TOtw== 12672\nw6p0ZQ== 12673\nIEh1cnJ5 12674\nIGlQYWQ= 12675\nIGNvbnN0cnU= 12676\nIENsYQ== 12677\nIEFscw== 12678\ndXR6 12679\nIGN1bHR1cmVz 12680\nIOyWtOuWu+qyjA== 12681\nIGJlbG9uZ3M= 12682\nIHllcg== 12683\nIERvZXNu 12684\nIGdlb21ldA== 12685\nIGJpZA== 12686\nIGZvYW0= 12687\nIGhvYg== 12688\nIEJyaXRhaW4= 12689\nIHN1YnN0YW5jZQ== 12690\nIGFubml2ZXJzYXJ5 12691\nIOuEiA== 12692\nIG5vdGVk 12693\nIGdvdmVybm9y 12694\nIHN0b2Nrcw== 12695\nMzE= 12696\nIGRpeWU= 12697\n7Iqk6w== 12698\nIHJlYg== 12699\nemVs 12700\nIG11bHRpcGx5 12701\nIG9wZXJhdG9y 12702\nhKTsmpQ= 12703\nIHdhdGVycw== 12704\nIGTDpHI= 12705\nIHVuc2Vy 12706\nIEVsaXphYmV0aA== 12707\nIGluY3JlYXNpbmdseQ== 12708\nIEdybw== 12709\nIGVuZ2luZXM= 12710\naXJz 12711\n2Ks= 12712\nIHRyZWFzdXJl 12713\nUEM= 12714\naW5jdGlvbg== 12715\naXJp 12716\nIGFjY3Vt 12717\nIHZhcmlhdGlvbg== 12718\nIHBvbQ== 12719\nIHRpdGxlcw== 12720\nIEZlc3Q= 12721\nw7Nz 12722\nIGVsZGVy 12723\nbnlt 12724\ncnVu 12725\n0Y/Qsg== 12726\nIGlubm92YXRpdmU= 12727\nIG5vbWJyZQ== 12728\nIGNvaW5j 12729\nIGZyYW5jaA== 12730\nIGVudG9uY2Vz 12731\nIG5pY2h0cw== 12732\nIGV4Y2x1c2l2ZQ== 12733\nIENoZWVycw== 12734\nIEJp 12735\ndWpl 12736\nIHBvaw== 12737\nIFByZW0= 12738\nIHJvY2tldA== 12739\nRUxJUEU= 12740\nIGhvc3BpdGFscw== 12741\ncml1bQ== 12742\nIGp1c3Rl 12743\nIGhhbW1lcg== 12744\nIHF1YW50dW0= 12745\nIHJlc3BvbnNlcw== 12746\nbGx5 12747\nZW5kaQ== 12748\nIGFjdGl2ZWx5 12749\nIGZyaWRnZQ== 12750\naWF0ZQ== 12751\nbG9uZw== 12752\nIHF1ZW0= 12753\nIGRlYXRocw== 12754\nIHN1cGVyaW9y 12755\nY2tlbg== 12756\n7J207JeQ 12757\na3RvcA== 12758\nIGdhdGhlcmVk 12759\no6g= 12760\nIGRhenU= 12761\nIHJlY2lwZXM= 12762\nIGJ1eno= 12763\nY2Vu 12764\nIGFueXRpbWU= 12765\nb25zZW5zZQ== 12766\nIGNpcmNsZXM= 12767\nIHNvbHZlZA== 12768\nIOyLoA== 12769\nIGNvcm9uYXZpcnVz 12770\nIEx1a2U= 12771\nIGJ1YmI= 12772\nIGNvbnRlbXBvcg== 12773\ncnp5 12774\nIEphbmU= 12775\nINC00L7QvA== 12776\nIHNjcmV3cw== 12777\nIGh5YnJpZA== 12778\nIGNhc3VhbA== 12779\nIHNlbGJzdA== 12780\nYmVpbmc= 12781\nIMSQ 12782\nIENvbHVtYg== 12783\nINGF0L7Rhw== 12784\nIGJ1Y2tldA== 12785\nIGV2YWx1YXRl 12786\nIGlkb2w= 12787\nIHJlcHV0YXRpb24= 12788\nIOyGjOs= 12789\n2YjYsQ== 12790\nIGhlY2hv 12791\nIHBvZW0= 12792\nIHN1YmplY3Rz 12793\ncGxhbnQ= 12794\nIEJlaA== 12795\nIFNwZWFraW5n 12796\nIGJhdHRlcmllcw== 12797\nIGZvbGxvd2Vycw== 12798\nw7Zs 12799\nIGdlbnRseQ== 12800\nIHNpeHQ= 12801\nIHBhcmFtZXRlcg== 12802\nIGlra2U= 12803\nIFRvdXI= 12804\nIERK 12805\nb3R0ZQ== 12806\nIEphaHJlbg== 12807\nIHByZXBhcmF0aW9u 12808\nINC00YPQvA== 12809\nIDgwMA== 12810\nY29w 12811\naWtpbmc= 12812\nIOusuA== 12813\nINC90YM= 12814\nINC70LXRgg== 12815\nIElkZQ== 12816\nIOyhsOq4iA== 12817\nIGxhdWdodGVy 12818\nIG1vbGVjdWxlcw== 12819\nIFJlc3Q= 12820\nIG9ic2VydmVk 12821\nZHppZQ== 12822\nIGFkdmVydGlzaW5n 12823\nZXJ0bw== 12824\nIG1vaW5z 12825\nIE1JVA== 12826\nIGV4Y2l0 12827\nIHR1bQ== 12828\nIHR5bA== 12829\nIGludmVzdGVk 12830\nIHBoYXJt 12831\nIHVuZXhwZWN0ZWQ= 12832\nIHBoaQ== 12833\nb3R5cGU= 12834\nd2Vpc2U= 12835\nIGdlw6c= 12836\nam91cmQ= 12837\nIGhvcnNlcw== 12838\nbsSF 12839\nPSI= 12840\nIFNN 12841\nIGZpYg== 12842\nIGNsaXBz 12843\nIHJlZ2ltZQ== 12844\nIHJvdGF0ZQ== 12845\ncm91 12846\nbmlr 12847\nIGFybW9y 12848\n8J+Y 12849\n0LXRgNCw 12850\nIE9jaA== 12851\nIHJpY2h0aWc= 12852\nw7x6ZWw= 12853\nYW5lb3VzbHk= 12854\nbWVr 12855\nIFhpYW8= 12856\nIGV4aXN0ZWQ= 12857\nd29ydGg= 12858\nIG5hdWdodA== 12859\nIGhlacOfdA== 12860\nIEJhbA== 12861\nIHJlc2lk 12862\naXZvdA== 12863\nb21hdGlj 12864\nIGhpcmVk 12865\nIGdyYWR1YWxseQ== 12866\nIG9uaW9ucw== 12867\nIGNvbXBhdA== 12868\nIGludGlt 12869\nIGpldw== 12870\nIGNvbnRyaWJ1dGlvbg== 12871\nIElyZQ== 12872\nYWNqaQ== 12873\nIHNsaWNl 12874\nIGltbXVu 12875\nIFJ1cw== 12876\nIGdyb3dz 12877\nIFNpbWlsYXJseQ== 12878\nIGhhcmRlc3Q= 12879\nIHN0cnVjaw== 12880\nIG1lYXN1cmVtZW50 12881\nLi4uXQ== 12882\ndGhleQ== 12883\nIOyggOs= 12884\nIHNuZWFr 12885\nIGFwcGxpZXM= 12886\nINC90LXQvA== 12887\n5pM= 12888\n15HXqA== 12889\nINCn0YLQvg== 12890\nIG91dHJv 12891\nIGlubm9jZW50 12892\nIG1vZw== 12893\nIFNhbXN1bmc= 12894\nIG1lcmN5 12895\nIGhhbmRsaW5n 12896\nIGludGVydmVudGlvbg== 12897\naWRheXM= 12898\nZ290 12899\nIGN1cnJpYw== 12900\nIGJvdW5kYXJpZXM= 12901\nIGNvbmZ1c2luZw== 12902\nnbzripQ= 12903\n5oc= 12904\nIHN0aXRjaGVz 12905\nw612ZWw= 12906\nIHR1bm5lbA== 12907\naXTDpA== 12908\nIGdvc3Q= 12909\naW15 12910\nIGN6YXM= 12911\nIG3DqQ== 12912\nIGNhdGFs 12913\nIFNpbW9u 12914\nIExJQU0= 12915\nbWlj 12916\nINCk 12917\nIGV5ZWw= 12918\naXNhcw== 12919\nIENQVQ== 12920\nIERvdQ== 12921\nIG7DpGNo 12922\nIGluZmluaXR5 12923\nIHJpZg== 12924\nIFBlYWNl 12925\nIEN1 12926\nIG1pbmltYWw= 12927\nIGxpc3RlbmVk 12928\nIHBvbGU= 12929\naGFsYg== 12930\nIGxvYWRlZA== 12931\nIHN0ZWFkeQ== 12932\nIEJlc2lkZXM= 12933\nw6pt 12934\nIGxhcA== 12935\nIGNvb3A= 12936\nIGZyaWVuZHNoaXA= 12937\nd29ybGQ= 12938\nIGdlaA== 12939\nIHR5bGtv 12940\nIExhdXJh 12941\nIHN1cnJvdW5kZWQ= 12942\nIEV2ZW50 12943\nIGNoYXA= 12944\nIFdvbmRlcg== 12945\nYnJlYWs= 12946\nIGRyb3Zl 12947\nIGJyb2FkZXI= 12948\nIGNoaQ== 12949\nRmk= 12950\nIGdlaGVu 12951\nIHdlc3Rlcm4= 12952\nIGludGVsbGlnZW50 12953\nIHBlcnNpc3Q= 12954\nIGZvdW5kZWQ= 12955\nIGhpc3Rvcmlj 12956\nIGZyw6U= 12957\nY2tzw6U= 12958\nIGhhbmR5 12959\nIHN5bXA= 12960\nIHJvd3M= 12961\nIG51dHJp 12962\nYnVy 12963\nIExlb24= 12964\nIHNpc3RlbWE= 12965\nIGV4dGVuc2l2ZQ== 12966\nINGD0LI= 12967\n7Y8= 12968\nIG5pZ2h0cw== 12969\nIGPDoWM= 12970\nIGNvdW50aW5n 12971\nIE11c3Q= 12972\nYWxsb3c= 12973\n0LXRgdGB 12974\nTW9t 12975\nINC90LDQtNC+ 12976\nIGJhcnJlbA== 12977\nQVJE 12978\nIGluc3RhbGxhdGlvbg== 12979\nIGluc2VjdA== 12980\nIOuFuOs= 12981\ndWrEhQ== 12982\nIMSRaQ== 12983\nIHBhY2tlZA== 12984\nIGZpY3Rpb24= 12985\nTm93 12986\nIFlheQ== 12987\nIHBlcnQ= 12988\ncm9ucw== 12989\ndW5kZQ== 12990\nYWNoZXM= 12991\nIHN0eWxlcw== 12992\nIGFwcsOocw== 12993\nb2t1 12994\nIFZpY2U= 12995\nxLFuxLF6 12996\nY29tbQ== 12997\nIGFzc2lnbmVk 12998\nIGludGVyYWN0aW9ucw== 12999\nIGFjYWI= 13000\nRkVMSVBF 13001\nIHJlc2N1ZQ== 13002\nIGluZHVzdHJpZXM= 13003\nIEFuZHk= 13004\nIHByYWlzZQ== 13005\nIGZsYW1l 13006\nIHNuYWNr 13007\n7YI= 13008\n54E= 13009\nIHN3bw== 13010\ncmVuZGVy 13011\nIGJvYXJkcw== 13012\nINGC0L7QvA== 13013\nZW5uZQ== 13014\nIHBhc3Rh 13015\nIGRldmls 13016\nIEZlbA== 13017\nIGhhdHRl 13018\nIGNvbGxlZw== 13019\nZWg= 13020\n7Ls= 13021\nIHByb2R1Y3RpdmU= 13022\nZm9yd2FyZA== 13023\n0LjQvw== 13024\nIHNtYXJ0cGhvbmU= 13025\nIGludmlz 13026\nIGJ1bQ== 13027\nIHdob2E= 13028\n7J6E 13029\nIG9ja3PDpQ== 13030\nIExhbmc= 13031\nIFN5cmlh 13032\nIHNlc2k= 13033\nzq/OsQ== 13034\nIGFwcHJvdmFs 13035\nNDg= 13036\nINC+0LTQuNC9 13037\nIOuW 13038\nIEhhcnI= 13039\nIEFkbWluaXN0 13040\nINek 13041\nIERlYW4= 13042\nZmk= 13043\nIGNpdGl6ZW4= 13044\nIHNoYXJr 13045\nMDU= 13046\nIGJvaWw= 13047\nIGluZGljYXRl 13048\n5aE= 13049\nQXJl 13050\nIGxheW91dA== 13051\nIHJlZnI= 13052\nIFBhY2lmaWM= 13053\nQUFBQQ== 13054\nIEF1c3RyYWxpYW4= 13055\nZ3Jlc3Npb24= 13056\nVm9pY2U= 13057\n0LDQu9GB0Y8= 13058\nIHNoZWx0ZXI= 13059\nVG8= 13060\nYXVwdA== 13061\nIGV2YWx1YXRpb24= 13062\nYXBvcg== 13063\nIGN1cnJlbmN5 13064\nINC80L3QvtCz0L4= 13065\naWdvcw== 13066\nIG9jdA== 13067\nIHJveWFs 13068\n6LM= 13069\nYXNpbA== 13070\nIENoaWxkcmVu 13071\nIHJpZW4= 13072\nIOuTnOs= 13073\nIGJhcnJpZXI= 13074\nIGVqZW1wbG8= 13075\nIGVr 13076\nTkQ= 13077\nZXNw 13078\n0LXQvdCw 13079\nIHBpYw== 13080\nIGtpbGxlcg== 13081\nIGludGVncmF0ZQ== 13082\nIGZld2Vy 13083\nIGRpc2FiaWxpdGllcw== 13084\nIC4uLi4= 13085\nIHRyaWFuZ2xl 13086\nIGZlZXM= 13087\nIHdpZGVseQ== 13088\nZW1p 13089\nIG92ZXJ3aGVsbWluZw== 13090\nIHpvbWI= 13091\nIGJlcmU= 13092\nIGhvb2Q= 13093\nIEF5ZQ== 13094\nIEhhcnZhcmQ= 13095\nZXY= 13096\nIM+Ezr/PhQ== 13097\nIGN1cHM= 13098\nIEF1Y2g= 13099\nem9uYQ== 13100\nIDE5OTA= 13101\nIHdlacOf 13102\nIGNydW5jaA== 13103\n5qU= 13104\nINC30LDQsg== 13105\nIG1lYXN1cmluZw== 13106\nIHN0YXRpb25z 13107\nIFN0ZXBoZW4= 13108\nIHNob3J0bHk= 13109\nIHNpZ25pbmc= 13110\nIGNvbWVkeQ== 13111\nb21v 13112\nIHN1Z2dlc3Rpb25z 13113\nIHNpZ25hdHVyZQ== 13114\nINC/0YDQuNCy 13115\nIGRpc29yZGVy 13116\nYXNrYQ== 13117\nIHdvcmxkcw== 13118\nIHByZWNpc2VseQ== 13119\nbm9ybQ== 13120\ncmF2 13121\nIENpdmls 13122\nSW50ZXI= 13123\nIENlcnRhaW4= 13124\nIGluanVyZWQ= 13125\nIHN1Z2dlc3Rz 13126\nIEdvbGRlbg== 13127\nIGN5YmVy 13128\nINi0 13129\nIHRlbXBvcmFyeQ== 13130\nIGNvb3Blcg== 13131\nIHZvdGVk 13132\nIG91Z2h0 13133\n4bqleQ== 13134\neHVhbA== 13135\nIHBhbmVscw== 13136\nIDk1 13137\nIGhhbmRzb21l 13138\nINC/0YDQvtCy 13139\nIHBlcm1pdA== 13140\nIGtlaW4= 13141\nIGJhZGx5 13142\nIG5vdGlmaWNhdGlvbnM= 13143\naXph 13144\nIE5vdGljZQ== 13145\nIGluY2x1c2l2ZQ== 13146\nIGFuc3dlcmluZw== 13147\nIO2X 13148\ndWxk 13149\n7YWM 13150\nIG5vd2FkYXlz 13151\nIDM3 13152\nIGJvbHQ= 13153\nIHN0YXRpYw== 13154\nIEhvcA== 13155\nIGF2YW50 13156\nYWpv 13157\nIOunm+yeiA== 13158\nIGZpZnR5 13159\nIEZpbmFs 13160\nIHNjb3Jlcw== 13161\nIFRhcA== 13162\nIGN5bA== 13163\nIGNvbnZpbmNl 13164\nIGFueXdheXM= 13165\nb2Rh 13166\nIOyVvA== 13167\nIHNlcnZlcw== 13168\nINGC0LDQutC+0Lk= 13169\nIFpvb20= 13170\nIHNhdmluZ3M= 13171\ndWxv 13172\nIHNvdXRoZXJu 13173\ndmlld2Vy 13174\nIGhvamU= 13175\nIHNlamE= 13176\nIHJlcHJlc2VudGluZw== 13177\niOuNmA== 13178\nbGlr 13179\nIFNvbWVib2R5 13180\nIGJlYXN0 13181\nIHN0aWNraW5n 13182\nIGluc2lzdA== 13183\nIHRhbGVudGVk 13184\nIGV4cGxhaW5pbmc= 13185\nIGF0dG9ybmV5 13186\nIHN0YWlycw== 13187\nIERvZw== 13188\n7Ys= 13189\nIGNpZw== 13190\nIHNoYXBlZA== 13191\nIHNvbnM= 13192\nz4HOuQ== 13193\ndXR0 13194\nIOyU 13195\nIHBhcmFk 13196\n7J24642w 13197\nIGhvcm4= 13198\nIEpvdXI= 13199\nYW5ubw== 13200\nIHdvcmxkd2lkZQ== 13201\nIHBhcnRpY2lwYXRpb24= 13202\npoQ= 13203\nIG3Ds3c= 13204\nIGJ1cm5lZA== 13205\nIHdyaXRlcnM= 13206\nYWxsYWg= 13207\nIEZ1bmQ= 13208\nIGNsZXZlcg== 13209\nIExldXRl 13210\nYmlu 13211\nIGJlYXRpbmc= 13212\nZm9vdA== 13213\nIOybkA== 13214\nIFN0dWRpbw== 13215\nIHZhZw== 13216\nYmV5 13217\ncnpl 13218\nIG9wcG9zaXRpb24= 13219\nINC20LjQtw== 13220\nd2hv 13221\nIOqxtA== 13222\nIHRyYWNl 13223\nINC00LXQvdGM 13224\nIGVwaWQ= 13225\nIGdlc2No 13226\nIE5hcg== 13227\nIEJF 13228\n0YPQuQ== 13229\nIFNpZ24= 13230\nZWRseQ== 13231\nIGNsYXk= 13232\nIGluc3RhbnRseQ== 13233\nIGdhdGhlcmluZw== 13234\nIEdhbGF4eQ== 13235\nIGJvcmVk 13236\nIEJ1ZGRo 13237\nY8Op 13238\nIG1hbQ== 13239\nIHNsb3Bl 13240\nIOuLpOydjA== 13241\nIHNjaMO2bg== 13242\nIHBpcg== 13243\nZ2Vm 13244\nYW1lcg== 13245\nIGjDtg== 13246\nIGNvbGxlYWd1ZQ== 13247\nIHByZXNlbnRz 13248\nYWRpdW0= 13249\nIOCutQ== 13250\nIGZhbGFy 13251\nYmVlcA== 13252\nIGRyaWVk 13253\naXNtcw== 13254\nIHJvcGU= 13255\nIHdvcmtzaG9w 13256\nIGVzdHVk 13257\nIGJhbmRz 13258\nIHRoZW1lcw== 13259\n2YrYsQ== 13260\nIHJlbWluZGVy 13261\n0YLRgw== 13262\nIEJo 13263\nIGNvY29udXQ= 13264\nINGB0YLQvg== 13265\nIENoYW5uZWw= 13266\nIGltbWlncmF0aW9u 13267\nw6Rz 13268\nLi4uLi4= 13269\nc3RvcA== 13270\nINC60LDRgA== 13271\nIGNvaW5z 13272\nINGH0LDRgQ== 13273\nIGRlc3RydWN0aW9u 13274\nbGluZWQ= 13275\nIGJhcnJpZXJz 13276\nYW50aW5l 13277\nIHByaW50ZWQ= 13278\nIGNvbmdyYXR1bGF0aW9ucw== 13279\nIEhlYXJ0 13280\nIGlucXU= 13281\ndGhh 13282\nIGhhcmRseQ== 13283\nIEF2ZW4= 13284\nIHRpbmhh 13285\nIFNvbnk= 13286\nIE5G 13287\nIGdyYWR1YXRlcw== 13288\nIHNxdWVlemU= 13289\nZXJlbXk= 13290\nz4TOuQ== 13291\nIGVwaWM= 13292\nIEp1 13293\nIG9sbQ== 13294\nIExhdWdodGVy 13295\nIGJlbGllZnM= 13296\nIENydQ== 13297\nIFRydWU= 13298\nIFNvdWw= 13299\nb3dlZW4= 13300\nIHJvbWFudGlj 13301\nINC30LI= 13302\nIGFub3M= 13303\nIFl1cA== 13304\nZGlt 13305\nIGluZmVy 13306\nINC30LDQvA== 13307\nIHNvYw== 13308\ndWth 13309\nIHByZWNpc2U= 13310\nIGRyb3BwaW5n 13311\nIGNsdWU= 13312\nIGVycm9ycw== 13313\nY2hhcmdl 13314\nIFB1 13315\nb21ldGVy 13316\nIGxhbWJkYQ== 13317\nYWNpb25hbA== 13318\nIERvbmc= 13319\nIGNoYW1iZXI= 13320\nIHRoYW5rZnVs 13321\nIE51 13322\nIEhhd2Fp 13323\nIGluZm8= 13324\nIGFjdGl2YXRl 13325\nIFF1YWw= 13326\nIHF1ZWQ= 13327\n0YPQu9GM 13328\nIGNsb3Ro 13329\nIHdpY2h0aWc= 13330\nNTU= 13331\nIG90cmE= 13332\nb2dyYXBoZXI= 13333\nIGN1cmlvcw== 13334\nIDE5ODA= 13335\nIGVtcHJlcw== 13336\nZGVzcw== 13337\nZXVy 13338\nIGNsdXN0ZXI= 13339\nYXJ0ZXI= 13340\nb2JpbGU= 13341\nIFlhbg== 13342\nIEFkdg== 13343\nIGRpc2NpcGxpbmU= 13344\nIOygleuPhA== 13345\nIFBsYWNl 13346\nIFNlbGVjdA== 13347\nVEU= 13348\nINCx0YvQu9Cw 13349\nIHdoaXM= 13350\nIGJheQ== 13351\nIERvcg== 13352\nZW5jaW5n 13353\nIHJlcGV0 13354\nIGZpY2Fy 13355\ncGFk 13356\nIGZvZw== 13357\ndXlvcg== 13358\nIHNuYXA= 13359\naWJ0 13360\nIHNvYmll 13361\nIGFwcG9pbnRtZW50 13362\nIFJ5 13363\nIGNlaWxpbmc= 13364\nb3Vyc2U= 13365\nIHdyaXRlcw== 13366\nIEFmZ2hhbmlzdGFu 13367\nIG1vcw== 13368\nYXpl 13369\nIHBlbmFs 13370\nIGNyeXN0YWw= 13371\nSUNF 13372\n6rCQ 13373\n6Z8= 13374\nIFRlc2xh 13375\nIHRoZW9yaWVz 13376\nIGFwcGVhbA== 13377\nIG5ld3NwYXBlcg== 13378\nIGNvb2tpZXM= 13379\n5qk= 13380\nINin2YTZhA== 13381\nIG1hag== 13382\nIEdldHRpbmc= 13383\na29tbWVu 13384\nIEhlYXZlbg== 13385\nZWxscw== 13386\nIGRpdmluZQ== 13387\nxKs= 13388\nIGFrdA== 13389\nIGhvcGVz 13390\nIENoZW4= 13391\nd2VnZW4= 13392\nKioq 13393\nIEZyYWdl 13394\nINC90Lg= 13395\n4Li5 13396\nbWluaXN0ZXI= 13397\nbmVzb3Rh 13398\nd2hpY2g= 13399\nIGV4cGxpY2l0 13400\nIHZlcmRhZA== 13401\nIGdyYWR1YXRlZA== 13402\nIFBoaWxpcHA= 13403\nUUw= 13404\nIE1J 13405\nIGRldm90 13406\nIGN1cmU= 13407\nIGNsb3Nlc3Q= 13408\nIMOE 13409\nIHNleHk= 13410\nIERlYXRo 13411\nb2tv 13412\ndWd1 13413\nIEFubmU= 13414\naXRhcmlhbg== 13415\nZXNh 13416\n0LXQs9C+0LQ= 13417\nIER1cg== 13418\nIDAwMA== 13419\nemVpdA== 13420\nIHRvdXJuYW1lbnQ= 13421\nIG1lbGhvcg== 13422\n4Liq 13423\nIGluZHU= 13424\nIGZsYXc= 13425\nIHdhcnM= 13426\nIE1pbmQ= 13427\nIElyb24= 13428\n0YLQsNC6 13429\nIFZS 13430\nIHNpeg== 13431\nIFNvdXRoZXJu 13432\nIOq3uOufrOs= 13433\nIGF3YWs= 13434\nIOyVng== 13435\nIGN1YmU= 13436\nYmVsaWV2YWJsZQ== 13437\naWZhbGw= 13438\nZGlz 13439\nIGFiYW5kb25lZA== 13440\nbWluZA== 13441\nIHBhcmw= 13442\nIGNsYXNzaWNhbA== 13443\n6Is= 13444\n4buZdA== 13445\nIEF1dG8= 13446\nIEJvcg== 13447\n56k= 13448\nNDAw 13449\nIFNvY2lldHk= 13450\nIHN1YnRsZQ== 13451\nIG1pc3Npb25z 13452\nIHJlbWVtYmVyZWQ= 13453\nIEVpdGhlcg== 13454\nIGRhZsO8cg== 13455\nT1JE 13456\nIGludGVuc2l0eQ== 13457\nRVNJTg== 13458\nIEN1cA== 13459\nIHJhcmVseQ== 13460\nIHRveXM= 13461\nIENoYXJsaWU= 13462\n4buf 13463\nIGdsYXViZQ== 13464\nIHJvdW5kcw== 13465\nVElO 13466\nIGNhcGFiaWxpdHk= 13467\nIGRlcml2YXRpdmU= 13468\nIHJlZmVycmluZw== 13469\nIGTDpQ== 13470\nIFRBTEk= 13471\nIGNvdHRvbg== 13472\nIGNvbmZlcg== 13473\nIGNvbHVtbnM= 13474\nIGxpYmVyYWw= 13475\nIG51bmNh 13476\nIM68zrU= 13477\nIGluZG8= 13478\naWJlbg== 13479\nIEJlaXNwaWVs 13480\nIOq3uOughw== 13481\nINGD0Yc= 13482\nIGhveQ== 13483\nIGZyeQ== 13484\nIFNjb3R0aXNo 13485\n6Io= 13486\nIGNpdg== 13487\nIGNvbnNlcnZhdGl2ZQ== 13488\nIGFpcnBs 13489\nIHNhcg== 13490\ncnVz 13491\nIGludmVzdG1lbnRz 13492\nIGluZmluaXRl 13493\nIOCulQ== 13494\nIFRBTElFU0lO 13495\nIEdhcnk= 13496\ndWVsbA== 13497\nINCw0Lo= 13498\nIENpcg== 13499\nIHJpdHVhbA== 13500\nID4+Pg== 13501\nIHRlbXB0 13502\nIFRlY2g= 13503\nIFBva2Vtb24= 13504\nIGltcHJvdmVtZW50cw== 13505\nIHNwYXJl 13506\nIHRyYW5zbGF0ZQ== 13507\nIHNvbnJh 13508\nIEZpbG0= 13509\nd29ydA== 13510\nINC80Lg= 13511\nIHBlcmlvZHM= 13512\nIGplYWxvdXM= 13513\nIHRpcg== 13514\nTUk= 13515\nIGNvbmR1Y3RlZA== 13516\nIOyViOuFlQ== 13517\nMDk= 13518\nIFBvbGl0 13519\nIFdoZXJlYXM= 13520\nIG1vaXN0dXJl 13521\nIHNpbnM= 13522\nIGthcA== 13523\nINGN0Lo= 13524\nIGJlbmlt 13525\nIGVsaW1pbmF0ZQ== 13526\nIGF0aGxldGVz 13527\nIE1hbmFnZXI= 13528\nIGZlYXR1cmVk 13529\nYXBvcmU= 13530\nIOuwnA== 13531\nIHBlcmY= 13532\nIFRodXM= 13533\nIGRlYnV0 13534\n0L7QsdGA 13535\nIHNlw7E= 13536\nIG15c3RlcmlvdXM= 13537\nd29yZHM= 13538\nlOqwgA== 13539\nIGNoZWNrcw== 13540\nIHZvbHVudGVlcg== 13541\nIHdhc2hpbmc= 13542\nIE1hcnZlbA== 13543\nIEFC 13544\naXNzb3Jz 13545\nISc= 13546\nIEZ1bGw= 13547\neWVvbg== 13548\nIHdlaWdo 13549\nIEpPSE4= 13550\nIHZvcw== 13551\nIHByb2NlZHVyZXM= 13552\nIGFkZHJlc3NlZA== 13553\nIEJlcmxpbg== 13554\ncHV0ZXI= 13555\nIEJhbg== 13556\nIG1lZGljYXRpb24= 13557\nIGRyb25l 13558\nINGD0LE= 13559\nIEplYW4= 13560\nIGNhcHM= 13561\nIGRpc2FwcG9pbnRlZA== 13562\nIHdvcmU= 13563\nIOq1rQ== 13564\nIG9yZ2FuaXpl 13565\nIEhhbGxvd2Vlbg== 13566\nIGZhbnRhc3k= 13567\neWFyZA== 13568\nIG5vc290cm9z 13569\nIGp1bXBlZA== 13570\nIHBob3RvZ3JhcGh5 13571\nIE5hbWU= 13572\ncmVj 13573\nQUI= 13574\nIGJsZXNzaW5n 13575\nIFNodXQ= 13576\nIGJpdHRlcg== 13577\ncG9w 13578\nIGRlaQ== 13579\nIGZ1bGZpbGw= 13580\nIGRlbmdhbg== 13581\nIGJlbG8= 13582\nIE1lYW53aGlsZQ== 13583\nIGRlcG9pcw== 13584\nIGRpYWJldGVz 13585\nIGJ1bmQ= 13586\nIFplYWxhbmQ= 13587\nIGRpZ2VzdA== 13588\nIHRpcmVz 13589\nIGRvZA== 13590\nYWduZQ== 13591\n4bq/dA== 13592\nIHBlZWw= 13593\nINC30LDQsQ== 13594\nIG5vZGVz 13595\nIHRyZW5kcw== 13596\nIFN3aXRjaA== 13597\nIEF3YXJk 13598\nIE9yaWc= 13599\nIEhhbA== 13600\nIGVzdGFz 13601\nIDM2MA== 13602\nIHNpbXVsdA== 13603\nIGNvbWlj 13604\nIG3DoA== 13605\nIGJhbGFuY2Vk 13606\nIFByaW5jZXNz 13607\nIGtpbG9tZXRlcnM= 13608\n4bup 13609\nIHBhcnRpcg== 13610\n7KSR 13611\nc29mdA== 13612\nIFZpZXc= 13613\nIGJpb2xvZ2ljYWw= 13614\naW5zdA== 13615\nNDQ= 13616\nIG1hbmVyYQ== 13617\nIGNvbXByZWhlbnNpdmU= 13618\nIFNhYg== 13619\nIGNyaW1lcw== 13620\neWVycw== 13621\nIENvbXBhbnk= 13622\nIFBob3Q= 13623\nIHBvdWNv 13624\naWFj 13625\nIGJlaW0= 13626\naW5hdGU= 13627\nIHN1YnNlcXU= 13628\nIE1heW9y 13629\nIGNlbnR1cmllcw== 13630\nw6hyZXM= 13631\n7J6W7JWE7JqU 13632\nIOq3uOufvA== 13633\nIEZyYXU= 13634\nIE9I 13635\nIOuBnQ== 13636\nIE5haA== 13637\nIFNlcmllcw== 13638\nIG92ZXJuaWdodA== 13639\n7ZKI 13640\nIOKAog== 13641\nIHRyYXZl 13642\nYXR0ZXJlZA== 13643\nIHdhcnJp 13644\nIEdydW5k 13645\nIEluZG9uZXM= 13646\nIHNjcmE= 13647\nb2J5 13648\nIEJyb29r 13649\nIGN1cnM= 13650\nIOu4 13651\nIGV4cGxhaW5z 13652\ncmFtYXRpYw== 13653\nIHBhcnRpY2lwYXRpbmc= 13654\nIG1pbnV0 13655\nIGNvbnRyYWN0cw== 13656\nIGdlZ2Vu 13657\nIGRpc2FwcGVhcmVk 13658\nIFNO 13659\nIHJvYnVzdA== 13660\nYXBo 13661\nIHNocmlt 13662\nIGRldmFzdA== 13663\nY29wZQ== 13664\nIG1lZXRz 13665\nIHBlYWNlZnVs 13666\nbWF0ZQ== 13667\nIHdlbGQ= 13668\nINeq 13669\nZG9u 13670\n0YPRgtGM 13671\nIHJlZ2lzdGVyZWQ= 13672\nIE5paw== 13673\namlu 13674\nIGNhdg== 13675\nIGVjaHQ= 13676\naW94 13677\nIGZsb3dpbmc= 13678\n0L3QvtGB0YLQuA== 13679\nIHRvZQ== 13680\nIGVudGl0eQ== 13681\n0L7QstCw 13682\nZml0cw== 13683\nIFBhdHJpY2s= 13684\n0YLRgA== 13685\nIGxldmVyYWdl 13686\nIGNvcnJlbA== 13687\naWFo 13688\nIHN0cmluZ3M= 13689\naXN0aW5jdA== 13690\nIGd1ZQ== 13691\nYXJjaHk= 13692\nIHRlbmdv 13693\nxLFtxLF6 13694\nIG9yYml0 13695\nINC10YnRkQ== 13696\nY2FrZQ== 13697\nINec15Q= 13698\nIE1pbm5lc290YQ== 13699\nIGJyYWtl 13700\nb3dpZQ== 13701\nIGNyYXc= 13702\n6riw66W8 13703\nIHByb2dyYW1tZQ== 13704\nINGB0LvRg9GH 13705\naWVuY2Vz 13706\nIE91aQ== 13707\nIFBlcnM= 13708\naW1pZW50bw== 13709\nIEludmVzdA== 13710\nIHNsb3dlcg== 13711\nIEJldGg= 13712\nIG51cnNl 13713\nIFNwcmluZw== 13714\nU3A= 13715\nIHVuZW1wbG95 13716\n0LTQuA== 13717\nIGdlbml1cw== 13718\nIEFhcm9u 13719\nIOq3uOufrA== 13720\nIGVp 13721\nIHRhbmtz 13722\nIGF1am91cmQ= 13723\nIGNvbXBsZXhpdHk= 13724\nINGA0LXRiA== 13725\nIG9sZGVzdA== 13726\nIGxldHo= 13727\nIHBoZW5vbWVub24= 13728\ncHJpbnQ= 13729\nIEJ1bmRlcw== 13730\naXRhdA== 13731\n6ruY 13732\nIDQy 13733\nIFdp 13734\nIGluY29t 13735\nIGdlaw== 13736\nIGVtYnJhY2U= 13737\nIHRpZXM= 13738\nb3V0ZQ== 13739\nIGRvc2U= 13740\nIEZyaWVuZHM= 13741\n0YvRgg== 13742\n0LXQs9C+0LTQvdGP 13743\nIG9yZw== 13744\nhOuhnA== 13745\nw7Nn 13746\nIGV4Y2VlZA== 13747\nIGdvZHM= 13748\nIOqxsOyYiOyalA== 13749\nIHNvY2lldA== 13750\nIFVuaXZlcnM= 13751\naXTDpHQ= 13752\nIHdvcmRlbg== 13753\nIHNtb2tpbmc= 13754\nIGludGVucw== 13755\nYWJ1bA== 13756\nZW1pYQ== 13757\n6JE= 13758\nNDc= 13759\nZmx5 13760\nIDIwMDY= 13761\nIFNlcmlvdXNseQ== 13762\nIHByemV6 13763\n5rw= 13764\nY3Jl 13765\nIG5hbg== 13766\nIG1vZGVz 13767\n0L7QstCw0YLRjA== 13768\nIEhhbmc= 13769\nZW1lbg== 13770\nIGJlbmVmaWNpYWw= 13771\nIHZvdGVycw== 13772\nIEJyb2Fk 13773\nIGJlbnQ= 13774\nV293 13775\nIG11bA== 13776\nIFVD 13777\nIGRhbWFnZWQ= 13778\nIFVrcmFpbmU= 13779\nIHdpcGU= 13780\nIHN0b25lcw== 13781\nIG1hbmFnZXJz 13782\nIHJhYg== 13783\n0YHRgtGA0L4= 13784\nbGF0 13785\nIGRlY2U= 13786\nIGdyYXBoaWM= 13787\nIGZvc3M= 13788\nIGRpc2FncmVl 13789\nIEFtZW4= 13790\nIHNlY3JldHM= 13791\naG9sZQ== 13792\naW5rbGU= 13793\nIGZvcnR1bmF0ZQ== 13794\nIOyx 13795\n7JyE 13796\nIGhhYml0cw== 13797\nIGJ1cmllZA== 13798\nIGhpbg== 13799\nIHZpcnR1YWxseQ== 13800\nb2xhcw== 13801\nIFJQ 13802\nIFRhYg== 13803\nbG93 13804\nIHNhY3JpZmlj 13805\nIGVzdGltYXRlZA== 13806\nb2xu 13807\n2Ys= 13808\nY3Vy 13809\nIEZlZWw= 13810\nIGNhc3RsZQ== 13811\nIHVzZWxlc3M= 13812\nIGRpc2c= 13813\nIEphY29i 13814\nIGdhYW4= 13815\nIHVwc2lkZQ== 13816\nIHBhcmVjZQ== 13817\nIHNoaXBwaW5n 13818\nIENS 13819\nIGRpc3J1cHQ= 13820\nYWN0ZXI= 13821\nVU5E 13822\nZnU= 13823\nIFBpY2s= 13824\nIENoYXJs 13825\nIEJ1bGw= 13826\nIGVudGVycHJpc2U= 13827\nIHB1bmlzaG1lbnQ= 13828\nYWNraW5n 13829\nIGZyYWN0aW9u 13830\nIHRhYmxldA== 13831\nIGNob3Jk 13832\nIHNpbWlsYXJseQ== 13833\nIFRvcm9udG8= 13834\nIGNvdXJ0cw== 13835\nxJ9s 13836\nZXN6Y3pl 13837\nIHByb25vdW4= 13838\nIFNpc3Rlcg== 13839\nIE1Q 13840\nIGdyZWF0bHk= 13841\nIERhbms= 13842\naWNvcA== 13843\nIGdhcmJhZ2U= 13844\nIHJlc29sdmU= 13845\nIFNhZg== 13846\nIEd1bg== 13847\nIGNvbXBvdW5k 13848\nIOuwsA== 13849\nIE11c2lr 13850\n4pmr 13851\nIGNoYW9z 13852\nIFdoZW5ldmVy 13853\nIGV1cm9z 13854\nIG9yY2hlc3Q= 13855\nIHJlZnJpZ2Vy 13856\nYWxhbg== 13857\n4Li3 13858\nIEFtYXppbmc= 13859\nIHB1ZA== 13860\nYWdhbg== 13861\nIGplc3pjemU= 13862\naXN5 13863\nIGFjY3VyYWN5 13864\nIEFtYQ== 13865\naXNvZGU= 13866\n64yA 13867\nIGludGVycHJldGF0aW9u 13868\nIExpYmVy 13869\n5rc= 13870\nY2Ft 13871\nIGV2b2x2ZWQ= 13872\nIEtheQ== 13873\n0YbRiw== 13874\nIGNyZWF0b3I= 13875\naXRhcw== 13876\nIGFsYXJt 13877\nIGNlbGVicmF0aW9u 13878\nemVudA== 13879\nIGZ1bmNpb24= 13880\nIG92 13881\ndW1ibGluZw== 13882\nICU= 13883\n4LiI 13884\nIHJlc3RyaWN0aW9ucw== 13885\nINC90LDQsg== 13886\nIEtpbmRlcg== 13887\nIGJhbmFuYQ== 13888\n0YzRjw== 13889\nIGRpYW1ldGVy 13890\nIG5vcnRoZXJu 13891\ndXJlcnM= 13892\nIFBhcw== 13893\nIHdvcmtmb3JjZQ== 13894\nIGp1bmc= 13895\nIGd1YXJhbnRl 13896\nIGVxdWlsaWI= 13897\nIHN1aXRl 13898\nIGV1cm8= 13899\nIGRlbGliZXI= 13900\nU3Rl 13901\nIGRvd250b3du 13902\nIGNoaW4= 13903\nIGNvZGVz 13904\nZWRpYQ== 13905\nIHNoZWVw 13906\ncmVzaG9sZA== 13907\nd25pZQ== 13908\nw7Ni 13909\nIHVuZGVybHlpbmc= 13910\nbGlh 13911\namVy 13912\nz4DPjA== 13913\n550= 13914\ndGhyb3A= 13915\nIHphcA== 13916\nIHZhY3V1bQ== 13917\nIEhhYg== 13918\nIHdyYXBwZWQ= 13919\n7KI= 13920\nIGludmVudG9yeQ== 13921\n0LzQsA== 13922\nIGNvb3Jk 13923\nIHBsYXRlcw== 13924\nIHN5bW0= 13925\nVGU= 13926\nIHfFgmHFm25pZQ== 13927\nIHJlYWNoZXM= 13928\nIGxvbmVseQ== 13929\nU2NyaXB0 13930\nbGVl 13931\nZXNzZXI= 13932\nIOqxuA== 13933\nIEdlc2No 13934\nIE1vdmluZw== 13935\nIHLDqXA= 13936\nIFZpbGw= 13937\nIFJhY2hlbA== 13938\nIHRlbW9z 13939\nT05F 13940\nIHN0cmFpbg== 13941\nIGFuZ2Vs 13942\nIGbDpQ== 13943\nVHI= 13944\nIGFjaG8= 13945\nIGhpZ2hsaWdodHM= 13946\nIFdlcg== 13947\nIENhcmw= 13948\nIGJsdXI= 13949\nIHJlZ2FyZHM= 13950\nwrc= 13951\n0LjQu9GB0Y8= 13952\nIHJlY3Jl 13953\nIFlhbmk= 13954\nVUNL 13955\noLg= 13956\nIGVsZWN0cm9ucw== 13957\nIFNwaWVs 13958\nIHZlZA== 13959\n2r4= 13960\nIGJlYW0= 13961\nIGlkaW90 13962\n65Ok 13963\n0L3QsNGH 13964\naWRk 13965\nIHNraQ== 13966\naXRhdGl2ZQ== 13967\nIGh5cG90aGVz 13968\nZW50ZXI= 13969\nIOyVhOuLiOs= 13970\nIGlocmU= 13971\nIHByZXZpZXc= 13972\nYW5nZWw= 13973\nIGRlbW9u 13974\nIGR1cw== 13975\nIGRpYw== 13976\nIEtvbQ== 13977\nTEVZ 13978\nLi4uIQ== 13979\nIHNpZWh0 13980\nIFNvbmlj 13981\nIHRlbmhv 13982\nYW5hcw== 13983\nIGRpZ2l0 13984\nIE1hYXI= 13985\nIHVuZGVyZ3JhZA== 13986\nb3VuY2Vy 13987\ndWZmeQ== 13988\nIGNvbnZlcnNpb24= 13989\nIGRpc2Nvbm5lY3Q= 13990\nIGVjaG8= 13991\nb21lcg== 13992\nIGN1cnJpY3VsdW0= 13993\nIHBlcmNow6k= 13994\nIHdhbmQ= 13995\nLi4/ 13996\nIHJvbGxlZA== 13997\nIGVudHJlcHJlbmV1cg== 13998\nIHRoZW9yZXQ= 13999\nINGJ0L4= 14000\nIGluc2lnaHRz 14001\nIHp1c2FtbWVu 14002\nb2lu 14003\ncmV0dA== 14004\ncHJvZHU= 14005\nIHZpc2l0b3Jz 14006\nZW91cw== 14007\nIGdyYW5kbW90aGVy 14008\nIGh1bW9y 14009\nINC90LjRhQ== 14010\nemVuaWE= 14011\naW5zb24= 14012\nIHJlc2V0 14013\nIGJhc2ViYWxs 14014\nIG1hdGNoaW5n 14015\n64uk6rCA 14016\nIHB1bnRv 14017\n7KE= 14018\nIHJlZGU= 14019\nIGFkZHJlc3Npbmc= 14020\nIGZvcmVjYXN0 14021\nIEJvbA== 14022\nIGNvbG9yZWQ= 14023\nIGRvY3VtZW50YXRpb24= 14024\nIGV4cGVjdGF0aW9u 14025\nIE5vcnRoZXJu 14026\nIGNyZW8= 14027\nIOCumg== 14028\nZm9u 14029\nIHVuc2VyZQ== 14030\nVU0= 14031\nIGNvcGllcw== 14032\nIGV4cGFuZGVk 14033\nIHZldGVyYW5z 14034\nIEFsbQ== 14035\nINCy0L7QvtCx0YnQtQ== 14036\nIHBzeWNob2xvZ2ljYWw= 14037\nIG5vc3Nv 14038\nIHBheW1lbnRz 14039\naW1ldGVycw== 14040\nIC0tPg== 14041\nIEplbm5pZmVy 14042\nIHZvbHVudGVlcnM= 14043\nb3NzZQ== 14044\nb3Jpb3Vz 14045\nINCx0YvQu9C4 14046\n6II= 14047\nIEVzcw== 14048\nd3M= 14049\nIEJD 14050\nIElD 14051\nV29tYW4= 14052\nIHZvbnQ= 14053\nIGV0aG5pYw== 14054\nRU5O 14055\n0LjQvNC+ 14056\nIGxvYg== 14057\nIG91aQ== 14058\nY3M= 14059\nIHJlaGU= 14060\nIOyggQ== 14061\nIGNoaWNr 14062\nw7pzaWNh 14063\nIGtvbnQ= 14064\nIERpc3RyaWN0 14065\nIHBpbGU= 14066\nINCw0LI= 14067\n0LXQudGB0YLQsg== 14068\nIMKj 14069\nIGlzc3VlZA== 14070\nINC60L7QvNC/ 14071\nIHByb3NwZXI= 14072\nIHByb2ZvdW5k 14073\nIERlYXI= 14074\nIGZ1bmRlZA== 14075\nIGJpc2E= 14076\nnpjr 14077\n158= 14078\nIOydmA== 14079\nIHR3ZWx2ZQ== 14080\nIENoYW1waW9ucw== 14081\n0YHQuw== 14082\nIDIwMDU= 14083\ncG0= 14084\nIG9uZGU= 14085\nIGRpZmbDqQ== 14086\nIENoYWxs 14087\nIGRpZmZpY3VsdGllcw== 14088\nIGdhcmFnZQ== 14089\nIGTDoQ== 14090\nw7xuaw== 14091\nIOusvA== 14092\nIHRyYW4= 14093\nIHN1Ym1pdHRlZA== 14094\nenc= 14095\n2YjYpw== 14096\nIGFyaw== 14097\nIOyEsQ== 14098\nIGdyb2Nlcnk= 14099\n0L7QvdCw 14100\naWVyZQ== 14101\nIGFlc3Q= 14102\nIGV4aGliaXRpb24= 14103\nIHLDqXM= 14104\nIGNvbnNpc3RlbmN5 14105\nIGNvb2tpZQ== 14106\n0L3QtdC5 14107\nIHJlcGxhY2VtZW50 14108\nIFNlbQ== 14109\nIOyCrOyaqQ== 14110\nODAw 14111\nIGdlbmVz 14112\nIHRyYW5zYWN0aW9u 14113\nIEVM 14114\nIGR1cmFudGU= 14115\naWJsZXM= 14116\nIEVhdA== 14117\ndGFpbA== 14118\naXNzYW5jZQ== 14119\nIHRvc3M= 14120\nIHN1cnZpdmVk 14121\nIG9mZmljZXM= 14122\nIHN1cHBvcnRpdmU= 14123\nV2hlcmU= 14124\nIHRvdXRlcw== 14125\nIOuniQ== 14126\nIGpva2Vz 14127\naWVyb24= 14128\nYXBlcnM= 14129\nIG1hdHVyZQ== 14130\nIE1hcnNo 14131\nIHNpZG8= 14132\na2luZA== 14133\nIHJlYWxtZW50ZQ== 14134\nIENoZWY= 14135\nIHF1ZWxxdWU= 14136\nIGp1ZGdlcw== 14137\nZWZ0 14138\nRVJT 14139\nIGpldA== 14140\nIHBlcnNvbnM= 14141\n6Ls= 14142\naXphdGlvbnM= 14143\ncmlr 14144\nIHNob3Bz 14145\nIFd5 14146\nIGVsZWc= 14147\ncXXDqA== 14148\ncXVvaQ== 14149\nIGp1Z2E= 14150\nIO2VnOuyiA== 14151\nIFF1ZXN0aW9u 14152\nIEdsb2JhbA== 14153\nIOyVveqwhA== 14154\nIFN0YXRpb24= 14155\nIE9oaW8= 14156\nIHN0aWNreQ== 14157\nIHN0cmVzc2Vk 14158\nIGfDvG4= 14159\nIO2d 14160\n0YHRgtGD0L8= 14161\nIFBoRA== 14162\naW1tZXI= 14163\nIG1lbnRvcg== 14164\nIGludmVudGVk 14165\nIHJldW4= 14166\nIGluZXZpdA== 14167\nIHBvbMOtdA== 14168\nIGV4ZWN1dGU= 14169\nIFN0b3J5 14170\nIG91dHN0YW5kaW5n 14171\nIGd1ZXI= 14172\nIFJhaW4= 14173\nIGNob3Nlcw== 14174\nIFRpdA== 14175\nINGB0LXRgA== 14176\nIFNpbmdhcG9yZQ== 14177\nIE5vbmU= 14178\nIGNocm9uaWM= 14179\nsOuNsA== 14180\nIGVnbw== 14181\nRVNU 14182\nIFdhbmc= 14183\nIE5BVA== 14184\nIGF1Zw== 14185\nIGRlc2t0b3A= 14186\nIGV0ZXJuYWw= 14187\nIOyCrOyLpA== 14188\nIENvbnN0aXR1dGlvbg== 14189\n7IKs6w== 14190\n15nXnA== 14191\ncHJlcw== 14192\nINCi0Ys= 14193\nIGludGVyZg== 14194\nIGxpc3Rz 14195\nIGZpZ2h0cw== 14196\nZnRlbg== 14197\nIElvd2E= 14198\nIG1vdGl2YXRlZA== 14199\nIEhvc3A= 14200\nIGVsc2V3aGVyZQ== 14201\nIHBhdGhz 14202\nIGluc3RhbmNlcw== 14203\nQmw= 14204\ncmFuZ2U= 14205\n4bux 14206\nIFNpdA== 14207\nbWFuYQ== 14208\nIOyLnOyekQ== 14209\nIG3DrG5o 14210\nYW5zYXM= 14211\nIHNuYQ== 14212\nIHBoaWxvc29waA== 14213\nIHBhc3Nl 14214\nxrDhu51p 14215\nYWto 14216\nZW50YWw= 14217\nIGlobg== 14218\ncnVjdG9y 14219\nINCy0LDRiA== 14220\nIGdlbmVyb3Vz 14221\nIHBpdm90 14222\n0L/QvtC7 14223\nIGphbWFpcw== 14224\nIGNvbWVudA== 14225\nIExldw== 14226\nb2R6aQ== 14227\nIFhib3g= 14228\nINCy0L7QtA== 14229\nIGNvbnNlbnQ= 14230\nieyepQ== 14231\nIGRpc3Bhcg== 14232\nbGFzcw== 14233\nIEdvdmVybm9y 14234\nQmVpZmFsbA== 14235\nIOqwnA== 14236\nIGJlbG92ZWQ= 14237\n16DXlQ== 14238\nc2VsbA== 14239\nIGhvbm9yZWQ= 14240\nbGVo 14241\nIHfDpHJl 14242\ndW50aW5n 14243\nIGZyYXVk 14244\nIFJBTQ== 14245\n6rG4 14246\nIGtpbGxz 14247\nIGVjb25vbWljcw== 14248\nMDQ= 14249\n0L/QtdGA 14250\nIGNvaXNhcw== 14251\nINC40LPRgA== 14252\nw61t 14253\nIG3DtmNodGU= 14254\nIOy1nA== 14255\nIHN0aW11bA== 14256\nIGZhc3Rlc3Q= 14257\nbHY= 14258\nIGfDqW4= 14259\nIFNvdW5kcw== 14260\nIDE5NzA= 14261\nIGhvbWV3b3Jr 14262\nc3BlYWtpbmc= 14263\nIGVuY291cmFnaW5n 14264\nIHF1ZXJ5 14265\nIHJldmVycw== 14266\ncHJvZml0 14267\nIGR5 14268\nIOyekQ== 14269\n64qU642w7JqU 14270\nIHNvYXA= 14271\nIEdhbGw= 14272\nIENO 14273\nIEFucw== 14274\nIGZpYw== 14275\nYW5rcw== 14276\nIGRlc3NlcnQ= 14277\nIOyggO2drA== 14278\nIE1ha2luZw== 14279\nIGNvbWXDpw== 14280\n6rOE 14281\nIGFzc29jaWF0aW9u 14282\nRGFk 14283\naGVl 14284\nIGhvZ3k= 14285\nIGFwcm8= 14286\nIGludmlzaWJsZQ== 14287\nQW1lcmljYW4= 14288\n7Y4= 14289\nIHZpYmU= 14290\nIGVtaXNzaW9ucw== 14291\nIGFkdm9jYXRl 14292\nIGtpY2tlZA== 14293\nIHZlbA== 14294\nIHN1bW1hcg== 14295\nIGZyZWFraW5n 14296\nY2hyb24= 14297\nIHBpbmNo 14298\nIHdzenlzdGs= 14299\naXNjYWw= 14300\nIHByb3ZlZA== 14301\nIG1pbmRmdWw= 14302\nIHTDpA== 14303\nIG5vaXNlcw== 14304\nIGlzb2xhdGVk 14305\nIGNyb3NzZWQ= 14306\nIOqwlQ== 14307\nIHZvaWzDoA== 14308\nIGNob3Jl 14309\nIFJB 14310\nQ29t 14311\nIHJlbGF4ZWQ= 14312\nYXRybw== 14313\nIHByZXZlbnRpb24= 14314\nVm9pY2VvdmVy 14315\nT0Q= 14316\nIENvdmlk 14317\nIHNlcGFyYXRpb24= 14318\nIC1b 14319\n0LjRh9C10LPQvg== 14320\nIFNE 14321\nYmxlZXA= 14322\nIGluZGVwZW5kZW5jZQ== 14323\nIHBhcnRpYWw= 14324\nIGFsZ29yaXRobXM= 14325\nIEFueW9uZQ== 14326\nIGFzc29jaWF0ZQ== 14327\naHVt 14328\naWN1bGFy 14329\nIGLhuqFu 14330\nIGJhdHRsZXM= 14331\nR29vZA== 14332\nQXBwbGF1c2U= 14333\nIGJhc3RhbnRl 14334\nIGFkdmFudA== 14335\nIFN3ZWV0 14336\nIHJlZnVzZWQ= 14337\nINGC0LXQsdC1 14338\ncGxldA== 14339\nIGVuY291cmFnZWQ= 14340\nIG1pcmFjbGU= 14341\nIEJ1bg== 14342\nIFZhcg== 14343\ncmltaW5hdGlvbg== 14344\nZWxlY3Q= 14345\nIE11bHQ= 14346\nIGRlbGl2ZXJpbmc= 14347\nZWluZw== 14348\nIGNt 14349\nbmVobWVu 14350\nIExpbmU= 14351\nIOunjA== 14352\nZW5jZWQ= 14353\nIFNvdW5k 14354\nIENvbnRpbg== 14355\naWpk 14356\nVU5H 14357\na2xl 14358\nIHRocmVzaG9sZA== 14359\nIGNvbXBhY3Q= 14360\nYWR0 14361\nIHRvZXM= 14362\nIFB1cg== 14363\nb3duZWQ= 14364\nbWVudGVk 14365\nIGRlc2lnbmluZw== 14366\nIHZhY2NpbmF0ZWQ= 14367\nIGV4aGF1c3Q= 14368\nIGJhc2ljcw== 14369\nIGNvbnNpc3Rz 14370\nIEd1eQ== 14371\nYWN6eQ== 14372\nIG3DrQ== 14373\nd29u 14374\nIDg1 14375\n5oI= 14376\nIG11bQ== 14377\nIGlnbm9y 14378\nIHByaW50aW5n 14379\nYWN1bGFy 14380\ncG93 14381\nIGV4cGFuZGluZw== 14382\nIGdpcg== 14383\nIENhYg== 14384\n7Zi4 14385\n0YLRjNGB0Y8= 14386\nIOyXrOufrOu2hA== 14387\nIGFuZ2xlcw== 14388\nIHRlcm1pbmFs 14389\nIFdvbg== 14390\nIEludGVyZXN0aW5n 14391\nIGNyb3NzaW5n 14392\nIGJvbmRz 14393\nIHB1ZWRlbg== 14394\nIG9yYg== 14395\nbGFyxLFu 14396\nIGNyZWVweQ== 14397\nIG51dHJpdGlvbg== 14398\nIGFsbGllcw== 14399\nIHdpcmVsZXNz 14400\nIGRlc2lyZWQ= 14401\nIGNvbXB1dGU= 14402\nIEFyaXpvbmE= 14403\nIEJlYXV0aWZ1bA== 14404\nIHByb2R1Y2Vz 14405\nIG51ZXN0cm8= 14406\ndGVk 14407\nIGVsaWdpYmxl 14408\nINGB0L7Qtw== 14409\naWNpYWw= 14410\nIEhlcm8= 14411\nIGNvbnN1bWU= 14412\nIHJvYm90cw== 14413\nIHB1cmNoYXNlZA== 14414\nY2Npw7Nu 14415\nIGl6 14416\nxrDhu6Nj 14417\nzq/Ovc6xzrk= 14418\nINij2YY= 14419\nIHNoYWRvd3M= 14420\nIE1lZGlh 14421\nIHByaW5jZXNz 14422\nIGtsYXI= 14423\nIHdvb2Rlbg== 14424\nIHVzYXI= 14425\nIGfDvHplbA== 14426\nIHNsb3Q= 14427\ncmFkZQ== 14428\nIOuS 14429\nIGhhcm1vbg== 14430\nIGluZ3JlZGllbnQ= 14431\nb3JzaGlw 14432\nZWtp 14433\nIGdyYW5kZmF0aGVy 14434\nIGV4Y2l0ZW1lbnQ= 14435\nIHBvbGl0aWNpYW5z 14436\nLi4h 14437\nIG91dHM= 14438\nIHNlcGFyYXRlbHk= 14439\nINGP0Lo= 14440\nIFdlbHQ= 14441\nIFBvdw== 14442\namFu 14443\nIG9yaWVudGF0aW9u 14444\nTEM= 14445\nYWdlbQ== 14446\n24zaug== 14447\nIGJyYW5jaGVz 14448\nYWRlbg== 14449\ncmVudGU= 14450\nIElocg== 14451\nYXNt 14452\nIGVzdMOjbw== 14453\nIE5pYw== 14454\nIHNsYXZl 14455\nIGNvbXByZXNz 14456\nY3Jvd2Q= 14457\nIGNsaW1iaW5n 14458\nIE1hbmFnZW1lbnQ= 14459\nIEJhaA== 14460\nIHBhbmlj 14461\nIGtvcg== 14462\nIGNvb2xpbmc= 14463\nIGJpbmQ= 14464\nINC30LDQtA== 14465\nIHJhY2s= 14466\nIGVudGl0 14467\nIHNlbmRz 14468\nIHlvdXJzZWx2ZXM= 14469\nZGVz 14470\nIE11c2xpbXM= 14471\nIO2a 14472\naXNtYQ== 14473\nY3ljbGU= 14474\ndW5rdA== 14475\nIENvcmU= 14476\nIGluanVyaWVz 14477\nIGlkZW50aWNhbA== 14478\n0LrQsNGP 14479\nIERldXRzY2hsYW5k 14480\nINC10LU= 14481\naXNhbg== 14482\nIHRydWM= 14483\nbGV0b24= 14484\nIGJhY2t1cA== 14485\nIHVsdHJh 14486\nIGFidW5k 14487\naWxsZXVycw== 14488\nIGJ5xYJv 14489\nb3J0ZWQ= 14490\nIGVhcnRocXU= 14491\nINC60Ls= 14492\nIG9ic2VydmF0aW9u 14493\nIG1haW50ZW5hbnQ= 14494\nZWxlbg== 14495\nIHNldHRsZWQ= 14496\nIHBlbGE= 14497\nIEVjb25vbQ== 14498\nINU= 14499\nIHN0ZWVyaW5n 14500\nIEFMTA== 14501\nIENoZXI= 14502\nIHBhdGllbmNl 14503\nIFNub3c= 14504\nIGJvcg== 14505\nIHdvcnRoeQ== 14506\nIGPDoWk= 14507\nINen 14508\nIM66zrE= 14509\nZG9n 14510\nIEthcmVu 14511\naWxsZXM= 14512\nzrI= 14513\nIGFncmljdWx0dXJl 14514\n15XXnw== 14515\nIFNlYW4= 14516\nIHNlbnNvcnM= 14517\n7ZW06w== 14518\nYWdo 14519\nIHB1YmxpY2x5 14520\nIHBldXg= 14521\nIEFsZXhhbmRlcg== 14522\nIHByaW9yaXQ= 14523\nIGxhenk= 14524\nYXJkb24= 14525\nYXR0ZXJpbmc= 14526\nIGNvc3R1bWU= 14527\n2LPYqg== 14528\nIHVudw== 14529\n0Js= 14530\nIHRoaWNrbmVzcw== 14531\ncXVpdG8= 14532\nZ3VudA== 14533\naXN0YXM= 14534\nbmV5cw== 14535\nIOuQmOqyjA== 14536\nIEJyYXNpbA== 14537\nIHRva2Vu 14538\nIGFmZmlsaQ== 14539\nbG9u 14540\nIGbDpXI= 14541\nIEJlYWNo 14542\nIHdpdGNo 14543\nIFNldmVu 14544\nIHBhbnQ= 14545\nzrvOuw== 14546\nIGNhcHRhaW4= 14547\n5Z0= 14548\nIHZldXQ= 14549\nIHBvdXZvaXI= 14550\nYWN6 14551\nIEJhcmI= 14552\nIHV0aWxpdHk= 14553\nIGNvbnRlbXBvcmFyeQ== 14554\nIG9idGFpbmVk 14555\nIHBhaW50aW5ncw== 14556\nZWFy 14557\nIHBlYW4= 14558\nIE9n 14559\nIGN1c3Q= 14560\n0LvQtdC8 14561\ngpjr 14562\nIElzc28= 14563\nIGFjb250ZQ== 14564\nIFRlbGU= 14565\nIEFzc2lzdGFudA== 14566\nw4k= 14567\n7ZaI7Iq164uI64uk 14568\nIGNvdW50cw== 14569\nIGJ1Y2s= 14570\nIERlZXA= 14571\nIHRhY2tsZQ== 14572\nIGhhcnNo 14573\nIGRlY2lkZXM= 14574\nLuKAiw== 14575\nIEFuZ2Vs 14576\nIGxheWluZw== 14577\nIGNhbG9yaWVz 14578\nIGNvbnRyb2xsaW5n 14579\nIGFkdmFudGFnZXM= 14580\nINGN0YLQvtC5 14581\nIGFwcHJvYWNoaW5n 14582\nIHRocmVhdHM= 14583\nYWthbg== 14584\nZW1hdGlj 14585\nbWFubg== 14586\n6rO1 14587\nbXVtYmxlcw== 14588\nYWNpw7M= 14589\nIG1haW50YWluaW5n 14590\nIGZvdW5kZXI= 14591\nbGFo 14592\nZmlnaHQ= 14593\nIGFkbWl0dGVk 14594\n4oCmLg== 14595\nlYw= 14596\nYWJvbA== 14597\nIHVzYWdl 14598\nIG5vbnNlbnNl 14599\nIFBhbGVzdA== 14600\nIGNvbnRyZQ== 14601\nIERlbW9jcmF0aWM= 14602\nIEVS 14603\namVrdA== 14604\nIGFyYml0 14605\nINCz0L7Quw== 14606\nIE1pY2hlbGxl 14607\naWNoZXI= 14608\nZXNo 14609\nIFBobw== 14610\n0LrQvtC8 14611\nNDk= 14612\nIEVuZXJneQ== 14613\nzr/PjQ== 14614\nIGNlbnRz 14615\nIHJlZmVycw== 14616\nIGdvc3BlbA== 14617\nIFNoYQ== 14618\nIFNoYXJl 14619\n15nXoA== 14620\nIGNsaW5pYw== 14621\nIOuEow== 14622\nIGVxdWFsaXR5 14623\ndWdz 14624\nIHNoZWQ= 14625\nIHBsYW5lcw== 14626\nIHRvdXRl 14627\ncmVjaw== 14628\nIHN0cmFuZA== 14629\nIGJpb2xvZ3k= 14630\nIGxlYWd1ZQ== 14631\nIFBvaw== 14632\nIG7Dum1lcm8= 14633\nIENvYXN0 14634\nIGNvbnNpc3RlbnRseQ== 14635\nIG51Y2xl 14636\nT09PTw== 14637\nIG9iamV0 14638\nIGNob3I= 14639\nIGdpbmdlcg== 14640\nIGRhYmVp 14641\nIGNvb3BlcmF0aW9u 14642\n4K+NLg== 14643\nbnRlbg== 14644\n56Q= 14645\nbMOg 14646\n7JaR 14647\ncmFkbw== 14648\nIHBhc3NpdmU= 14649\nIGdsb3Zlcw== 14650\nIHVuZGVyZ3JvdW5k 14651\nIGxvZ2ljYWw= 14652\nIGtldA== 14653\nIGZ1bmN0aW9uYWxpdHk= 14654\nuOumrA== 14655\nIHBvcnRhbA== 14656\nZWxsZXI= 14657\n15nXqA== 14658\nIFRlZA== 14659\nIEdyZQ== 14660\nkJw= 14661\nIHBlcnNvbm5lbA== 14662\nIGVtZXJnaW5n 14663\nIEbDvHI= 14664\nIG1lYW50aW1l 14665\ndXNhbGVt 14666\nIENsZWFy 14667\nIHRyYXBwZWQ= 14668\nIOyasA== 14669\nIGRpc3Bs 14670\nIG1ldHRyZQ== 14671\nIG11bmljaXA= 14672\nIHdpdGhkcmF3 14673\nIHNwYXQ= 14674\ndW5lcw== 14675\nIGFjY2Vzc2liaWxpdHk= 14676\nIGFwYXJl 14677\nIHByb3NwZWN0 14678\nINC90LDQtw== 14679\nIGNvcHBlcg== 14680\nIFBSTw== 14681\nz4XPhA== 14682\nIGF0dGFja2luZw== 14683\nIFZpbg== 14684\nIFN0b25l 14685\nIGludmVzdGlnYXRl 14686\nc3R5bGU= 14687\nIM67 14688\n66Gd 14689\n66eI 14690\nIGluc3BlY3Q= 14691\nIGxpdmVy 14692\n0LDQu9C40YHRjA== 14693\nIHNlcmE= 14694\naGFsdGVu 14695\nZW1hbg== 14696\nIG1pbmlzdHJ5 14697\nJyc= 14698\nIGRvdHM= 14699\n44WL44WL44WL44WL 14700\n0YPRgdGC 14701\nIEphaw== 14702\nQUtF 14703\nIGdhcHM= 14704\ndWNrZXI= 14705\nINC40L3RgtC10YDQtdGB 14706\nIEVtaWx5 14707\nIGludGVydmFs 14708\nIHRlbmRlcg== 14709\nIFRlY2hub2xvZ3k= 14710\nZ2FtZQ== 14711\nIHRyaWI= 14712\n2YTYpw== 14713\nIERldmVsb3BtZW50 14714\n2YXYpw== 14715\nIHdyaXN0 14716\nIGZpcmVz 14717\nIHRhcmdldGVk 14718\n7KCQ 14719\nIHNvZA== 14720\n7ZqM 14721\nIG9sZHXEnw== 14722\nIHNlYXNvbnM= 14723\ndmVudGlvbnM= 14724\nINC90LXQs9C+ 14725\nIHNvbWV0aW1l 14726\n0LvQuNCy 14727\nbsOp 14728\nIHTDug== 14729\nIERldXM= 14730\nIGV4ZWN1dGlvbg== 14731\nw6Fw 14732\nIENoYW5nZQ== 14733\nIEluZGVlZA== 14734\nIHJlZ3VsYXRpb24= 14735\nIEh1bmc= 14736\nw6lpcw== 14737\nIHdpc2hlcw== 14738\nIGpheno= 14739\nIHN0cnVjdHVyYWw= 14740\nIGJsb3dpbmc= 14741\nIGJ5xIc= 14742\nIHRoZXJtYWw= 14743\ncGhhbnQ= 14744\n0YDRg9C3 14745\n0LDQvdGC 14746\nIFB1bGw= 14747\nIGNvbmZ1c2lvbg== 14748\n0L3Ri9C80Lg= 14749\nIHNjZW5hcmlvcw== 14750\n7KCB7Jy866Gc 14751\nINC00LXRgg== 14752\nIHRhdHRvbw== 14753\nIGF1dHJl 14754\nIGhlYXRpbmc= 14755\nIHRyZWF0aW5n 14756\nINC/0L7QvdC40Lw= 14757\nIGV4Y2x1cw== 14758\nIExPTA== 14759\nd2Vhcg== 14760\nYWdsZQ== 14761\nIHp1csO8Y2s= 14762\nIHJhdGlvbmFs 14763\nc3U= 14764\nIGRldGVy 14765\nIE5hdGl2ZQ== 14766\n4K6V4K6z 14767\nYWNoZWQ= 14768\nIOOD 14769\nIEVudG9uY2Vz 14770\nIGhvcmE= 14771\n7J207JeQ7JqU 14772\nIGxpdGU= 14773\nw6s= 14774\nIHNpeHRo 14775\nINCx0L7Qu9C10LU= 14776\nYWN0b3I= 14777\nIHBzeWNob2xvZ3k= 14778\nIGRlbWFuZHM= 14779\nIHBlZXI= 14780\nIG5ld2x5 14781\nIFdXRQ== 14782\nRG9uYWxk 14783\nIEJveA== 14784\nIHBpbmU= 14785\nIGxvYWRpbmc= 14786\nIE5pY28= 14787\nIHPFgg== 14788\nb21tZQ== 14789\nQVJU 14790\nIHJlY3J1aXQ= 14791\nIGJ1Z3M= 14792\nYXJlbnRz 14793\nINC/0YDQvtCx 14794\nIEluc2lkZQ== 14795\naXBwZXI= 14796\nZHJhbWF0aWM= 14797\nIHBsYW5ldHM= 14798\nb3JkZQ== 14799\nIHlvZ2E= 14800\nY2hpbGQ= 14801\nIE1hcmll 14802\nIEJM 14803\nIGZpbG1lZA== 14804\nIHJlZnJlc2g= 14805\nIHRvbWF0b2Vz 14806\nIGZldA== 14807\nUXXDqQ== 14808\nICEh 14809\nIOuCtOs= 14810\ncmluZQ== 14811\nIGludGVyYWN0aXZl 14812\nc2Fs 14813\nYW5uYWg= 14814\ncGV6 14815\nIHVuZGVyc3RhbmRz 14816\nIFRva3lv 14817\nIGxpYnJhcmllcw== 14818\nIHJlYWRlcg== 14819\nkZA= 14820\nb3o= 14821\nIEVuZGU= 14822\nIEZsbw== 14823\nIG1pbGQ= 14824\nIHBvZXRyeQ== 14825\nINC20LjQsg== 14826\nIGJlaGF2ZQ== 14827\nIGRvZW4= 14828\nIFN1c2Fu 14829\ncGFnZQ== 14830\ncmFoYW0= 14831\nIGNvbW11bmljYXRpb25z 14832\nIHR1bmluZw== 14833\nIHBhYw== 14834\nIGFueGlvdXM= 14835\nSU8= 14836\nTWFyaw== 14837\nIGhpw6c= 14838\nYm9va3M= 14839\nIHBpc3M= 14840\nIGVuYWJsZWQ= 14841\nYWNoZWxvcg== 14842\nIEZPUg== 14843\nIMOpYw== 14844\nIFRS 14845\naWxzdA== 14846\naGF0 14847\nIOydjA== 14848\nIHR5Y2g= 14849\nIGphcg== 14850\nIGJ1aWxkcw== 14851\nIEFyZ2VudA== 14852\nIGludGVybWVkaQ== 14853\nIGxvdQ== 14854\nIGFyYQ== 14855\nIGFzc2lnbm1lbnQ= 14856\nIGNhYmluZXQ= 14857\nIHJldGlyZW1lbnQ= 14858\nIGRpc2FibGVk 14859\ncmljYQ== 14860\nIGF3YXJkcw== 14861\nIGJvb3Rz 14862\nIGFja25vd2xlZA== 14863\nIHRoeQ== 14864\nIOq1rA== 14865\nIHN5bmQ= 14866\n0L3QuNC5 14867\naWx0b24= 14868\nIHByb2Js 14869\nIEZhbA== 14870\nIHZlcmRhZGU= 14871\nIDcwMA== 14872\nIExlYXJuaW5n 14873\nb2N1cw== 14874\nIHBhbGFjZQ== 14875\nTm90 14876\ndGFpbg== 14877\nY20= 14878\nIG1hZ25ldA== 14879\naW5jb2xu 14880\nIGZpZ3VyaW5n 14881\nIEx5bg== 14882\nIEJvc3M= 14883\nIFZP 14884\nIGRpYWdub3Npcw== 14885\nIGVxdWlwcGVk 14886\nd2F0Y2g= 14887\naW5vcw== 14888\nYWRlcnM= 14889\nIHNoZWxm 14890\nIG9yZ2FuaXM= 14891\nIG5vZA== 14892\nIGvEsXo= 14893\ncHBlcnM= 14894\nIHJlc3RvcmU= 14895\nIGFydGlj 14896\nIFZvaWNl 14897\nxLF5b3J1bQ== 14898\n6rKp 14899\nIHNwcmVhZGluZw== 14900\nIGhpcHM= 14901\nIHdhcmQ= 14902\ndXJlYXU= 14903\nIGludGVyc2VjdGlvbg== 14904\nNjY= 14905\nIDM5 14906\n57M= 14907\nIHdhaXRlZA== 14908\n7LQ= 14909\naGhoaA== 14910\nIGR5cw== 14911\nIEVO 14912\nIGJhdGNo 14913\nIGNhZg== 14914\nIG1hcmtlcg== 14915\nb3JhYmxl 14916\nw7NyaWE= 14917\nIHN0ZXBwZWQ= 14918\nIGNlbGVicmF0aW5n 14919\n0LDQvdCw 14920\nIHdvcm4= 14921\nIEZvbA== 14922\nIHBsYQ== 14923\nIGF0dGVtcHRz 14924\nIHR3ZWV0 14925\nIHJ1c3Q= 14926\nZ2VuY2U= 14927\n7Ya1 14928\nIHJldmVs 14929\nIHJlY2VwdA== 14930\nZW5lc3M= 14931\nICgo 14932\nIeKAiw== 14933\nIOyGkA== 14934\nIGluZmx1ZW5jZWQ= 14935\n0LjQtg== 14936\nINC60L7QvdC10YfQvdC+ 14937\nIGNvbGxlZ2Vz 14938\naW9uaQ== 14939\nIHNhZw== 14940\nQW5u 14941\nb2xhcg== 14942\nIGV4cHJlc3Npb25z 14943\nIHN1aXRz 14944\nIG93bmVyc2hpcA== 14945\nZWxhbmQ= 14946\ncGllY2U= 14947\nIGRlc3B1w6lz 14948\nIHRlbA== 14949\nIGluc3VsdA== 14950\nIOq1ieyepQ== 14951\nIFNtYWxs 14952\nIEZS 14953\nb2th 14954\nYmVycmllcw== 14955\nIEFudG9u 14956\n0LXQu9GP 14957\n0Y/RgQ== 14958\nIHZhbHZl 14959\nYWN0cw== 14960\nIHdvb2Rz 14961\n4K6j 14962\nIGN1bHRpdg== 14963\nIGbDoQ== 14964\nIGNoZWVycw== 14965\nIGFzc3VtcHRpb24= 14966\nIGZpdG5lc3M= 14967\nw61jdWw= 14968\nIHBvZHI= 14969\nIHdlaXQ= 14970\nIEhpbmQ= 14971\nIGRpZ24= 14972\nINC30L0= 14973\nIHNxdWFk 14974\nIGRlc3Rybw== 14975\nY2VyZQ== 14976\nc2hpcnQ= 14977\naW1tdA== 14978\nZW5nZXJz 14979\nIHPDpA== 14980\na8WCYWQ= 14981\nIMiZ 14982\nIG9jY2Fz 14983\nIOykhA== 14984\nIHByb2Nlc3Nvcg== 14985\nIERN 14986\nIERhZGR5 14987\nIHNvb25lcg== 14988\nIHN0cmFpZ2h0Zm9yd2FyZA== 14989\nIGRlcGFydG1lbnRz 14990\nIENocm9tZQ== 14991\nIHdvcmtwbGFjZQ== 14992\nIFB5dGhvbg== 14993\nIG1lbmc= 14994\nIERBTg== 14995\nIEljZQ== 14996\nIOuIiA== 14997\nIEdp 14998\nIGhpcmluZw== 14999\nIGxhbmRlZA== 15000\nIGRlbW9jcmF0aWM= 15001\naWVkeg== 15002\nIHNldg== 15003\naWNpYQ== 15004\nIGVzcGVjaWFs 15005\nIE5vdXM= 15006\nIGjDpHQ= 15007\nIGJvdQ== 15008\ncGVydA== 15009\naWVzeg== 15010\nIHZpbA== 15011\nxZtsaQ== 15012\nIMOubg== 15013\nIGxvc3Nlcw== 15014\nIHRvYXN0 15015\nIHJlYWxt 15016\nIEF1c3Rpbg== 15017\nIEluZm9ybWF0aW9u 15018\nIHJlc3VtZQ== 15019\nIGNoYXNl 15020\nIHNhbGFyeQ== 15021\nIOu2hA== 15022\n0LvQuNGH 15023\nINGB0LvQtdC0 15024\nIEZ1cnRoZXI= 15025\nIGNhcmluZw== 15026\nIHZpZw== 15027\nIHZhbG9y 15028\nINGH0LA= 15029\nIGFuYWx5dGljcw== 15030\nIGdsb2Jl 15031\nIE1BTg== 15032\nIG5lbA== 15033\n7J207JW8 15034\nn7w= 15035\nIG95 15036\n7ZWY7IS47JqU 15037\namVu 15038\nIHRyb3VibGVz 15039\nYWhhaGE= 15040\nIGNodXJjaGVz 15041\ndWV0 15042\nIG1lYXN1cmVtZW50cw== 15043\nYmls 15044\n7L0= 15045\naWZ1bGx5 15046\n0LjQvdGD 15047\nIFdpbHNvbg== 15048\nprQ= 15049\nIO2MjA== 15050\nIOywqA== 15051\nIHDDumJsaWM= 15052\nIEplcnVzYWxlbQ== 15053\nIG5haWxz 15054\nIHNwaW5l 15055\nIGhlbW9z 15056\nIHpu 15057\ncXVpcw== 15058\nIExlYmVu 15059\nIHJlZmVyZW5jZXM= 15060\nSVRI 15061\naXBlcg== 15062\nINGB0LXQsdGP 15063\n7IE= 15064\nIFdh 15065\nc3RhdGU= 15066\np50= 15067\nIEdlbmVy 15068\nIGFjdHJlc3M= 15069\nIEVuam95 15070\n4LmD 15071\nINeS 15072\nIGluZmVjdGVk 15073\nIHNoYWtpbmc= 15074\nIG5pY2s= 15075\n4Li4 15076\nIGZvdA== 15077\nIGFjY29tcGxpc2hlZA== 15078\ndWtl 15079\nIHNoZWV0cw== 15080\nIGZlbmNl 15081\nIG51cnNpbmc= 15082\nIGludHJvZHVjaW5n 15083\nIGZlYXQ= 15084\nT25l 15085\nVE8= 15086\nIGNsdWJz 15087\nIEJydWNl 15088\nb25nZQ== 15089\nY2hhbmdl 15090\nIEJhdG1hbg== 15091\nIE9mZmljZXI= 15092\nIGh5ZHJv 15093\nIHN1cHBsZW1lbnQ= 15094\nIGNlbGE= 15095\nIGxvbmdlc3Q= 15096\nIGNvbXBldGluZw== 15097\nIGNvbmhl 15098\nZ2l2aW5n 15099\nIGJyYWlucw== 15100\nIGxvYW5z 15101\nIHdhZ2U= 15102\nIENsaW50b24= 15103\nIHPEgw== 15104\nYW5lb3Vz 15105\nIGxvcmQ= 15106\n0YDRg9C2 15107\nIHF1aXo= 15108\nIHN0aWZm 15109\nIExHQg== 15110\nc3o= 15111\nTUU= 15112\nbWFyZQ== 15113\ndGhlcmU= 15114\nIG7DpHI= 15115\nIE1hbmQ= 15116\nbGFzdA== 15117\nIGRhZw== 15118\nIGhhbGZ3YXk= 15119\nIEJhbmQ= 15120\nIOuLpOyLnA== 15121\nIEFyZW4= 15122\nIGlsZQ== 15123\nUE4= 15124\nZW50bw== 15125\nIGFsZ3Vt 15126\nIHNvY2Nlcg== 15127\nIGJsb2NrZWQ= 15128\nIEpvbmF0aGFu 15129\nIHNldw== 15130\nIFRlc3RhbWVudA== 15131\nIHZhbGU= 15132\nIGJlaGF2aQ== 15133\nIGNvbm5h 15134\nSUNI 15135\nIGF1ZGllbmNlcw== 15136\nbWw= 15137\nYW1tYWQ= 15138\nIOyCtOw= 15139\nSUdI 15140\nIHJhY2Vz 15141\nZW1lZA== 15142\nIG3hu5l0 15143\nw68= 15144\nIG92ZXJz 15145\nIGRlY2xhcmVk 15146\nIHNhbmE= 15147\nIFVuYQ== 15148\nINGA0LU= 15149\ndWNrcw== 15150\nIHBhaXJz 15151\nIGFuZ2U= 15152\nTmU= 15153\nIHVwcw== 15154\nYXZ5 15155\nw7hy 15156\ncmVlaw== 15157\nIGJlaGF2aW9ycw== 15158\nIHJlZmxlY3RlZA== 15159\nIHByaW9yaXRpZXM= 15160\nIGNvbmR1 15161\nIHJldHJlYXQ= 15162\nIGV4cGVuc2Vz 15163\nIOu0kA== 15164\nIHRyaXBsZQ== 15165\nIOq1ieyepe2eiA== 15166\nw6RsdA== 15167\nIGluZGlnZW5vdXM= 15168\nIG1pbmluZw== 15169\nIGFjY2VwdGFibGU= 15170\nIHJ1aW4= 15171\nQ0E= 15172\ndWluZQ== 15173\nIHBpcGVsaW5l 15174\nY3RpYw== 15175\nw6p0 15176\nINCy0YHQtdCz0L4= 15177\nIGJvdW4= 15178\nIERpZ2l0YWw= 15179\nIEJvb20= 15180\n0YbQtQ== 15181\nINC70YPRhw== 15182\nIGFzYw== 15183\njIDroZw= 15184\nIEdvb2RieWU= 15185\nIHJlbmRlcg== 15186\nZW5leg== 15187\nYXJyZQ== 15188\nIFRIQVQ= 15189\nYm91cg== 15190\naWNpw7Nu 15191\nRXZlcnk= 15192\nIHdpcmVz 15193\nIFBhcmxpYW1lbnQ= 15194\nbnVuZw== 15195\nYXRldXI= 15196\nIFNhdmU= 15197\nIFBoeXM= 15198\nIGFtb3I= 15199\nIEV2ZQ== 15200\nIGZyaWdodA== 15201\nIGdhbW1h 15202\nIG1pY3Jvcw== 15203\nbWl0dA== 15204\nIENvZGU= 15205\nIEJleQ== 15206\ncGxlZA== 15207\nINC40YHQv9C+0LvRjNC3 15208\n55c= 15209\n7IOJ 15210\nIG1vbmV0 15211\nIEphaHJl 15212\nIGx1eHVyeQ== 15213\nIGRlYWY= 15214\nIGJldHJheQ== 15215\nIOqysA== 15216\n0LjQutC4 15217\nIGRlZmVhdGVk 15218\nIHVuZGVydA== 15219\nIHdlZw== 15220\nIGNvb2xlcg== 15221\naWFtaQ== 15222\nIEplc3NpY2E= 15223\nIEpveQ== 15224\nIHNvcGhpc3RpYw== 15225\n0LXQvdC40Lg= 15226\n8J2Y 15227\nIGNoaWxp 15228\nIFR5cGU= 15229\nIHByb3RlaW5z 15230\nIHByZXNlbnRpbmc= 15231\nYWxpYQ== 15232\n7Jq4 15233\nIE1ham9y 15234\nIG1vbGVjdWxl 15235\ndW1lcg== 15236\nIGNvbGxhcHNl 15237\nIEFueXdheXM= 15238\nIE1vdW50YWlu 15239\nYW50ZWQ= 15240\n44CQ 15241\nINCy0LjQtNC10L4= 15242\nQXVk 15243\nIGNvbnF1 15244\nIHZvbGw= 15245\nIGtuaXQ= 15246\nIG1lbWJy 15247\nIE1hcmtldA== 15248\nIGRhcmk= 15249\nIGNhbGN1bGF0ZWQ= 15250\n0LPQuA== 15251\nIHNocmltcA== 15252\nIE11 15253\nINC/0YDQvtGC 15254\nIOyYgeyDgQ== 15255\nIHByb2R1Y3Rpdml0eQ== 15256\nIGNvZ25pdGl2ZQ== 15257\nIEhlYg== 15258\naWN0aW9ucw== 15259\n6rK9 15260\nIGNyw6k= 15261\nZsO2cg== 15262\nIHByYXlpbmc= 15263\nYXNoaQ== 15264\nIFRpaw== 15265\nw7Ny 15266\nd2Vu 15267\n0YzRjg== 15268\naXhv 15269\nICgi 15270\nINGC0LXQuw== 15271\nIOyWtOuWpA== 15272\nINC/0LXRgNC10LQ= 15273\nIERyaXZl 15274\n44CR 15275\nIEVxdQ== 15276\nIGVxdWlsaWJyaXVt 15277\nIGRlc2NyaWJlcw== 15278\n0L3QtdC1 15279\nNDI= 15280\nIEN1cnJlbnQ= 15281\neXk= 15282\nIGFic29yYg== 15283\nIHNvbGRpZXI= 15284\nZGVycw== 15285\nIHRlc3RpbW9ueQ== 15286\nIGRlY2xpbmU= 15287\nnOuhnA== 15288\nZ2FnZQ== 15289\nIGluc3BpcmU= 15290\nbGFwcGluZw== 15291\nIHNwaW5uaW5n 15292\nIHNsYXZlcnk= 15293\nIGZhY2lhbA== 15294\nIHRyYWRpdGlvbnM= 15295\nw6FyaW9z 15296\nIEhvc3BpdGFs 15297\nIG5lc3Q= 15298\nIOuIhA== 15299\nIHRvaQ== 15300\nIGZlYXJz 15301\n7IWo 15302\nIE11aA== 15303\nIGdyYWR1YXRpb24= 15304\nIGltcGFjdGVk 15305\nIGF1bnQ= 15306\nIExldHM= 15307\nIGFsdW1pbnVt 15308\nIGRvbWluYW50 15309\nIERhdmlz 15310\nIE5hdnk= 15311\nIGNvbXB0 15312\nb3BsZXM= 15313\nIGVzdGF2YQ== 15314\n6KU= 15315\nIHNjYWw= 15316\nIHByZXNlcnZl 15317\nIE9wcA== 15318\nIHByYWN0aWNhbGx5 15319\nIG1hZ25pdHVkZQ== 15320\nIGZpdHRpbmc= 15321\nIGNvb3JkaW5hdGU= 15322\nIGZ1cm5pdHVyZQ== 15323\nIEZhbWls 15324\nIGV4cGxvc2lvbg== 15325\nIGRvY3VtZW50YXJ5 15326\nIFNjcmlwdA== 15327\nIHBvcnRyYXk= 15328\nbWF0 15329\nIHNjaGVkdWxlZA== 15330\nIGR5bmFtaWNz 15331\ncGh5 15332\nYWt5 15333\nIFVJ 15334\nQ2hl 15335\nIGNvbnRpbnVvdXNseQ== 15336\nIFByb3Y= 15337\n0YPQtw== 15338\ncmFo 15339\nIGdlcm5l 15340\ncHJvb2Y= 15341\nIHNlY3JldGFyeQ== 15342\nIFBhdHJlb24= 15343\nc2NyZWFt 15344\nIEtpZHM= 15345\n4buTaQ== 15346\nIGtn 15347\nIHVuY2VydGFpbnR5 15348\nINC60LDQttC0 15349\nIG1pdGln 15350\nIHJlYWRz 15351\nIFJ1 15352\nIHByaWVzdA== 15353\nINC90LXQtA== 15354\nIGxpbWl0YXRpb25z 15355\nIGZsb2F0 15356\nNjAw 15357\nIFRveQ== 15358\nIEppbW15 15359\nIG9mZmVuc2l2ZQ== 15360\nZW5p 15361\nIFhp 15362\nIGV5ZWJy 15363\nIFR1cms= 15364\nIGFjY2lkZW50YWxseQ== 15365\nIG9obmU= 15366\nIFNhdWQ= 15367\nOTU= 15368\nIER1dGNo 15369\n0LDQvdGB 15370\nIFNlYXR0bGU= 15371\nIOuTsQ== 15372\nY2hlY2s= 15373\na8SZ 15374\nIGNvbnRyaWJ1dGlvbnM= 15375\nIGJlc2lkZQ== 15376\nIHF1aW5kaQ== 15377\nIGZsZXc= 15378\n2LDYpw== 15379\nIExP 15380\nIHdhaXN0 15381\nIEVW 15382\nIGhvbGlkYXlz 15383\nam9u 15384\nIG1pc3VuZGVy 15385\n0Y/QvQ== 15386\nIGJvdXQ= 15387\nIGRpbWlu 15388\n4bq9 15389\nw7Ns 15390\nIEdyYWNl 15391\nIGlucHV0cw== 15392\nIGRlbnk= 15393\nIGZvcm1pbmc= 15394\nIEJpbGQ= 15395\nIGFkZXF1 15396\nIGZvbGs= 15397\nIHJlamVjdGVk 15398\nc2VtYg== 15399\nIGZydXN0cmF0ZWQ= 15400\nb3Blbg== 15401\nIEJldHRlcg== 15402\naWxvbg== 15403\nIHRvd2Vs 15404\nIGRpZmZlcmVudGlhbA== 15405\nIHNhY3JlZA== 15406\nIHNhaWw= 15407\nZW50aW1lcw== 15408\nIGdlbnRsZW1hbg== 15409\nIGljb25pYw== 15410\nIGNvbXBhcmluZw== 15411\nIHNhZ3Q= 15412\nIHRleHRz 15413\nIGdyYW5kbWE= 15414\nIHJvbGxz 15415\nIGNvbnRlbnRz 15416\n0L7RgdGB 15417\nIHN1c3BlbnNpb24= 15418\ncm9pdA== 15419\nprw= 15420\nIGFzc2V6 15421\nIGRvcnQ= 15422\nIE1hdGg= 15423\nIFZpY3Rvcg== 15424\nIEphdmFTY3JpcHQ= 15425\nIGVuaGFu 15426\nxZk= 15427\nIEJ1c2g= 15428\nIHByb21vdGlvbg== 15429\nIGtpbg== 15430\nIG1vbnN0ZXJz 15431\nIENvbG9yYWRv 15432\nIM6y 15433\n7ZW07JqU 15434\naWZmZXJlbnQ= 15435\nIG5ha2Vk 15436\nIHByb2Q= 15437\nZXRpY3M= 15438\nIFdvbWFu 15439\nIHRyZWF0bWVudHM= 15440\nIGVzdG95 15441\ndsOp 15442\nIGxpZnRpbmc= 15443\nIHlhcHQ= 15444\nIFJvYmVy 15445\nIOy5nA== 15446\nIHN1YnN0aXR1dGU= 15447\nYWt1 15448\ncmlkZ2U= 15449\nIOqxsOs= 15450\nIHJlc3BvbmRlZA== 15451\nIGLDqQ== 15452\nIEVuZ2luZWVy 15453\nIHRyYW5zZmVycmVk 15454\n67I= 15455\nIGhhYmVy 15456\nb29w 15457\nIFdF 15458\nIHZlc3Q= 15459\nIGZvcnR5 15460\nIERT 15461\nIDIwMDQ= 15462\nIGNvYWNoaW5n 15463\nbm9t 15464\nIEJhYg== 15465\nIG5vc3Nh 15466\nIEpha2U= 15467\nIGd5 15468\nIGRlbGVn 15469\nIOyeoA== 15470\nINC60YDQsNGB 15471\nIHN0YW5kcG9pbnQ= 15472\nIGRpc2Fk 15473\nIGFydHdvcms= 15474\nQWQ= 15475\naWxsbw== 15476\nIMSRxrDhu6Nj 15477\nIFByb20= 15478\nIExpYg== 15479\nIGNyaXRpY2lzbQ== 15480\nIGNvbnRhY3Rz 15481\n0YDQsNC8 15482\nIGFjaGlldmVtZW50 15483\n0JTQsA== 15484\nIGRpc3NvbA== 15485\nIFZlZ2Fz 15486\nIHN0cmVhbXM= 15487\nIEtlbnQ= 15488\nINi52YTZiQ== 15489\nIHJhZGl1cw== 15490\nIHN1Y2tz 15491\nIEFjaA== 15492\nIGZp 15493\nb3VzdA== 15494\nINC70Y7QtNC4 15495\nIHBhbGV0dGU= 15496\nIEhheg== 15497\nIEFudGhvbnk= 15498\nIHRlbWE= 15499\nIENvcw== 15500\nIHNhZmVy 15501\nzrHPgg== 15502\nIGNvbnRyYWQ= 15503\nIG1haW9y 15504\nIGluZmxhdGlvbg== 15505\nIFNpbHZlcg== 15506\nIGF0dGVuZGluZw== 15507\n7ZWc7YWM 15508\nYXJ0bw== 15509\nIGFwcGxhdWRpbmc= 15510\nIGNvbXB1dGluZw== 15511\nIEhhdA== 15512\n5rs= 15513\na25vdw== 15514\nbWFrZXJz 15515\nIGNvbm9j 15516\nIGVkdWNhdGVk 15517\nIG1vZGlmaWVk 15518\nIGluY2x1c2lvbg== 15519\nbWVudGFs 15520\nnpA= 15521\naXNpYQ== 15522\nIM+Azr/PhQ== 15523\nIGF1bg== 15524\nIElyZWxhbmQ= 15525\nIGvDtg== 15526\nIGNvbXBsaWFuY2U= 15527\nIGluc3BpcmluZw== 15528\n0LjRgtC10LvRjNC90L4= 15529\nIGRpc3Bvcw== 15530\n7LCo 15531\nIHdpcA== 15532\ncmljYWw= 15533\ncmF3ZA== 15534\nIHRyZXM= 15535\nIG1vYmls 15536\nb2x1dGlvbnM= 15537\nQk8= 15538\nIGJvdW5jZQ== 15539\nIGFzc3VtZWQ= 15540\nIE1lZGljYWw= 15541\nIGZpc2NhbA== 15542\nIG5nxrDhu51p 15543\naXRpb25hbGx5 15544\nIHN0b2xlbg== 15545\nIEJN 15546\nIG1lY2hhbmlzbXM= 15547\nzrXOrw== 15548\nIHF1YWxpZmllZA== 15549\nIOyekOs= 15550\ndWdodGVycw== 15551\nIEhJVg== 15552\nIExvdHM= 15553\nIHNlcnZlcnM= 15554\nIGNhcnI= 15555\nIFRvZ2V0aGVy 15556\nIGF0dHJhY3RlZA== 15557\nIGty 15558\ndGh1cg== 15559\naW5pbg== 15560\nIEhhbGY= 15561\nyJs= 15562\nIFBhcA== 15563\nIHJlbWluZGVk 15564\nQUxM 15565\nIGhlbG1ldA== 15566\nIGJvdHRsZXM= 15567\nIHByb2Zlc3NvcnM= 15568\nIHNlaW5l 15569\nxYLEhQ== 15570\nIOqxsOyVvA== 15571\nINei15w= 15572\nZnVu 15573\nIEJpcmQ= 15574\nIGZpZ2h0ZXI= 15575\nIOuUsOs= 15576\nIFRvb2w= 15577\nIHRpbg== 15578\naW5vaXM= 15579\n67aE 15580\n15nXnw== 15581\nIENBUg== 15582\naXJzdHk= 15583\nIG91dGRvb3I= 15584\nIE5T 15585\n44WO 15586\nZmZlbg== 15587\nIGx1ZA== 15588\nSGVsbG8= 15589\nIHJvbGxlcg== 15590\naWVsZQ== 15591\nIFBvbGFuZA== 15592\nIGFwYQ== 15593\nZXhw 15594\nIGNlcnRpZmljYXRl 15595\nIFRvd24= 15596\n0LDRjtGC0YHRjw== 15597\naWxkZQ== 15598\nIGRldGVybWlu 15599\nUFI= 15600\nIGZyZWV6ZQ== 15601\nIG1haW5zdHJlYW0= 15602\nIG9iamVjdGl2ZXM= 15603\nYmxv 15604\nIHRha2ll 15605\nIOuwlOuhnA== 15606\nZWxldA== 15607\nIElW 15608\nIEZhc3Q= 15609\nIGRlcmU= 15610\nZW1w 15611\nIERyYQ== 15612\nIOyeiOyXiA== 15613\nIGRpc2NyaW1pbmF0aW9u 15614\nIM61zq/Ovc6xzrk= 15615\nbmVjZXNz 15616\n5q4= 15617\nxLHEn8Sx 15618\nIHBvc3Rpbmc= 15619\nd2nFm2NpZQ== 15620\nIGx1Yg== 15621\nIG9saXZl 15622\nIHJpbQ== 15623\nIG1vZGVsaW5n 15624\nIGHDsW8= 15625\nIFBha2lzdGFu 15626\nIG92ZXJs 15627\nIGluZmxhbQ== 15628\nTkU= 15629\n7JeQ6rKM 15630\nIGF0dGVuZGVk 15631\nIGRlYWx0 15632\nIEFsdA== 15633\nIExpbmNvbG4= 15634\nIGF3YWtl 15635\nIGZpbHRlcnM= 15636\nIFdpdGhpbg== 15637\nY3p5d2nFm2NpZQ== 15638\nIHPDuw== 15639\nIEpvaG5ueQ== 15640\nIGludGVncml0eQ== 15641\nIGlzb2xhdGlvbg== 15642\nIEVhc3k= 15643\nINC/0YDQuNC9 15644\nIEFsaWNl 15645\nIHNtaWxpbmc= 15646\nZW5peA== 15647\nLC4uLg== 15648\nzrY= 15649\nIGJlZ3Vu 15650\nIGpld2Vs 15651\nIGNvbnZlbnRpb25hbA== 15652\nIHN0YXRpc3Q= 15653\nIGhhbmRlZA== 15654\nIGlycmU= 15655\nIHByb2hpYg== 15656\nIHNhdGVsbGl0ZQ== 15657\nIEluZHVzdA== 15658\nIHRyYWdlZA== 15659\nIHRyYXZh 15660\nIGlobQ== 15661\nIGNydWVs 15662\nIEFnb3Jh 15663\nIERvYw== 15664\nIHpvbmVz 15665\nIG1hbGw= 15666\nIHRyYXk= 15667\n15XXoA== 15668\nIGlycml0 15669\nIGthbnM= 15670\nIEJlYXQ= 15671\ndWRnZQ== 15672\naWVsbGU= 15673\nIHRydXN0ZWQ= 15674\nIGJpa2Vz 15675\nINGD0L8= 15676\nIE1lbWJlcg== 15677\nd2ljaw== 15678\nIGNyZWF0b3Jz 15679\nIGhlcml0YWdl 15680\naW5kaXN0aW5jdA== 15681\nIHJlc3Vy 15682\nZW5uZW4= 15683\nQ29tZQ== 15684\nIGZpcmluZw== 15685\nIEJ1ZW5v 15686\nINCi0L4= 15687\naWthbg== 15688\nZXR0ZXM= 15689\nIGtlcw== 15690\nIHRyaXBz 15691\nIGRpdm9yY2U= 15692\nIEts 15693\nIGNvbnNvbA== 15694\na2VlcA== 15695\n6riw6rCA 15696\nIFJlcG9ydA== 15697\nIGhvc3Rpbmc= 15698\nIGRpYW1vbmQ= 15699\nIGNvbXBsaWM= 15700\nIGhlbGljb3A= 15701\nIGRlcHVpcw== 15702\nZHM= 15703\nIENoYW4= 15704\n0Y/Quw== 15705\nIHNjaXNzb3Jz 15706\naWxhdGlvbg== 15707\nIHByb3BvcnRpb24= 15708\nRVJF 15709\nINmI2KfZhA== 15710\naW50YQ== 15711\nIG11Y2hhcw== 15712\ndWF0aW9u 15713\naXRpcw== 15714\n0Y/RiQ== 15715\nIG5paW4= 15716\nIGVtcGhhc2l6ZQ== 15717\ndWVsYQ== 15718\nIHByb2R1Y2Vycw== 15719\nIHJ6ZQ== 15720\nw6RuZGVy 15721\nRVRI 15722\n5ro= 15723\nIGNvbnN0aXR1 15724\nIHBlcmZvcm1hbmNlcw== 15725\naXN0bGU= 15726\nZ292 15727\nIExpdGVy 15728\nIGluY29ycG9yYXRl 15729\nIGVkdWNhdGU= 15730\nIE5pbg== 15731\n7Kq9 15732\n2YfZhQ== 15733\nZWxlcmF0aW9u 15734\n15XXkQ== 15735\nIHlhxZ8= 15736\nb3JvdXM= 15737\nIENhcw== 15738\nIGdyYW50cw== 15739\n64ql 15740\nYW1lbA== 15741\nIOq3uOugh+qyjA== 15742\nIEVzdGU= 15743\n0YXQvtC00LjRgg== 15744\nINC/0L7RgdC70LU= 15745\nIGdlbnQ= 15746\nIGZvY3VzZXM= 15747\nYWxpdGllcw== 15748\nIFJo 15749\n67O0 15750\nIERhbmNl 15751\ncnI= 15752\nIGFtZXI= 15753\nIHV0aWxpemU= 15754\nIGzDrQ== 15755\nIEFtb25n 15756\nIHByZWduYW5jeQ== 15757\nIGxvb3Bz 15758\n0LDQu9C+0YHRjA== 15759\nIE1vaA== 15760\nIGNhdGNoaW5n 15761\nIGdsb2I= 15762\nIGFqdWQ= 15763\nIFs/ 15764\nIEFuYWw= 15765\nbG9va2luZw== 15766\nIHN1cmZhY2Vz 15767\nIHByb2dyZXNzaXZl 15768\nIHZpcmFs 15769\nMDg= 15770\nzr4= 15771\nS0E= 15772\nIMW8eQ== 15773\nIHBpY2tz 15774\nYW5ub24= 15775\nIGJ1bGs= 15776\nIFJvc3M= 15777\nIGRlc2NyaWJpbmc= 15778\nIEdlbA== 15779\nIGxvY2FsbHk= 15780\nIGVuZGxlc3M= 15781\nIG1hc3NhZ2U= 15782\nIGNsZWFuZWQ= 15783\nIHRyYXZlbGVk 15784\n0LXQvdGL 15785\nIHNlbnRpbWVudA== 15786\naWdtYQ== 15787\nIE5hcw== 15788\nIGNoZW1pY2Fscw== 15789\nIHJpZ2h0ZW91cw== 15790\nIE1hZ2lj 15791\nIHJlbGF0ZXM= 15792\nIHRydWNrcw== 15793\nIDE5NjA= 15794\nIGFwcGV0 15795\nIHNuYWNrcw== 15796\nIFN1bW1lcg== 15797\nIHnDvHo= 15798\nIHByaXM= 15799\nIE1leGljYW4= 15800\nIHRyYW5zcGFyZW4= 15801\nIG1pbm9yaXR5 15802\nIHZlcnRl 15803\nIGxhc3Nlbg== 15804\nNDY= 15805\n0LvQtdC6 15806\nw6lw 15807\nINGE0LjQu9GM 15808\nIGl5aQ== 15809\nIHNwYW4= 15810\n7ZWY7KeA 15811\nIGluZGljYXRlZA== 15812\ncXVhcg== 15813\nIHNjaG9sYXJzaGlw 15814\nIExHQlQ= 15815\nIGhpc3RvcmljYWxseQ== 15816\nw7PFgg== 15817\nIG1pbmlzdA== 15818\nIHBlbmV0 15819\nIFJhcA== 15820\nIGNvbnNlcnZhdGlvbg== 15821\nIEhvbmV5 15822\nIEJlaQ== 15823\naWRlbA== 15824\nIHJlc3BvbnNpYmlsaXRpZXM= 15825\nIG1lc3N5 15826\nIEV4Y2VwdA== 15827\nT1JF 15828\nIGluaXRpYXRpdmVz 15829\nIGp1bmlvcg== 15830\nIGRlc2lnbmVycw== 15831\nIGV4cGxvcmF0aW9u 15832\nIHNwb25zb3I= 15833\nIG1vYmlsaXR5 15834\nIGludGVn 15835\nbGFuZG8= 15836\nIGJhcms= 15837\nIGluZGljYXRlcw== 15838\n4LY= 15839\nIGVtcGxveWVy 15840\nIGNvdXNpbg== 15841\nIGJvaWxpbmc= 15842\nIGNocm9t 15843\nIMOnYWw= 15844\nIHBlcnBldA== 15845\nIGNvbnRhaW5lZA== 15846\nIHBhcmtz 15847\n0Ks= 15848\nIEVuZ2luZWVyaW5n 15849\nUGxlYXNl 15850\nIFN0YXJ0aW5n 15851\naGVybw== 15852\nIGxhd3llcnM= 15853\nIHpk 15854\nIGZyYW5jaGlzZQ== 15855\ncmFnZQ== 15856\nIGludHVpdA== 15857\nIEdM 15858\ncmVhY2g= 15859\nIEVsbGU= 15860\nIG5oxrA= 15861\nIE5vcmQ= 15862\nIGJlYW4= 15863\nMDc= 15864\nIHBsZWFzYW50 15865\ndmlyb24= 15866\nIGdyYWRpZW50 15867\nenVz 15868\nIEVN 15869\nIGVzc2F5 15870\n7JeQ7JqU 15871\n4bq/bg== 15872\nbnU= 15873\n4bur 15874\nIMOJcw== 15875\nIGRlbm9taW4= 15876\nIEdpcmxz 15877\nIHBlcnNvbm5lcw== 15878\nINin2YTYow== 15879\nYmlsZA== 15880\nIFN0YXQ= 15881\nIGNvbXBsaW1lbnQ= 15882\nIEthdGU= 15883\nIG9wdGltYWw= 15884\nIGhpZA== 15885\n2K/Zig== 15886\nIHF1aWNrZXI= 15887\nd2FsbA== 15888\nRW4= 15889\nSU5F 15890\nPz8/ 15891\n7LK0 15892\nIEFjdGlvbg== 15893\n5Z8= 15894\nIHBlbmFsdHk= 15895\nIEtheg== 15896\nJz8= 15897\nIGNyaWVk 15898\nIGNhbnZhcw== 15899\nZnRl 15900\nIGV4Y2x1ZA== 15901\nuOuhnA== 15902\nIGVtcGhhc2lz 15903\nIGVuenk= 15904\nIEhvdQ== 15905\nIG92ZXJzZWFz 15906\nw61hbW9z 15907\nw7ZnbGljaA== 15908\nIGhlYWRwaG9uZXM= 15909\nY24= 15910\nIEFnZQ== 15911\nIGFrYW4= 15912\nIGNoYXJhY3RlcmlzdGlj 15913\n7ZWY66m0 15914\nZ2V0cw== 15915\nIOu2iA== 15916\nIHJpdmFs 15917\nIGJvcmRlcnM= 15918\nZW1lbnRl 15919\nZW3DoXM= 15920\nIHlvbA== 15921\nIGNvbXBl 15922\nZW5kZXJz 15923\nxLFuZGFu 15924\nIG3DtmdsaWNo 15925\nIGJ1YmJsZXM= 15926\nbmF0dXJhbA== 15927\nIGFybWVk 15928\nIGVsYWJvcg== 15929\nIOydtOuyiA== 15930\nIHdhc2hlZA== 15931\nzr/Phc68zrU= 15932\nIGZsYXZvcnM= 15933\nIGV4aXN0ZQ== 15934\nIHByZXN0 15935\nIFRoZW1h 15936\n0L7Qv9GA0L7RgQ== 15937\nZXJvbg== 15938\nVUU= 15939\nZXJp 15940\nIGNvbmNlcg== 15941\nIGFpeMOy 15942\nIHByb3RlY3RpdmU= 15943\nINC30L3QsNGO 15944\nIOuCoA== 15945\nIElJSQ== 15946\nIG1lZXI= 15947\nIFNob3A= 15948\nbGxp 15949\nIE9yZGVy 15950\nIE1Z 15951\nIEdob3N0 15952\nYWRlbA== 15953\nIHN0b2xl 15954\nIHJlbGVhc2luZw== 15955\nIENvbW1lbnQ= 15956\nIHRyYWlucw== 15957\n66qF 15958\nIHdpc3Nlbg== 15959\nZW5zZWQ= 15960\nIGRlc2NlbmQ= 15961\nIGZpZXI= 15962\nIHJhZGk= 15963\nIHBlcnN1 15964\n56I= 15965\nINC80L0= 15966\nIERlc3Q= 15967\nIHdvcnJpZXM= 15968\naXRldA== 15969\nYmFz 15970\nIHN0YWI= 15971\nbmFtZQ== 15972\nb3JpYw== 15973\nIENsb3Nl 15974\nIGFsdW1uaQ== 15975\nIFNlbGY= 15976\nZmZl 15977\naXRhdGluZw== 15978\nYXRoZXJpbmU= 15979\nIFJpZ2h0cw== 15980\nIGVsbG9z 15981\nIHdhcnJhbnQ= 15982\nIG5lcnZl 15983\nIHZlZ2V0YWJsZQ== 15984\nIFRlaWw= 15985\nIOqwmeydtA== 15986\nUlk= 15987\nIHN1c3RhaW5hYmlsaXR5 15988\nIHN0ZWh0 15989\nIGJyaWQ= 15990\nYWRhxZ8= 15991\nIHR2 15992\nIGR1cmF0aW9u 15993\nIHBlc3NvYQ== 15994\nIG1ldHJpY3M= 15995\nIGFkYW0= 15996\nY2Fz 15997\n0LDRgNC4 15998\nIGV2aWRlbnQ= 15999\nIGRpc3BsYXllZA== 16000\n2KfYpg== 16001\nIHJlY2s= 16002\nIEJ1ZGRoYQ== 16003\nIGRlbGU= 16004\nIERpZWdv 16005\nb3NwaA== 16006\nIGJsYQ== 16007\nIE1paw== 16008\ndWxhdG9y 16009\nIDIwMDE= 16010\nIHByb21vdGluZw== 16011\neWNo 16012\nIEVY 16013\nIGxhc3RseQ== 16014\nIG91dGxpbmU= 16015\nIHNwaXJpdHM= 16016\nIHZldXg= 16017\nIHN1YnRyYWN0 16018\nIMWfaW1kaQ== 16019\nIHBpbnM= 16020\nIGJ1cmdlcg== 16021\nIG1vbHRv 16022\nIGhhYsOtYQ== 16023\nIOuwmA== 16024\naWd1 16025\nZXJzdA== 16026\nIG5lbg== 16027\nIGJhY29u 16028\naXRpb3Vz 16029\nIGNhcnJpZXM= 16030\nIHByb21pc2Vz 16031\nbmRl 16032\nIExlZnQ= 16033\nIExpbQ== 16034\n5qM= 16035\nIDQ0 16036\nIGNhcmVlcnM= 16037\nIOyjvOs= 16038\nIHNwZWVkcw== 16039\ncXXDqQ== 16040\nbWFk 16041\nbWFya2V0 16042\naXNtZQ== 16043\nIDIwMDM= 16044\nIHJlY2Vzcw== 16045\nIEpVRA== 16046\nIHJhY2lzdA== 16047\nIFNjaGw= 16048\nIHBhcmxlcg== 16049\nIG90cm9z 16050\naXNoZXM= 16051\nIGNvbnZlcnRlZA== 16052\nYWFhYQ== 16053\n0LDQvdC40Lg= 16054\nIEFyaw== 16055\nIENoYW5jZQ== 16056\nIGVsZW1lbnRhcnk= 16057\nzrXOvQ== 16058\naW5rcw== 16059\nSW50ZXJ2aWV3ZXI= 16060\nIGZyZWVseQ== 16061\nYWxhaA== 16062\nIOuLpOuluA== 16063\nIHJlcXVlc3RlZA== 16064\nIHRvcnF1ZQ== 16065\nbm/Fm2Np 16066\nb3VyZWQ= 16067\nIFN0YWZm 16068\nIHN0YWlu 16069\nIEFsYW4= 16070\nIHZlcmU= 16071\nIFdpbnRlcg== 16072\nIGRlZmVjdA== 16073\naWVkeQ== 16074\nIGJlYXRz 16075\nIGjDoQ== 16076\ndW1u 16077\nb29ucw== 16078\naXR1ZGVz 16079\nIHNlaXQ= 16080\nb2x5 16081\nIHJlc2Vydg== 16082\nIGV4dHI= 16083\nIHBoeXNpY2lhbg== 16084\ndmlzb3I= 16085\nIGhhbmRmdWw= 16086\nIE5hdGlvbnM= 16087\nIOyii+ydgA== 16088\ndWNjZXNz 16089\nIHVwc3RhaXJz 16090\nIFNxdWFyZQ== 16091\nIGhlaW4= 16092\nIFNlYXNvbg== 16093\nb2xpcw== 16094\nIHByaW5jZQ== 16095\nIGRlZmVuc2l2ZQ== 16096\n570= 16097\nINC80LXRgdGC 16098\n0ZbQuQ== 16099\nINin2YY= 16100\ndW1ibGU= 16101\n6rmM7JqU 16102\nIGFzc2Fzcw== 16103\nIGNpcmN1bGFy 16104\nIHF1YWxpdGllcw== 16105\nIGhtbQ== 16106\nIGJsb3du 16107\nIExpeg== 16108\nIEt1cg== 16109\nIFNB 16110\nIGZpbmRpbmdz 16111\nIGNvbG91cnM= 16112\nIGRlbGxl 16113\nIElS 16114\nIEF0aA== 16115\nIER1Yg== 16116\nIE94 16117\nINiu 16118\nIHBvY2tldHM= 16119\nIGdyaWxs 16120\nIHN3aXRjaGluZw== 16121\nIHByZWZlcnJlZA== 16122\nIFdhbGVz 16123\nIGV4ZW1wbG8= 16124\nIGNob3BwZWQ= 16125\nIHZhY2NpbmF0aW9u 16126\nIG5ldXJv 16127\nIHNwZWNpZnk= 16128\naXZvcw== 16129\nIHNlcsOh 16130\nIHppZQ== 16131\nIOCurg== 16132\nIHJlc3VsdGluZw== 16133\nIFVnaA== 16134\nIG1lc3NlZA== 16135\nQ0Q= 16136\nIHBhYXI= 16137\nIGNvbWVy 16138\nIGNvdWNo 16139\nIEZlc3RpdmFs 16140\nIDQ5 16141\ndm91cw== 16142\nemVucw== 16143\nIEtlbm5lZHk= 16144\nIFRz 16145\nIOuztOyX 16146\nIGRlbW9uc3RyYXRpb24= 16147\nIHVudG8= 16148\nIGZydXN0cmF0aW5n 16149\nIGxhYm9yYXRvcnk= 16150\nIGVneQ== 16151\nIGJlYXV0aWZ1bGx5 16152\nIOyerOs= 16153\nIGFsZ3U= 16154\nIMO2eWxl 16155\nIFBI 16156\nIGZvcnR1bmU= 16157\nIGNsZWFuZXI= 16158\nIFJvYmlu 16159\nIHNhdXM= 16160\nIEdlbGQ= 16161\nIGthdA== 16162\nb2Jz 16163\nIG9sdXI= 16164\nIG1hdHQ= 16165\nIHF1ZXN0YQ== 16166\nIHN1Z2dlc3Rpb24= 16167\nZW5jZXI= 16168\n0L7RgdGC 16169\nIHJhZGFy 16170\nIOyeoQ== 16171\naXNoYQ== 16172\n4K6o 16173\namVz 16174\nIHZlZWw= 16175\n7IKw 16176\nIGF1dGhvcnM= 16177\n44CO 16178\ncGxhbg== 16179\nIGNvbGxhYm9yYXRpdmU= 16180\nIGluc3RpbmN0 16181\nIGZhcm1pbmc= 16182\nYXVnZQ== 16183\nRWR1 16184\nIG1lbWJlcnNoaXA= 16185\nIHNpbXVsdGFuZW91c2x5 16186\nIGJha2U= 16187\nIGvDpA== 16188\nIGxlY3R1cmVz 16189\n0YfQtdGB 16190\nIHByZW5kcmU= 16191\nIGNvbGxhcHM= 16192\nIFNheWE= 16193\nIEZ1dA== 16194\nIHlvZw== 16195\nIFJhdGhlcg== 16196\n2LHZig== 16197\nIGNhbXBz 16198\n0L7Qu9C+0LQ= 16199\nIHNpbXVsYXRpb24= 16200\nIE1haw== 16201\nTGF1Z2hz 16202\nIGdyZXk= 16203\nIHNlbnRlbmNlcw== 16204\neWVu 16205\nIFVubGVzcw== 16206\nSmU= 16207\nIFNhdGFu 16208\nINGC0LDQutC20LU= 16209\nIE5B 16210\nIGJyb24= 16211\nID9d 16212\nIHNvdWxz 16213\nIGxpZ2h0bmluZw== 16214\nIGltYWdpbmVk 16215\nIGN6eWxp 16216\ncHNpbG9u 16217\nZXR0YQ== 16218\nIGJlbGlldmluZw== 16219\nIHN0cm9uZ2VzdA== 16220\nIENPTg== 16221\nIHF1ZWxxdWVz 16222\nIGltbWlncmFudHM= 16223\nIHdhbGxldA== 16224\nIEplcnNleQ== 16225\nIGltcGxpY2F0aW9ucw== 16226\nIGZvcmI= 16227\n44CP 16228\nIHVuYmVsaWV2YWJsZQ== 16229\n2KfYoQ== 16230\nIG9wZXJhdGlvbmFs 16231\nw7xz 16232\nIEdN 16233\nIOq3uOufsOuNsA== 16234\nIGdyYWNpYXM= 16235\nIGVudGVuZA== 16236\nIFJlZ2FyZA== 16237\ncm9i 16238\nINGC0LXRhQ== 16239\n6I8= 16240\nIFJldm9sdXRpb24= 16241\nIHdhYXI= 16242\nIEJpeg== 16243\ndGhlbGVzcw== 16244\nIHNwb25zb3JlZA== 16245\ncXVpZXI= 16246\nIOydvOs= 16247\nIHRlaw== 16248\nIOuQoA== 16249\naWdrZWl0 16250\nIEx1Y2s= 16251\nIENlcnRhaW5seQ== 16252\nIHRvbGw= 16253\nINC90LjRh9C10LPQvg== 16254\nIE1vbmV5 16255\nINGB0YLQvtGA 16256\nIERvdWJsZQ== 16257\nIFdvbGY= 16258\nIGNodW5r 16259\nzqzOvQ== 16260\naXTDqXM= 16261\nb25pbmc= 16262\nTWFy 16263\nIGdyYW5kZXM= 16264\nIGNvbGxlY3Rpb25z 16265\nIEV1cm9wYQ== 16266\nINCw0YA= 16267\nIOKAi+KAi+KAiw== 16268\nIOq3uOufrOuptA== 16269\nINC+0LHRig== 16270\nIOyLnOqwhA== 16271\nIEN1c3RvbQ== 16272\nIOyymA== 16273\n0ZbQu9GM 16274\nIGluZGl2aWR1YWxseQ== 16275\n7Zc= 16276\nIGRvemVu 16277\nIG93ZQ== 16278\nIFZpY3Rvcmlh 16279\nIGJlZXQ= 16280\ndXJi 16281\nIGFuYWxvZw== 16282\nacOnw6Nv 16283\ngpw= 16284\nc29ldmVy 16285\nIG1vZG8= 16286\nIHN1YnNjcmliZWQ= 16287\n7J6s 16288\nIGVudGl0aWVz 16289\nIGNsb3NldA== 16290\nIHJlc3BvbmRpbmc= 16291\nIHByaW50ZXI= 16292\nIFN0ZXBoYW4= 16293\nIGJ5xYI= 16294\nIERvbQ== 16295\nIEZlcm4= 16296\nIFBpZXI= 16297\nIHdpxJlj 16298\nIGhlbmNl 16299\nIG1vZHVsZXM= 16300\nIOuUsQ== 16301\nIERhbm55 16302\nINGB0LXQsdC1 16303\nIHZhZA== 16304\nIOyXhA== 16305\nIHNvdXM= 16306\nIHNwaGVyZQ== 16307\nQlk= 16308\nIFBlZA== 16309\naWduZWQ= 16310\nIHdoZWF0 16311\nIHVuZGVycw== 16312\nIGV2b2x2ZQ== 16313\nIGRlY2xhcg== 16314\nIGxpZ2h0bHk= 16315\nIGlkZW50aWZ5aW5n 16316\nIGxlZ2VuZGFyeQ== 16317\nIGdlbnVpbmU= 16318\nIGdyaW5k 16319\nIFVuZQ== 16320\nZ2ViZW4= 16321\nIGJpY3k= 16322\nIGp1bXBz 16323\nIHByb3ZpbmNl 16324\nemnEmQ== 16325\nINeQ16DXmQ== 16326\nIGhvYw== 16327\nINCx0Ls= 16328\nIEdyYWQ= 16329\nIHJldmVuZ2U= 16330\nINin2YTYqg== 16331\nb29o 16332\n0LDRhtC40Lg= 16333\nIGVsZWN0cm8= 16334\nIOuQkA== 16335\nIGZhbHM= 16336\ncmllbA== 16337\nb2tlcg== 16338\nIEV4Y2VsbGVudA== 16339\nIE1vcmdhbg== 16340\nIGJyaWNr 16341\nIHN1YnN0YW50aWFs 16342\nIHBvbGx1dGlvbg== 16343\nIFTDvHI= 16344\nIEV2ZXQ= 16345\nIGx1bmc= 16346\n15nXqQ== 16347\nb21tZXM= 16348\nIHJlYWxpemluZw== 16349\nIGh1bWJsZQ== 16350\nIExvY2s= 16351\nIGJvZA== 16352\nIOyWuA== 16353\nIHBlZXJz 16354\ndXp6 16355\nIGVtYmVkZGVk 16356\nIGNsYXJv 16357\nIGFnZ3JlZw== 16358\nIGVtcGxveWVycw== 16359\nIFJhag== 16360\nIFlp 16361\nIGpldQ== 16362\nYXRlcnM= 16363\nIHN0cmlrZXM= 16364\nbm9z 16365\nYXV0cmVz 16366\nZHI= 16367\nb3BoZXI= 16368\nIEFwcGFyZW50bHk= 16369\n7ZiE 16370\nIGluZmFudA== 16371\n2KfYqA== 16372\n0YLRiw== 16373\n7Zs= 16374\n2q8= 16375\nIHJlZGVz 16376\nYWNhxJ/EsW0= 16377\nIERBVklE 16378\nIENoaWNrZW4= 16379\nIHBlcnNwZWN0aXZlcw== 16380\nIHZpZXdlcg== 16381\nIHNoYXI= 16382\nINC/0YDQvtC40Lc= 16383\nbGlndA== 16384\nZXJvcw== 16385\naXRhYmxl 16386\n0LjQu9C+0YHRjA== 16387\nIGRpZsOt 16388\ntOuNsA== 16389\nIHJldGlyZWQ= 16390\nIHRoYXRz 16391\nemVuaWU= 16392\nYmVpdGVu 16393\nIG15Y2tldA== 16394\nIFJhYg== 16395\nIGluZmxhbW0= 16396\n7LCu 16397\nIGR1bQ== 16398\nIGRhZGR5 16399\nIGltbWVycw== 16400\nIHBsYXlsaXN0 16401\n4K+G 16402\nIHRyYXVt 16403\nIHJlZnVzZQ== 16404\nc3RlcA== 16405\n4K6a 16406\nY3Vw 16407\nIHBvcHM= 16408\ncmltaW4= 16409\nYXnEsW0= 16410\nIGFsZA== 16411\nIHVubmVjZXNz 16412\nIGRhaA== 16413\nIElyaXNo 16414\nIGNvbXBy 16415\nbGHFnw== 16416\nVFA= 16417\nIHRyYW5zbGF0ZWQ= 16418\nU2M= 16419\nY2XEn2lt 16420\ntJA= 16421\nIGRyZWk= 16422\nINC70Y7QtNC10Lk= 16423\nIHF1aWVybw== 16424\nIGhlbGU= 16425\nemxpY2g= 16426\nIGFwcGxlcw== 16427\nIGRpc3RyaWN0cw== 16428\nIGNyZWRpdHM= 16429\nIGFzcA== 16430\nIOuLqA== 16431\nb3JhbA== 16432\nIHN0ZXBwaW5n 16433\nIFZh 16434\nIGdhaW5z 16435\nNjU= 16436\nIG51ZXN0cmE= 16437\nZWRheQ== 16438\nYXNzYWRvcg== 16439\nIExpbmQ= 16440\nIGNyb3Bz 16441\nY2llbmRv 16442\naWd1ZQ== 16443\nIGJhbmE= 16444\nQW0= 16445\nIHBlbnQ= 16446\nIGFkZGljdGlvbg== 16447\nIHBhY2thZ2luZw== 16448\nw6Rk 16449\nqqg= 16450\nIHBlcnF1w6g= 16451\nIGNhbXBhaWducw== 16452\nIHN0ZWVw 16453\nIG5ldWU= 16454\nIGVtYmFycmFzc2Vk 16455\nIGRpc3RpbmN0aW9u 16456\naXR6ZXI= 16457\nIHJlZ2lzdHJhdGlvbg== 16458\nIGxsYW0= 16459\nIEFsbWlnaHR5 16460\nbGllc3Q= 16461\nIHV6 16462\nbmFr 16463\n57o= 16464\nIHRlcmF6 16465\naWFtZW50ZQ== 16466\nIHRyYW5zYWN0aW9ucw== 16467\nIGPDtHQ= 16468\nIHN3aXRjaGVk 16469\nIGNvbWJv 16470\nIHByYXllcnM= 16471\nIGludGVybnNoaXA= 16472\nIGFkZHJlc3Nlcw== 16473\nIGNoYXJpdHk= 16474\nIFdPTw== 16475\nIGJhaXQ= 16476\nIO+/vQ== 16477\nIGZpY2E= 16478\nIFR5bGVy 16479\nYXJ1 16480\nIGF0b21z 16481\nIExldmVs 16482\nINC/0L7RgtC+0Lw= 16483\nIGZhbWU= 16484\ndWxr 16485\nIHRlYWNoZXM= 16486\nIHJlYnVpbGQ= 16487\n0LXQtNGM 16488\nIEluZG9uZXNpYQ== 16489\ndXNoaQ== 16490\nIFNob3J0 16491\nIGVuc3VyaW5n 16492\nZnM= 16493\nZWxl 16494\nIG1hcmdpbmFs 16495\nIGNvbmNsdWRl 16496\nYW10 16497\nIHZlcmlmeQ== 16498\nIE1jRG9uYWxk 16499\nIHNrYWw= 16500\nIHJlY29uc3Q= 16501\nIE1hbm4= 16502\nIGJhc2VtZW50 16503\nIHRyYW5zZm9ybWVk 16504\nIG9jY2FzaW9uYWxseQ== 16505\nem9uZQ== 16506\nIERhbnM= 16507\nINC60LDQutC+0Lk= 16508\nIGRpYWdub3NlZA== 16509\nIM+EzrE= 16510\nIGNvbW1hbmRz 16511\nIHByZXNpZGVudGlhbA== 16512\nIGFiYg== 16513\nIGJyYWNrZXQ= 16514\nIExlbQ== 16515\nw6VuZw== 16516\nIGZhdm9yaXRlcw== 16517\nIHJldm9s 16518\nIO2KuQ== 16519\nIGhhcmFzcw== 16520\n6YU= 16521\nIGNsZWFucw== 16522\nc3TDpG5k 16523\nIGtub2NrZWQ= 16524\nIHBlb3BsZXM= 16525\nIG11c2ljaWFucw== 16526\nIG11dHVhbA== 16527\nIENvbGQ= 16528\nODg= 16529\nemVq 16530\nYXRpZQ== 16531\nIEhvbm9y 16532\nIG9ic2Vzc2Vk 16533\nIE1VU0lD 16534\nIEJyZWFr 16535\nw7puZw== 16536\nIG1vZGlmeQ== 16537\nIHPDtnlsZQ== 16538\nINee15Q= 16539\nIE9ubGluZQ== 16540\nZm8= 16541\nIE1pbGxlcg== 16542\nIGxpa2luZw== 16543\nIGluaGFi 16544\nIGdyYXRpdHVkZQ== 16545\nIEpvdXJuYWw= 16546\nYXJuZXNz 16547\nSm9obg== 16548\nIEdpdA== 16549\nIHNpbmNlcmU= 16550\nIFNjaQ== 16551\nIEVsaQ== 16552\nIHN5bWJvbHM= 16553\nIG1hbnVhbGx5 16554\nzrXPgg== 16555\nINCy0ZbQtA== 16556\nIEZhdA== 16557\nIGxhYmVscw== 16558\nIHNvcGhpc3RpY2F0ZWQ= 16559\ndW1wcw== 16560\nIHJlbGVhc2Vz 16561\nIDQ3 16562\nIE9N 16563\n6rCA6w== 16564\nIEJpZW4= 16565\nIFJlZg== 16566\nIFN0YQ== 16567\nIEVnZw== 16568\nIGluZGljYXRvcg== 16569\ncHNvbg== 16570\nIG5hc8SxbA== 16571\nUmlnaHQ= 16572\nIGNvbnZleQ== 16573\nIGtub3Q= 16574\nIGNvbm5lY3Rz 16575\ndWxhcw== 16576\nIHByZWNlZA== 16577\nIGluZXF1YWxpdHk= 16578\nYW1pZW50bw== 16579\nIHJlcGx5 16580\nT1k= 16581\nIGRpc21pc3M= 16582\nIOuQnA== 16583\nINGF0L7RgNC+0YjQvg== 16584\nIG3DqWQ= 16585\nIHJhbmRvbWx5 16586\nIE9udA== 16587\ndWFyZA== 16588\nIHB1bGxz 16589\nINGC0LXQv9C10YDRjA== 16590\nIE5lZWQ= 16591\nIFNvZnQ= 16592\nIHN0cmVuZ3Rocw== 16593\nIGdvZWQ= 16594\ndW1lbg== 16595\nIO2OuA== 16596\nINC00L7QsQ== 16597\nIGNsYXJpdHk= 16598\nIEFp 16599\nIGJhbGxvb24= 16600\nIFBhbmQ= 16601\nIOyVhOuL 16602\nIHNoaW55 16603\nIHNtYWxsZXN0 16604\nb25pYQ== 16605\naGlsbA== 16606\nb3Rpbmc= 16607\nIGVpbmc= 16608\nIG1lcmVseQ== 16609\nIHNldXM= 16610\nINC90LXQvw== 16611\nIO2GtQ== 16612\nIGd1aWRlcw== 16613\nIHNwZWNpYWxpc3Q= 16614\nIHN0ZWFr 16615\nIG1pZ3JhdGlvbg== 16616\ncXVlbGU= 16617\nIHJ1aW5lZA== 16618\nIHB1cHA= 16619\nIGtlbmQ= 16620\nYW5nYW4= 16621\nIHBhbG0= 16622\nIHVuZmFpcg== 16623\nIHpt 16624\nIERW 16625\nY2hlc3Rlcg== 16626\n0LjRjg== 16627\nIG9vaA== 16628\nZXJn 16629\nQVRI 16630\nsKk= 16631\ncmlzb24= 16632\nIGludm9sdmluZw== 16633\nIHBhcnRseQ== 16634\nYW7Dp2Fpcw== 16635\nIHZvdw== 16636\nIHByb21pbmVudA== 16637\nIGNyeXN0 16638\naWJh 16639\nIGRlc2VydmVz 16640\nIG92ZXJ0 16641\nIHNlbnNpdA== 16642\nIFdoZQ== 16643\nIHRpZ2h0ZW4= 16644\nIGludGltaWQ= 16645\nIGFsaW1lbnQ= 16646\nd2lsbA== 16647\nIHN0cmVuZ3RoZW4= 16648\nIFRhbg== 16649\nb25p 16650\nIE11bg== 16651\nIHByb3Bo 16652\nIHJlaGVhcnM= 16653\nIEtsZQ== 16654\nIHZlY2Vz 16655\nIHdvbmRlcmVk 16656\nb2tp 16657\nIHNlbnNlcw== 16658\ntOyL 16659\nxrDhu5s= 16660\nIMiZaQ== 16661\nIG11Y2hvcw== 16662\nIHdhdGNoZXM= 16663\nb3J0dW5hdGU= 16664\nIEp1YW4= 16665\n7J6W7JWE 16666\n0YDQtQ== 16667\nZWk= 16668\naW9uZW4= 16669\nIGV4cGVyaW1lbnRhbA== 16670\nIGRhdWdodGVycw== 16671\n4Lib 16672\nIG1lbnRhbGx5 16673\nYmVjY2E= 16674\nYXdhcmU= 16675\n7ISd 16676\nIHdoYXRzb2V2ZXI= 16677\nIGVuYWJsZXM= 16678\nIExvdw== 16679\nb2lk 16680\n4LiK 16681\nw7Nk 16682\n2Lo= 16683\nIGNvbnN0cnVjdGVk 16684\nIExhZGllcw== 16685\nIGFjY3VzZWQ= 16686\nINCw0L0= 16687\nRGFu 16688\nIHNwYXdu 16689\nIGNvbnRhaW5lcnM= 16690\nIGFydGlzdGlj 16691\nxLFw 16692\nIGRpc2Ns 16693\nIGF1dHJlcw== 16694\naW5hcw== 16695\nIE5hdGlvbg== 16696\nIG5hZw== 16697\nYmVhbg== 16698\nd2hl 16699\nnOuPhA== 16700\nIFNlb3Vs 16701\nIO2PrA== 16702\nIE5pY2g= 16703\nIGNvbXBsZW1lbnQ= 16704\nIGludGVydmVu 16705\nIE1vZGVs 16706\nIE9yYW5nZQ== 16707\nbmFtb24= 16708\nIGNhbGN1bGF0aW9u 16709\nc2Vl 16710\nIHVzdGVkZXM= 16711\nIGxlYg== 16712\nIGRvY3Q= 16713\n0ZbQvQ== 16714\nIGZvc3Rlcg== 16715\nIGVsYXN0aWM= 16716\nIEFoaA== 16717\nIGFjZQ== 16718\nIFBpbms= 16719\nIEplZw== 16720\nIGRlZXI= 16721\nc2lz 16722\nIGpha28= 16723\nIEVtbWE= 16724\n0YHRgtCy0LXQvdC90L4= 16725\nIHBvcnRyYWl0 16726\nIG1ha2Vy 16727\nIGF1bWVudA== 16728\n0YDQvtCx 16729\nIGFpcnBsYW5l 16730\nIHRyYW5zcGFyZW5jeQ== 16731\nIGFkanVzdG1lbnQ= 16732\nIENEQw== 16733\nw6dvbg== 16734\nIHVwbG9hZGVk 16735\nINC00LXQudGB0YLQsg== 16736\nINCz0L7RgtC+0LI= 16737\nIGl0ZXI= 16738\nIGN1cnNl 16739\nw7Ru 16740\nbWVyY2U= 16741\nYXJhbg== 16742\nIGxlYWs= 16743\nIGFic2VuY2U= 16744\n0YHQutC40Lk= 16745\nIHJlYWRlcnM= 16746\nYWxlcg== 16747\nIGJlbmVhdGg= 16748\nYW5nbw== 16749\naGV0aWM= 16750\nIGZpbm5z 16751\nIHBvb3A= 16752\nIGR1cGxpYw== 16753\nSGk= 16754\naWdz 16755\nb2xvZ2ljYWxseQ== 16756\nb3Bw 16757\nIGRpemVy 16758\nIEFsbGVu 16759\nIGdsaQ== 16760\nIGFjY2VsZXJhdGlvbg== 16761\nIHZpdGFtaW4= 16762\ndsOk 16763\nIEFjY2Vzcw== 16764\n4K6Z 16765\ncsOhcw== 16766\nIGFwcHJlY2lhdGVk 16767\nIG5haA== 16768\nIHBvc3Rlcg== 16769\nIHRhbGU= 16770\nIGhpZ2hsaWdodGVk 16771\nxbxlbGk= 16772\nIGJsb2NrY2hhaW4= 16773\nIG1pY3Jvdw== 16774\nIGNpbmVtYQ== 16775\nIENoYW5n 16776\nIFNlYXJjaA== 16777\ndXN0ZXJz 16778\nIFplcm8= 16779\nIERpdmlzaW9u 16780\n0YDQsNGB 16781\nIHNjYXJl 16782\nIGplbGx5 16783\nIEFkbWluaXN0cmF0aW9u 16784\nU08= 16785\nIGxpbmVk 16786\nIOqwhA== 16787\nIGdlYmVu 16788\nIHNvZGE= 16789\nIHdpbm5lcnM= 16790\ns7w= 16791\n2ZI= 16792\nIEFtYg== 16793\n5ZQ= 16794\nIHBlZw== 16795\nNDM= 16796\nIHJhdXM= 16797\nIHJld2FyZHM= 16798\nIGluY2x1cw== 16799\nIGhpZ2h3YXk= 16800\nIGhhaA== 16801\nIG11bHRpcGxpZWQ= 16802\nIHPhur0= 16803\nIGRpc2NpcGxlcw== 16804\nIG5pbmc= 16805\nIGRyZXNzaW5n 16806\nIGF0dHJpYnV0ZXM= 16807\nIE1vc2M= 16808\nIEdyZWVjZQ== 16809\nIHNlaw== 16810\nIExlYXJu 16811\nIGp1cw== 16812\ncmVuZHJl 16813\nIHBlcnNvbm5l 16814\ncGxldGU= 16815\nIHBsYWNpbmc= 16816\nIGx1ZWdv 16817\naWxsYW5jZQ== 16818\nINC+0LHRiQ== 16819\nIHByb3Zpc2lvbg== 16820\nIGxpb24= 16821\ndHJh 16822\nYm9hcmRz 16823\nIGJlaGF2aW91cg== 16824\naGV5 16825\nIHN1YnNjcmlwdGlvbg== 16826\nIHByb3RhZ29u 16827\nIHZhcmE= 16828\nIMWfdQ== 16829\nIGhhaGE= 16830\nIHRlYXNwb29u 16831\n5p8= 16832\nYXZvaXI= 16833\nIGNyeXB0bw== 16834\nINGB0YLQsNGA 16835\nIFN0b3Jl 16836\nYWJz 16837\nIFN0dWRlbnRz 16838\nIGxhdW5k 16839\naW50bw== 16840\nIGFwcHJvYWNoZWQ= 16841\nsJw= 16842\n0YPRjtGJ 16843\nIExhYm9y 16844\nb3Rlcw== 16845\naWF0cmlj 16846\nIGdyb8Of 16847\ndXRpdmU= 16848\nINC40LQ= 16849\nIEdpYg== 16850\nIHBsYWNlbWVudA== 16851\nIGRpZsOtY2ls 16852\nIGZyb2c= 16853\nINCy0YHQtdGF 16854\nIEpy 16855\nYXplZA== 16856\n0YPRiQ== 16857\nIOq8 16858\nZnJhbWU= 16859\n0LDQtdGI0Yw= 16860\nIGxvY2tkb3du 16861\nIG1lZGk= 16862\nINeU157X 16863\n0LXQvdC40Lk= 16864\nZW1hbGU= 16865\n7KKF 16866\nYXRlcmFs 16867\nIGRpc3RhbnQ= 16868\nIGJlYXJz 16869\nIGpvdXJuYWxpc3Q= 16870\nIE1hcnNoYWxs 16871\nIElobmVu 16872\ndWV0b290aA== 16873\nYmFn 16874\nIMSRw6M= 16875\nIEhpZ2huZXNz 16876\nIOywjQ== 16877\n0LjQutCw 16878\nIFd1 16879\nIEZyYW4= 16880\nIHBlbmc= 16881\nIGZvbg== 16882\nIGh5cG90aGVzaXM= 16883\nINGA0YM= 16884\nIGx5 16885\n15o= 16886\n7JuU 16887\nIFJhZGlv 16888\n4Lie 16889\nRGF2 16890\nIGVtYmFycmFzc2luZw== 16891\nIOyeiOyWtA== 16892\nIGNhc3Rpbmc= 16893\nIGNhZ2U= 16894\nIFBzeWNo 16895\nIOydvOuLqA== 16896\nIMW+ 16897\naW1i 16898\nIGRpcmVjdG9ycw== 16899\nU0g= 16900\nIM+EzrfOvQ== 16901\n4buBdQ== 16902\nIGtvbnXFnw== 16903\nIG9wdGlvbmFs 16904\ncXVhcnRlcnM= 16905\naWtlcg== 16906\nIFNhbnQ= 16907\nIHZlcnNlcw== 16908\n67aA 16909\nIG9sYXI= 16910\nIM+H 16911\nIM6zzrnOsQ== 16912\nIEltbQ== 16913\nIGNvbnRyb3ZlcnNpYWw= 16914\nIGVyc3Rlbg== 16915\nIHJlY2lw 16916\nIENocmlzdGlhbml0eQ== 16917\nIOq0nA== 16918\nb3Jkb24= 16919\n15XXqQ== 16920\nIHNsYXNo 16921\nIFBm 16922\n0YPQtNGM 16923\n15XXnQ== 16924\nIFBlcnJ5 16925\nIG1hbXk= 16926\nIGJhY2tncm91bmRz 16927\nIOCujuCuqQ== 16928\nIHBlbmRhbnQ= 16929\nIENvbHVtYmlh 16930\nIGludmVyc2U= 16931\nINGH0LXRgNC10Lc= 16932\nIHN2 16933\nIGRpZ2dpbmc= 16934\nNDE= 16935\nY2hlbQ== 16936\nIG5hdmlnYXRpb24= 16937\nIFNoaW4= 16938\nIEZyb250 16939\nUEQ= 16940\nIGJlYXJpbmc= 16941\nIFdhc3Nlcg== 16942\nIHdheA== 16943\nIENIUklT 16944\nY2hpbmc= 16945\nIHByZXNzZWQ= 16946\nRWw= 16947\nIERhbA== 16948\nb25zaW4= 16949\nIGJpbmRpbmc= 16950\n0YHQutC+0Lk= 16951\ncG9vbnM= 16952\nIG1vY2s= 16953\nYXJlc3Q= 16954\n0LrRgNCw 16955\nTU0= 16956\nIGNvcnJ1cHQ= 16957\nc3Rvcm0= 16958\nIHJlZnJlcw== 16959\nIENvYWNo 16960\nbGzDpA== 16961\nIFRISVM= 16962\nIHBhcmFn 16963\nIOyTsA== 16964\ncG9vbA== 16965\nIGJpbGxpb25z 16966\nIOq5gA== 16967\nZ3JvdXA= 16968\nIHdlbGNvbWluZw== 16969\nY2VsbGVuY2U= 16970\nIER1a2U= 16971\n6ri0 16972\nIHByaW1lcmE= 16973\n7KC4 16974\nIHBvbmQ= 16975\nIHN0YXR1ZQ== 16976\nIOq1rOs= 16977\nIGhhdGNo 16978\nIGluc3RydW1lbnRhbA== 16979\nIHJlc2lkZW50aWFs 16980\n7Luk 16981\nIGFjY2VwdGluZw== 16982\nb3NoaQ== 16983\nZGF0ZQ== 16984\nIOyUqA== 16985\nIHBsYW50ZWQ= 16986\nIGpva2luZw== 16987\nIOyEnA== 16988\nIGhhdGVk 16989\nINGA0LDRgdGB0Lo= 16990\nIHNsZXB0 16991\nIHBhY2thZ2Vz 16992\nIGlzbGFuZHM= 16993\nZXNlbg== 16994\nxJ/EsQ== 16995\nIGRpYWdvbg== 16996\nIE9zYw== 16997\nIG1lc2g= 16998\nIHNjYWxlcw== 16999\nYXJpdHk= 17000\nIERlZmVuc2U= 17001\nIExld2lz 17002\nINGB0LXQs9C+0LTQvdGP 17003\nIGZsaWVz 17004\ndWluZWx5 17005\nIENvbnNpZGVy 17006\nIHN0YXJr 17007\naGV3 17008\nIEFzw60= 17009\ns7Tr 17010\nIHByb3Bvc2U= 17011\nIO2VmOuptA== 17012\nb2Rv 17013\nIE5vcm1hbGx5 17014\nIGhlZWZ0 17015\nIEhhcnJpcw== 17016\nZ3Jv 17017\nIEJsb29k 17018\nYmFzZQ== 17019\nIGlPUw== 17020\nIHRvdWNoZXM= 17021\nIGluc3Bpcg== 17022\nINeT 17023\nIGJpbmFyeQ== 17024\nIOy2lA== 17025\nIHNlcmlhbA== 17026\nIGlvbg== 17027\nIHVuZW1wbG95bWVudA== 17028\nIG9kZHM= 17029\nIEZhYg== 17030\nIEZCSQ== 17031\nQlJVTg== 17032\nIHdlaWdodHM= 17033\nzr3Ovw== 17034\nYXRpbGU= 17035\nIG51cnNlcw== 17036\nIGludm9sdmVtZW50 17037\nIO2UvA== 17038\nIGdvdmVybmFuY2U= 17039\nIOKCrA== 17040\n0YDRg9C/ 17041\naWVycmE= 17042\n7ZiV 17043\nIEplcnJ5 17044\nIGJlYXJk 17045\nIHNhbHZhdGlvbg== 17046\nIEFsb25n 17047\nZ2VudGxl 17048\nIEtp 17049\nYm9s 17050\nIFBsYXQ= 17051\nIGhhc2h0 17052\nIHdhcmU= 17053\nIHBhcnRpZQ== 17054\neWN6 17055\nIGludHI= 17056\nRmlo 17057\nbmVudA== 17058\nIGNoZWF0 17059\naWxlbg== 17060\nIOuv 17061\nb3JpZQ== 17062\nIGbDoWNpbA== 17063\nZXRyaWM= 17064\nIGFmZmVjdGluZw== 17065\ndW5jaWF0aW9u 17066\nIGFmZmFpcnM= 17067\nIGJlZQ== 17068\nIHZpZXdpbmc= 17069\nIG9yYW5n 17070\nIExhbg== 17071\nINCh0YI= 17072\nIE1lcw== 17073\ng4E= 17074\nZXJpZQ== 17075\nIGVzcGE= 17076\nIGludGVycHJl 17077\nIHBvc3Nlc3M= 17078\nIHB1cmVseQ== 17079\ncml0bw== 17080\nZm91bmQ= 17081\nYXNtYQ== 17082\n7KCB7J24 17083\nIGV4YW1pbmU= 17084\nINGD0Lw= 17085\nIGJlc2No 17086\nIFRvbW9ycm93 17087\nIEJsb2Nr 17088\nIHZhcmlhbnQ= 17089\nIHByZWZlcmVuY2U= 17090\nIGNvYWNoZXM= 17091\nIG1lZGljYXRpb25z 17092\nIO2YhA== 17093\nIGVtcGlyZQ== 17094\n64Sk 17095\nIElsbGlub2lz 17096\nIGNyaXNweQ== 17097\nIHRow6w= 17098\nIGJlZXM= 17099\nNzc= 17100\nIGdsb3c= 17101\n6Lo= 17102\nIFN0dWRpZXM= 17103\nIENoYWxsZW5nZQ== 17104\nIHVubGlrZWx5 17105\n0Kc= 17106\nxLF5b3JzdW4= 17107\nRElF 17108\nIG1pbmltaXpl 17109\naXphcmQ= 17110\nIMO6bg== 17111\nIGVuY29udHJhcg== 17112\nIEtpbGw= 17113\n5bs= 17114\nIHZhbmlsbGE= 17115\nIEdyYW50 17116\nIEdU 17117\nc2Vh 17118\nIHNvdWdodA== 17119\n0LLQvtC0 17120\nIG7DpG0= 17121\nIEF1bnQ= 17122\nT1dO 17123\nIHB1bXBraW4= 17124\nc3RlbGxlbg== 17125\nIHJhZw== 17126\n0LXQs9C00LA= 17127\nIHN0b3J5dA== 17128\nIGZvcnVt 17129\nIGVzdGFiYQ== 17130\ndWNoZQ== 17131\nIGNvbmdyZXNz 17132\nIFJleQ== 17133\nIGRyYW1hdGljYWxseQ== 17134\nIFNwb3J0 17135\nIFllbGxvdw== 17136\nIOqzhOyGjQ== 17137\nIGRpc2d1c3Rpbmc= 17138\nIFJlY2VudA== 17139\nIGFjcXVpcmVk 17140\nIGNhYmxlcw== 17141\nZGlu 17142\nIHZpc3Rv 17143\nIGNvbW11bmljYXRpbmc= 17144\n0YHRgtCw0LLQu9GP 17145\n0LXRgdGC0L4= 17146\nIHLDqWc= 17147\nIHNvY2tz 17148\nIHByb2Nlcw== 17149\nYmVjYXVzZQ== 17150\nIHV0dGVy 17151\nIGNvbG9jYXI= 17152\nIG5ld2VzdA== 17153\nIGdyYW1t 17154\nIHNoaWZ0aW5n 17155\nIGNhcnJpZXI= 17156\nINGB0LrQvtGA 17157\nIFNjaHc= 17158\nIGV4ZWN1dGVk 17159\nIG1haW50YWluZWQ= 17160\nIM+G 17161\nIE1vc2Vz 17162\nIGRpc3Nl 17163\nIGhvcnI= 17164\n44Cc 17165\nIHJhbGx5 17166\nIGFsbGVt 17167\nIEV2ZW50dWFsbHk= 17168\nIGRpeW9y 17169\nbHZhbmlh 17170\nIHNjaG5lbGw= 17171\nIOqzvA== 17172\nIOunpA== 17173\nIHN0cnVnZ2xlcw== 17174\nbGF0ZQ== 17175\nIGNsYXJpZnk= 17176\nw6ltZW50 17177\nIG11bHRpcGxpYw== 17178\n0LjQsdC+ 17179\nIGpvdXJu 17180\nIGZyYWdy 17181\nIHN1cnByaXNpbmdseQ== 17182\nIGRlc3BlcmF0ZQ== 17183\nNTI= 17184\nIHN1bA== 17185\nIFJlYWQ= 17186\nIEZyaWVk 17187\nIG1vbmQ= 17188\nd29v 17189\nIG9yZ2FuaXppbmc= 17190\nIFNvb24= 17191\nINCy0L7Qv9GA0L7RgQ== 17192\nIE51cg== 17193\nINCX0LQ= 17194\nIHNwaWRlcg== 17195\n0LXRgdGP 17196\nIHR1dG9yaWFscw== 17197\nIG51dHJpZW50cw== 17198\nb3Jlcg== 17199\nIGNvZWZmaWNpZW50 17200\nIGFycmFuZ2VtZW50 17201\nIHByaWNpbmc= 17202\nbmFu 17203\neXU= 17204\nQkw= 17205\nIHRyaWJl 17206\nIEhvd2FyZA== 17207\ndW5rcw== 17208\nIG5ld2Vy 17209\nIHByb3Zpbg== 17210\nIHByZWRpY3Rpb24= 17211\naG9z 17212\nIG9sc3Vu 17213\nIEFyb3VuZA== 17214\nIHZpZXI= 17215\nINGB0YLQvtGA0L7QvQ== 17216\nIHZhbGxleQ== 17217\nIEVsYQ== 17218\naWZp 17219\nIGdhbGF4eQ== 17220\nIHRyYW5xdQ== 17221\nIGFkdmVycw== 17222\nIFRlbXBsZQ== 17223\naWZmcw== 17224\naWdlbmNl 17225\nIGvDtm5udGU= 17226\nIMSRw7M= 17227\nRGlk 17228\nIHBob3RvZ3JhcGhz 17229\nIEFXUw== 17230\n0YbQuNGP 17231\nIGd1YXJkcw== 17232\nIGFwcG9pbnRlZA== 17233\nIEdpbA== 17234\nINC80L7QvA== 17235\nIGNvZA== 17236\nIFVubGlrZQ== 17237\nIGV2ZW5seQ== 17238\naXNjb25zaW4= 17239\nIGVzdG91 17240\nIG1uaWU= 17241\nIEV4ZWM= 17242\nIE1W 17243\nIEVpbmU= 17244\nIFJvZ2Vy 17245\nIEZhYw== 17246\nIExpc3Q= 17247\nIGZ1ZXI= 17248\n0LDQtdGC0LU= 17249\nb21lZA== 17250\nIGF0dHJhY3Rpb24= 17251\nIHRlcnJhaW4= 17252\nIERyb3A= 17253\nIGNvcnBvcmF0aW9ucw== 17254\nIHNjaWVuY2Vz 17255\nIHRocm9uZQ== 17256\nIGFq 17257\nIFJvdA== 17258\nIHN1cHBvcnRlcnM= 17259\nIEJlcmU= 17260\nSGVyZQ== 17261\nIGRpZmVyZW50ZXM= 17262\nIHNpZ25pZmljYW5jZQ== 17263\nz4POtw== 17264\nIGNsYW1w 17265\nIOuMgOs= 17266\nIGZhYnVsb3Vz 17267\ncmV6 17268\nIGFzc3VtcHRpb25z 17269\ndXRoZXI= 17270\nd2lk 17271\ncG90 17272\nIHlhbg== 17273\ndWxpbg== 17274\n0YDRi9Cy 17275\nIFNsb3c= 17276\nIFBlbm5zeQ== 17277\nIO2VtOyEnA== 17278\nIG1laW8= 17279\nIHdlYWx0aHk= 17280\nIEVpZ2h0 17281\nIHB1bHNl 17282\nIGZyaWN0aW9u 17283\naWRpdHk= 17284\nIEhvbGw= 17285\naXlvcnVt 17286\nIHNvdW5kZWQ= 17287\nIENhcnI= 17288\nIGZvcms= 17289\n4pg= 17290\nIFBB 17291\nIGNvbnNwaXI= 17292\nIGNvZGluZw== 17293\ncnQ= 17294\nIFR5cA== 17295\nIOyWkQ== 17296\nINC/0L7Qsw== 17297\nIG1pc2Vy 17298\nINGB0LzQvtGC0YA= 17299\nIFN3ZWRlbg== 17300\nIG9sYXJhaw== 17301\nIFpoYW5n 17302\nIENoaQ== 17303\nIFRpdGFu 17304\nIHNjcmVlbmluZw== 17305\nIFNwaWRlcg== 17306\nIMWeaW1kaQ== 17307\nIG9ic3RhY2xlcw== 17308\nbGFyYQ== 17309\nIGNoYWxsZW5nZWQ= 17310\ncHNl 17311\nVE9O 17312\n4bul 17313\nIFBp 17314\nIGxhZ2k= 17315\naWV1cnM= 17316\nIGh1cnRpbmc= 17317\nIG5lZ2xlY3Q= 17318\nIGdlbmVyYXRpbmc= 17319\nIHlvdW5nZXN0 17320\nIGF1ZGl0 17321\nINGA0LXQtw== 17322\nz4HOrA== 17323\nIGRvbmF0ZQ== 17324\nIFBERg== 17325\nIHZpc2l0cw== 17326\nIGNydWlzZQ== 17327\nUFA= 17328\nYXNlcg== 17329\nIHdzcA== 17330\nYmFja3M= 17331\naXZhbHM= 17332\nIGRldmU= 17333\nIHByb3BvcnQ= 17334\nIGNhdGg= 17335\nIEVmZmVjdA== 17336\nIHdpbmRz 17337\nIOyZlA== 17338\nIGNoYXJ0cw== 17339\nIHNhbWE= 17340\nIGF1dG9tYXRpb24= 17341\nINC/0L7QutCw 17342\nIG9sYW4= 17343\nIGJvYXRz 17344\nIGNhZmU= 17345\nIGRlbmllZA== 17346\nIE1hbWE= 17347\nIGJsb2NraW5n 17348\nIFRob3I= 17349\nIHBoZW5vbWVuYWw= 17350\nIHN0YWtlaG9sZGVycw== 17351\nIHVub3M= 17352\n0YPQtdGC 17353\nIEFicmFoYW0= 17354\nIGRldGVjdGlvbg== 17355\nIGp1cmlz 17356\nIHBvd2VyZWQ= 17357\nemlhbA== 17358\nIHdlbGZhcmU= 17359\nIHVwZ3JhZA== 17360\nIG1vxbxuYQ== 17361\nIENhc2U= 17362\nY3VsYXI= 17363\nlOydtA== 17364\nIEd1ZXNz 17365\nIGN5Y2xlcw== 17366\ncm9jaw== 17367\ndW1p 17368\nIGVsaXRl 17369\nIHF1w6g= 17370\n0YLQvtC8 17371\nIHNob3Jl 17372\nZ3VudGE= 17373\nIGt1 17374\nIGZhaXRoZnVs 17375\nIEplcmVteQ== 17376\nYWlk 17377\n4Lc= 17378\ndWdhbA== 17379\nIFZlbA== 17380\nIHZyYWk= 17381\nc3RlbGw= 17382\nqLg= 17383\nIGtvbA== 17384\n6L0= 17385\nIHF1YW50bw== 17386\nINC30LDRgA== 17387\nIDIwMDI= 17388\nZXN5 17389\nIHJlc2VydmU= 17390\nINC80L7QvNC10L3Rgg== 17391\nIGRlcGxveWVk 17392\nIGRlZmluaW5n 17393\nIHNhdQ== 17394\nIGdhYXQ= 17395\nIik= 17396\nIHRyYW5zbWl0 17397\nIHB1Ymxpc2hpbmc= 17398\nIHJhbmtpbmc= 17399\nIG9mZmVuc2U= 17400\nIDQ2 17401\ncGlu 17402\nIFRha2luZw== 17403\nIGVudGl0bGVk 17404\nIGdlbnVpbmVseQ== 17405\nIHZhcmlhdGlvbnM= 17406\nIGZpbmRl 17407\nIHRhdQ== 17408\nIHVuZm9ydHVuYXRl 17409\nIFJhaA== 17410\ncG9ydHM= 17411\nIGPF 17412\nIG1vbmtleQ== 17413\nIGJyYWM= 17414\nd2Vp 17415\nbHVuZw== 17416\nIGFydGlm 17417\nIHN5cnVw 17418\nINCU0LDQsg== 17419\nIGxpZnRlZA== 17420\nIGNoZXo= 17421\nIEFkdmVudA== 17422\nIFN0b2Nr 17423\nIGRvbA== 17424\n0LzQtdC9 17425\n0LjRiNGM 17426\nIHlu 17427\nZ2lv 17428\nZGV0 17429\nIGRlc3Nl 17430\nIGdyaQ== 17431\nIENoYWlybWFu 17432\n54U= 17433\nIGN1ZW50YQ== 17434\nYW5pbQ== 17435\nIGNyYWI= 17436\nIGVzY2Fs 17437\nIHByZW1pw6hyZQ== 17438\nIEdlZg== 17439\nIGRpbmluZw== 17440\nIHNldmVudGg= 17441\nIGNoYXNpbmc= 17442\nIFRvd2Vy 17443\nIGJydXRhbA== 17444\nIGZ1bmRhbWVudGFsbHk= 17445\n0LvQtdC90LjRjw== 17446\nc3RhZ2U= 17447\nIGFjcXVpcw== 17448\nIGN5bGluZGVy 17449\nIGNvbW1hbmRlcg== 17450\nbWVt 17451\nIFVW 17452\naGFwcHk= 17453\nIGVwc2lsb24= 17454\nIGludml0YXRpb24= 17455\nIGZhcm1lcg== 17456\nY2hhaXI= 17457\nIGRlc3Rpbnk= 17458\nIHNvdmVyZQ== 17459\nIEhlYnJldw== 17460\nIHNlcnZhbnQ= 17461\nIGJldw== 17462\nIGdhc3Q= 17463\ndXRpZXM= 17464\nIGFkbWluaXN0cmF0aXZl 17465\nIENvbW1hbmQ= 17466\nw6l0YQ== 17467\nIG5pdHJvZ2Vu 17468\n6re8 17469\nIGFiaQ== 17470\nIHZpbGxhaW4= 17471\nIGJsYW5rZXQ= 17472\nIFNlbmQ= 17473\nIGJlYXRlbg== 17474\nsoQ= 17475\nIHZvbHVudA== 17476\nIHNjaG9sYXI= 17477\nIEVtcGVyb3I= 17478\nIDQz 17479\ndmFibGU= 17480\nIER1cw== 17481\nIEdV 17482\nIHRhcmdldGluZw== 17483\nd3d3 17484\nIGFtZW5kbWVudA== 17485\n7IaM6w== 17486\nIHRpbmc= 17487\nIG5hc3R5 17488\nIGdhdWdl 17489\nINGA0L7QtA== 17490\nIEhhbnM= 17491\nWW91cg== 17492\nzrHOvQ== 17493\nIHByb2pldA== 17494\nIEhhd2FpaQ== 17495\nIHN1c3BpY2lvdXM= 17496\nIHNjaHc= 17497\nIHJlbW92YWw= 17498\nIGludHJpZw== 17499\nIE1V 17500\nIHBvbnRv 17501\n4KS+ 17502\nINC+0LHRgNCw0Lc= 17503\nIGd1ZXNzaW5n 17504\ncGFjZQ== 17505\nIG1vdGhlcnM= 17506\nIG1pbGxpbWV0ZXI= 17507\n0LvQtdC90LjQtQ== 17508\nIGF2YWlsYWJpbGl0eQ== 17509\naWN6 17510\nIGZyYWN0 17511\nIGJhc2Vz 17512\na20= 17513\nIEJUUw== 17514\nIEZpZWxk 17515\nIGR6aWU= 17516\nIHNlZ3VuZG8= 17517\nIOuCmOuKlA== 17518\nIGxlZ2l0aW1hdGU= 17519\naW1hcw== 17520\nINCy0L0= 17521\nIGNvcnJ1cHRpb24= 17522\nIHNtYXNo 17523\nIFZhbGVudA== 17524\nIGFsaWduZWQ= 17525\nIFBlbm5zeWx2YW5pYQ== 17526\nIGdhYg== 17527\nIEV1bg== 17528\nZW50aA== 17529\nIE1vcm5pbmc= 17530\nIGNhbmRsZQ== 17531\nIGJhY2twYWNr 17532\nIElzbGFtaWM= 17533\nYcOnw7Vlcw== 17534\nIGVuY3J5 17535\nIG11c2hyb29tcw== 17536\n7YyM 17537\nZGl0 17538\nIHRyYW5zaXQ= 17539\nIFdpc2NvbnNpbg== 17540\nIHBhcnRpY2lwYXRlZA== 17541\nIElscw== 17542\nIHVuZm9sZA== 17543\ntoDr 17544\nIHByb2ZpdHM= 17545\nIHdhcm1pbmc= 17546\nIEdhbmc= 17547\nIG5ldHdvcmtpbmc= 17548\nIG1lZ2E= 17549\nIHRob3JvdWdobHk= 17550\nbGVtZW50cw== 17551\nIEht 17552\nIGRlY2lkaW5n 17553\nIGVtb3Rpb25hbGx5 17554\nIGV4aGF1c3RlZA== 17555\nINCf0L7Rgg== 17556\nY2lkbw== 17557\nIEhUTUw= 17558\nIGNvcHlyaWdodA== 17559\nIG1lbG9keQ== 17560\neWlt 17561\nIGFuZGVycw== 17562\nb3Nob3A= 17563\nIOuzvA== 17564\nIGF0aGxldGU= 17565\nIEdF 17566\nIGZyZXF1ZW50 17567\nIGRlc2lyZXM= 17568\nIG5lZWRpbmc= 17569\nIFl1bg== 17570\nIHJpZmxl 17571\nIGxvdmVy 17572\nJ1Q= 17573\nIGRlbnNl 17574\nIHTDo28= 17575\nIG5vdGlmaWVk 17576\nIGlkaQ== 17577\n7Jet 17578\n7YY= 17579\nIGludGVyYWN0aW5n 17580\nIHJhcHBvcnQ= 17581\n0LXRgNC4 17582\nc2tp 17583\nIGJlc3Nlcg== 17584\nIG1hbnVmYWN0dXJlcg== 17585\nIEt5bGU= 17586\nIGFjY291bnRhYmxl 17587\nIFNhaw== 17588\nIFBpbA== 17589\nIERvbWlu 17590\nIHByZXN1bQ== 17591\nINCS0YHQtQ== 17592\nIHZpbmVnYXI= 17593\nIGd1YXJhbnRlZWQ= 17594\nIGhhbmRsZWQ= 17595\nY2F0 17596\nIGNpdmlsaXphdGlvbg== 17597\nIGFjY29tcA== 17598\nIFZN 17599\nw6ltb24= 17600\nIGRlemU= 17601\nIGdyYWRlcw== 17602\nIHNvbGx0ZQ== 17603\nIHN0YXJpbmc= 17604\n15DXqg== 17605\nYXJudA== 17606\nIGhvcml6b24= 17607\nIHRyYXZhaWw= 17608\naG91cg== 17609\nIEVE 17610\nIERhaw== 17611\nIG55 17612\nIGNvbnZl 17613\nIENoYW0= 17614\nIGZpcm1z 17615\nIExpdQ== 17616\nINGB0YLRgNCw0L0= 17617\nIGxpYmVydA== 17618\nIGxlbnNlcw== 17619\nIGludGFrZQ== 17620\nINCy0YvQsQ== 17621\nIG1lbnNlbg== 17622\naGVs 17623\nIHByYWN0aXRpb24= 17624\nIDM1MA== 17625\nRk8= 17626\nIGJlZHM= 17627\nIGFuY2VzdG9ycw== 17628\nIOyXhOyyrQ== 17629\nIGRpc3R1cmI= 17630\nIExhc3RseQ== 17631\nIFN1cHBvcnQ= 17632\n4Li14LmJ 17633\nIENvcm9uYQ== 17634\nIGVudGh1c2k= 17635\nINCy0L7Qt9C8 17636\nIOyCrOuejOs= 17637\nIDUy 17638\nYmlyZA== 17639\nIHJlZHVjZXM= 17640\nIOyeiOydhA== 17641\nIEdlbmU= 17642\n6rWQ 17643\nxJlw 17644\nIMOcYmVy 17645\nIGNvbmNlcm5pbmc= 17646\ndXNlcg== 17647\nIGNvbmNlbnRyYXRl 17648\nIFdIQVQ= 17649\naXNob3A= 17650\nb255bW91cw== 17651\nbm9sZA== 17652\nIHN1Z2dlc3Rpbmc= 17653\nqbA= 17654\nIEZpc2g= 17655\nLi4uLi4uLi4= 17656\nIHZlc3NlbA== 17657\nIHRyYWJham8= 17658\nIE9jZWFu 17659\neWc= 17660\nIHRvd25z 17661\nZGVs 17662\nIHRlcnJpZnlpbmc= 17663\nIMOnYWzEscWf 17664\nIHNpbm8= 17665\nIGVhdHM= 17666\nIGdleg== 17667\nIGdlbWU= 17668\nIOyZhA== 17669\nIGNvbXBhcnQ= 17670\nIGltcGxlbWVudGluZw== 17671\nIFBvdHRlcg== 17672\nIEdlcm1hbnM= 17673\nIGfFgg== 17674\nIHRlbm5pcw== 17675\nIGNhcnBldA== 17676\nYXVlcg== 17677\nIFNhdWRp 17678\neWVvbmc= 17679\nIGN1cnJ5 17680\nIEZvcmVzdA== 17681\n0YvQuw== 17682\nIGZpZnRlZW4= 17683\nIGJvbHRz 17684\nIHtc 17685\nrLQ= 17686\nIHNldHRsZW1lbnQ= 17687\nIGxhbmdl 17688\nIGJhbQ== 17689\nR2V0 17690\n7ZWZ 17691\nIHN3YXA= 17692\nIEtoYW4= 17693\nIGNvbW1lbmNl 17694\nIHF1YXJhbnRpbmU= 17695\nIHNjb3JlZA== 17696\n55Y= 17697\nIDE5NTA= 17698\nIHRoaWNrZXI= 17699\nIHPDu3I= 17700\nIExhcnJ5 17701\nIGFsbGV6 17702\n7Iuc64qU 17703\nIGfDvA== 17704\nIHNwZWN0YWN1bGFy 17705\nLy8= 17706\nYm90aA== 17707\nIHN0YXRz 17708\nIE5hbmN5 17709\nIGJ1bnU= 17710\nIGNydXN0 17711\nIGFjdGl2YXRlZA== 17712\nIOq3uOue 17713\nb3V0aGU= 17714\nIHBvcnRz 17715\nIG5ldXJhbA== 17716\nIGphdw== 17717\nIG9ic2VydmF0aW9ucw== 17718\nIHZvaXQ= 17719\nYWJhbg== 17720\n4bqjaQ== 17721\npqzrpbw= 17722\nb21lcw== 17723\n4K+L 17724\ncXVp 17725\nIGtpbmRuZXNz 17726\n0JE= 17727\nIDQx 17728\nIG1vZGVyYXRl 17729\nIGFuZ2Vscw== 17730\nIFRhbWI= 17731\nw6h0 17732\nIGNobG9y 17733\nIEJpbGx5 17734\n7LKY6w== 17735\nYWNvbg== 17736\nIHNlbGVjdGluZw== 17737\nIERlbHRh 17738\nIG51bGw= 17739\nZGVubHk= 17740\nIGNpdWQ= 17741\nIHRlbmRlbmN5 17742\nIGJyZWFrZG93bg== 17743\nIG1pbnQ= 17744\n0YTQvtGA0Lw= 17745\nb3JwaA== 17746\nIGRhd24= 17747\nc3By 17748\nIFdJTEw= 17749\nw6RjaGxpY2g= 17750\nIHB1cHB5 17751\nNzAw 17752\nIOCupA== 17753\nIGZhaWxz 17754\nIENvbmM= 17755\nIHJlbGF0aXZlcw== 17756\nIGludml0aW5n 17757\nIGF1dG9ub20= 17758\nIGNvbXBvc2Vk 17759\nIHVuaXR5 17760\nIGRlY2lz 17761\nIGFjY2Vzc29yaWVz 17762\nIENhc3M= 17763\nIGJpc3Q= 17764\nIFRpcA== 17765\n7Ke4 17766\nIHB1bnQ= 17767\nIHLDoXA= 17768\nQU5L 17769\nZXhpc3Q= 17770\nIGNvbXBhdGlibGU= 17771\nIG5lcg== 17772\nINC10LzRgw== 17773\nIGFwbGlj 17774\nIGJhcHQ= 17775\nIGZhaWxpbmc= 17776\nIFRhbWFt 17777\nIG9zY2lsbA== 17778\nIGxldHp0ZW4= 17779\nIHJlcGVhdGVkbHk= 17780\nIGp1bmdsZQ== 17781\nIFB1c2g= 17782\naGFp 17783\nIM63 17784\nIGRlYWRseQ== 17785\n0Y/Qtg== 17786\nd2nEhQ== 17787\nIENvbW1vbg== 17788\nIM6V 17789\nIHNrYXRl 17790\nVEM= 17791\nIE1pbmk= 17792\nIGhvYmJ5 17793\n4bqnbg== 17794\nIHJvdXRlcw== 17795\nIGFtaWdvcw== 17796\nIGNvbmp1bg== 17797\nIHBhcnRuZXJzaGlwcw== 17798\nIG5vdm8= 17799\nIGF2ZXI= 17800\nIHBvdXZleg== 17801\nYnJpZGdl 17802\nIHByZW9j 17803\naGlt 17804\nIHR1cmI= 17805\nIHNvYg== 17806\nIFNuYXA= 17807\nIOywuA== 17808\nbWludXRl 17809\nIHRyYWplY3Q= 17810\ndWrEmQ== 17811\nIGVhZ2Vy 17812\nIHJlZ3VsYXRvcnk= 17813\nIGJhbmtpbmc= 17814\nYmxpbmc= 17815\n0YjRjA== 17816\nYcW8 17817\nIGJpemFycmU= 17818\naXRhdGVk 17819\nZGlyZQ== 17820\nIHRocmVhdGVuZWQ= 17821\nIHNoaW5pbmc= 17822\nIG5lc3Nl 17823\nIGNvcnBz 17824\nINGB0YM= 17825\nIHRlbGVz 17826\nIHRlbXA= 17827\ndGVt 17828\nINC60LDQvQ== 17829\nIGZldmVy 17830\nTmV3 17831\nIGhlYXZpZXI= 17832\nIFNhaA== 17833\nYnVk 17834\nIG91dHJvcw== 17835\nIOywvg== 17836\nIOuqhQ== 17837\nYXJyaW5n 17838\nIOq0nOywrg== 17839\nIE5hcA== 17840\nIHNlbWlu 17841\nIFRoYW4= 17842\naWZz 17843\nIGRlc2Vu 17844\nINGC0LDQutC+0LU= 17845\nIGxvc2Vz 17846\nIEJhbHQ= 17847\na29u 17848\nINC90LDQv9GA 17849\nIHZvaXM= 17850\nIE1vc2Nvdw== 17851\nIGNoYWlycw== 17852\naGlz 17853\nIHJlZnVnZWVz 17854\na2c= 17855\nIGtvbGU= 17856\njag= 17857\n0LDRgdC40LHQvg== 17858\npr0= 17859\nIFVuaXZlcnNl 17860\nIERpcmVjdA== 17861\nIGNoZWF0aW5n 17862\nIENpbg== 17863\nIHBhdHJp 17864\nIGFkdmlzZQ== 17865\nIE5ldGhlcg== 17866\nIHByaW1laXJv 17867\nIG1lbnRpb25pbmc= 17868\nbnV0 17869\nNTY= 17870\nYXLEsQ== 17871\nIHBldGl0ZQ== 17872\nYmxlZA== 17873\nIHBlbnNhcg== 17874\naWNpbw== 17875\nSU5E 17876\nIHZldGVyYW4= 17877\nIGxhZGRlcg== 17878\nIGNvbnNlcXVlbmNl 17879\n0L7QttCw0Ls= 17880\nIEJ1cm4= 17881\nIHJ1Zw== 17882\nIE1hZGU= 17883\nIGdpdA== 17884\nIi4uLg== 17885\nIGNvbXBldGl0b3Jz 17886\nIHByemVk 17887\nIGFwcGFyZW50 17888\nIEFyZ2VudGluYQ== 17889\nIFdvcmtpbmc= 17890\nIGNvbGxhYm9yYXRl 17891\nd29tYW4= 17892\nIHJldGFpbg== 17893\nIGxldXJz 17894\nIGRhc2hib2FyZA== 17895\n15nXkw== 17896\nIEVhcmx5 17897\nQk0= 17898\nINC10ZE= 17899\n0L7Qu9C+0LM= 17900\nIHNhdGlzZnlpbmc= 17901\nIG9mdGVudGltZXM= 17902\nIG1hcHBpbmc= 17903\nw7xua8O8 17904\nYXJ0aA== 17905\nZm9sZA== 17906\nIGxhdW5jaGluZw== 17907\nIGF1cmE= 17908\nIHByZWNpc2lvbg== 17909\nd29ya3M= 17910\nR29k 17911\nIHN0cmFw 17912\nIEltcGVy 17913\nIHJpdmVycw== 17914\nIHw= 17915\nIGN1ZXI= 17916\ncmVnb24= 17917\nIGFycml2YWw= 17918\n0LrQsNGF 17919\nIE1pYW1p 17920\n0LDQvdGL 17921\nIHN1cnZpdm9ycw== 17922\nIFNlbmlvcg== 17923\nRGF2aWQ= 17924\nIGVzdGFkbw== 17925\nIHNlY3RvcnM= 17926\nIHBvcHBpbmc= 17927\nIGNoaW0= 17928\nYXnEsQ== 17929\nIGt1bm5lbg== 17930\nIGdhbGxlcnk= 17931\nIHN1bmxpZ2h0 17932\nZXNlaGVu 17933\nIHllbGxpbmc= 17934\nIE1laW4= 17935\nIFBob2VuaXg= 17936\nIG1hbm8= 17937\nIGhpc3Rvcmlh 17938\nIG9jY3VycmluZw== 17939\n7Lg= 17940\n0LDQtNC4 17941\nIGluc3RpdHV0aW9uYWw= 17942\nIFR1dA== 17943\n57I= 17944\nIHNsYXZlcw== 17945\nIGZvcmdpdmVuZXNz 17946\nIHR3aW4= 17947\nIEh5dW4= 17948\n0L3RjA== 17949\nIEtvbW0= 17950\nYW5kcmE= 17951\nc2hvdA== 17952\nc3PDpA== 17953\nINGG0LU= 17954\nYXR0YQ== 17955\nIGV4cGVuc2U= 17956\nIEdQVQ== 17957\nIFBhc3Q= 17958\ncmlibHk= 17959\nIOutkOyVvA== 17960\nINCz0L7QtNCw 17961\nIHJlc3Bpcg== 17962\nIFF1ZWVucw== 17963\naG9wcw== 17964\nIHPDqXJpZQ== 17965\nIHByZWY= 17966\nIGNvbWVk 17967\nIHBsdXQ= 17968\nIE92ZXJhbGw= 17969\nIGN1c2g= 17970\nIHJpbmdpbmc= 17971\nIGluY29ycmVjdA== 17972\nINGB0YLRgA== 17973\nIGdlb21ldHJ5 17974\nIGFkdmVydGlz 17975\nINCo 17976\nIHJldmlld2Vk 17977\nIGRvemVucw== 17978\nIGRldGVybWluYXRpb24= 17979\nIFBoaWxs 17980\nIGNvbnRyaWJ1dGVk 17981\nIENpdA== 17982\nIHBhc3NlbmdlcnM= 17983\nIGPDtHTDqQ== 17984\nIHJldmVy 17985\nIHRlY2hub2xvZ2ljYWw= 17986\nIGFsbGVu 17987\nIHJhaW5pbmc= 17988\nYXZp 17989\nIHNhbHR5 17990\nIHR5cGluZw== 17991\nINGC0LU= 17992\nIHRpbHQ= 17993\nIOy5mA== 17994\nINC+0YA= 17995\nINC/0YDRj9C8 17996\nIHJvdQ== 17997\nIGFyZW5h 17998\nYXJhdA== 17999\nSEhISA== 18000\nIG1hbnVmYWN0dXJlcnM= 18001\nIEVkd2FyZA== 18002\nIHR1Y2s= 18003\nIGJsb3dz 18004\naW5nbw== 18005\nIE1hcmM= 18006\n7JWE7ISc 18007\nTWljaA== 18008\nIENsZWFu 18009\n6LQ= 18010\nZXN0bw== 18011\nIFBhY2s= 18012\nIHNoYWZ0 18013\nQlJVTk8= 18014\nIGF2ZW4= 18015\ndXVy 18016\n0YHQutC+0LvRjNC60L4= 18017\n6rSA 18018\nIGF1dG9tYXRlZA== 18019\nIHZlbnR1cmU= 18020\nIHN1cnZlaWxsYW5jZQ== 18021\nIEdyb3c= 18022\nIEVtZXI= 18023\nINC00L7RgA== 18024\nIGludmVzdG9y 18025\nIFlvaw== 18026\nIGxhdHRlcg== 18027\nIE5J 18028\nIGZ1bmN0aW9uaW5n 18029\nIEhhbWlsdG9u 18030\nIDUx 18031\nIG11cmRlcmVk 18032\nIGFuY2hvcg== 18033\nIGN1Yw== 18034\nIFNDUA== 18035\nIE1hZGFt 18036\nIGNvbnN0cmFpbnRz 18037\nIGJhcm4= 18038\nYW5rZW4= 18039\nIOunjuydgA== 18040\nIE1vdG9y 18041\nIERvaW5n 18042\nIGFtZW4= 18043\nZXR0cw== 18044\nIGluc3RydWN0b3I= 18045\nZWd0 18046\nYWtv 18047\nIHBvc3R1cmU= 18048\naXZpYQ== 18049\nIFBvbGlzaA== 18050\nINC00LLQsA== 18051\nIGNvbG9yZnVs 18052\nIGVsYm93 18053\nIHBhcmxl 18054\nIHBhc3Nlcg== 18055\nIGNvbmRlbQ== 18056\nb3J0YWw= 18057\nIGZlcnRpbA== 18058\n2KfYrw== 18059\nIENvbG9tYg== 18060\nIGFsaWdubWVudA== 18061\nIGFzdHJvbmF1dA== 18062\nIE11dA== 18063\nIHNhbG1vbg== 18064\nIHN0cnVjdHVyZWQ= 18065\nnteo 18066\nIGNsaWNrcw== 18067\nIG1pZWo= 18068\nIFJvdW5k 18069\nIHJhaW5ib3c= 18070\nIFZB 18071\n7KeI 18072\nb3R6 18073\nLDwv 18074\nIE5pY29sZQ== 18075\nbGlzaGluZw== 18076\nIHdoaWxzdA== 18077\nIHJlcHVibGlj 18078\nIHRhbWFt 18079\ndmVydGVk 18080\nIHJlY29nbml6aW5n 18081\nINCz0LvQsNCy 18082\nIGR1Yg== 18083\nIEpvcw== 18084\nZmFsbHM= 18085\naWNoaQ== 18086\nIGN6xJk= 18087\nINCm 18088\nIE1pdGNo 18089\nQ1I= 18090\nY2xpY2s= 18091\nIHN0dW5uaW5n 18092\nIEp1bGlh 18093\nbWVycw== 18094\nIFBvbHk= 18095\nIGRlc3Nh 18096\nIGludMOp 18097\nIOqzoOs= 18098\nIGRvxJ8= 18099\nIGRpdmVy 18100\nIHN0cmlraW5n 18101\nYXBob3I= 18102\nIGFwZW5hcw== 18103\nb3VzZXM= 18104\nIHRyYWdlZHk= 18105\nIEZhbg== 18106\nIFR1cmtpc2g= 18107\nIHByb3BoZXQ= 18108\nIGRpc3RhbmNpbmc= 18109\nIEhlbQ== 18110\nIGNhcnRvb24= 18111\nS2U= 18112\nYW50aW5n 18113\nIENsYXJr 18114\n578= 18115\nIGRhdm9u 18116\nIO2F 18117\nIHl1bW15 18118\nIGNvbXByb21pc2U= 18119\nIHN0YXJ0dXA= 18120\ncml0dA== 18121\nIGNlcnRpZmllZA== 18122\nIHBpbGxvdw== 18123\nYmVyZQ== 18124\n7KSA 18125\nIHNlZ3Vpcg== 18126\nIHN0YWRpdW0= 18127\nYXRpdm8= 18128\nIHNpbXBsZXI= 18129\ns7g= 18130\nIHZpc2E= 18131\nIHBhdGh3YXk= 18132\nIG51ZXZv 18133\nIHJheQ== 18134\n6Zw= 18135\nw7bDnw== 18136\nINC30LDQvQ== 18137\nIGNlbGVicml0eQ== 18138\n0LfQsA== 18139\nIGVpbmVz 18140\nIEdpdmVu 18141\nIEFyYQ== 18142\nIEpvYg== 18143\nIHlhaw== 18144\nIEFyYmVpdA== 18145\ncmVzc2luZw== 18146\nw6FuZA== 18147\nIGdyYWJiZWQ= 18148\ncGVuZA== 18149\nIHNpbmU= 18150\naXJr 18151\nINCe0YI= 18152\nIEZsZQ== 18153\naWNoZW4= 18154\n56Y= 18155\nIE5laWw= 18156\nIHJlcGVhdGluZw== 18157\nIGRyYXdpbmdz 18158\ncmlzZQ== 18159\nIGdsaXR0ZXI= 18160\nZml2ZQ== 18161\nIHN1cnQ= 18162\nIHNpY2hlcg== 18163\nIGFkanVzdG1lbnRz 18164\naXBwaQ== 18165\nY2tl 18166\nIHJlcHJlc2VudGF0aXZlcw== 18167\nIG1pZHN0 18168\nIHNwb2ls 18169\nbWV5ZQ== 18170\nIHRhZ3M= 18171\nIHllcA== 18172\nIFN0ZXBoYW5pZQ== 18173\nIGdlcmU= 18174\nIFJ1ZA== 18175\n54s= 18176\nIGdyb3M= 18177\nIHF1ZXVl 18178\nIGFjY29yZA== 18179\nIG9yZ2FuaXNhdGlvbg== 18180\nZW5keQ== 18181\nIFRleHQ= 18182\nw7x5b3I= 18183\nIMOt 18184\nIGNvbmNsdXM= 18185\nIOykgOs= 18186\nIGFtcA== 18187\nIExlc3M= 18188\nIOuQmOuKlA== 18189\nY2Fubw== 18190\nIFBpeA== 18191\nYXBlZA== 18192\nIGRhcmF1Zg== 18193\ndW8= 18194\neW50aA== 18195\nYWJlbA== 18196\nIERvbmU= 18197\nIGRpY2s= 18198\nYXRob24= 18199\nIGhpbGFy 18200\nYWNjbw== 18201\nIOyGjQ== 18202\nIE9yZWdvbg== 18203\nIFdlaWw= 18204\nIG1hdGhlbWF0aWNz 18205\nIGFsbQ== 18206\nIHBpeGVscw== 18207\nIGZyw6Vu 18208\n0LHQvg== 18209\nRkM= 18210\n0L3Rjg== 18211\naGVpbQ== 18212\nZ29z 18213\nIEZvcmdldA== 18214\nZmVuZA== 18215\nIFZvaWzDoA== 18216\nIEdyZWV0 18217\nIM6xz4XPhA== 18218\nIHJlY3Vy 18219\nNTE= 18220\nIOyeiOqzoA== 18221\nQXQ= 18222\nIHlhcmRz 18223\n0LjRgtC4 18224\nIG9mZnNldA== 18225\ncm9sbGluZw== 18226\nINCf0L7RgQ== 18227\nIGVubGlnaHQ= 18228\nIFBhZA== 18229\nbGltaXRlZA== 18230\n0LjQu9GM0L3Qvg== 18231\nIFNhcmE= 18232\nINGB0LTQtdC70LDRgtGM 18233\nbWFydA== 18234\nIEp1bXA= 18235\nIGFkb3JhYmxl 18236\nb3JzZQ== 18237\nY2hlZXJpbmc= 18238\nIGVtcGF0aHk= 18239\nIFRvbmlnaHQ= 18240\nb3Jw 18241\nIEh1bnRlcg== 18242\nUG9pbnQ= 18243\n0LPQsA== 18244\nIHBhc3Nlbmdlcg== 18245\nIEtuaWdodA== 18246\nIHNlZW1pbmdseQ== 18247\naHVo 18248\nIHRoZWF0cmU= 18249\nIHRvbWI= 18250\nIGRlcHJlc3NlZA== 18251\nIHN1bW1vbg== 18252\nIHNhdGlzZmFjdGlvbg== 18253\nZG9vcnM= 18254\nIEhvdXN0b24= 18255\n0LDRjtGJ 18256\nIFJpbw== 18257\n0LPQu9GP 18258\nIGFycmFuZ2Vk 18259\nIGhhbmRsZXM= 18260\nIHRyaWxsaW9u 18261\nIG5pZ2h0bWFyZQ== 18262\nIFF1YW5kbw== 18263\nIG9sZQ== 18264\nIEd1aWRl 18265\nb29v 18266\nIGJpbGU= 18267\nIGVtcGV6 18268\nIDcy 18269\nY3JpYmVk 18270\nIHByb2dyZXNzaW9u 18271\nIExpbnV4 18272\n66as 18273\nIOyymOydjA== 18274\nIGZvc3NpbA== 18275\nIHF1ZXJv 18276\n7Iah 18277\nYXRpdmE= 18278\nIHB1eno= 18279\nIFp1cw== 18280\nIHRocmlsbGVk 18281\nIENC 18282\nIG1pbmVy 18283\n0YDQsNGJ 18284\nIFNBUg== 18285\nIE5vcw== 18286\nINCz0L7RgNC+0LQ= 18287\nIGNhbWI= 18288\nINGC0LA= 18289\nIHJlc3VsdGVk 18290\nIERpY2s= 18291\nb3VuZw== 18292\nIGNvbWljcw== 18293\nIGFic29sdXQ= 18294\nc3Rhbg== 18295\nZGltZW5zaW9uYWw= 18296\nIHRlbnNl 18297\nbXVz 18298\nIEludGVsbA== 18299\nINGN0YLRgw== 18300\nIHBoYXNlcw== 18301\nIHZvbHRh 18302\nIHbDo28= 18303\nYm91bmQ= 18304\nIEFuZGVyc29u 18305\nIGN1cmlvc2l0eQ== 18306\nIHBvbnQ= 18307\nIGRlbW9uc3RyYXRlZA== 18308\nb2xpbmU= 18309\nIFNwZWVk 18310\nIG1hbWE= 18311\nIHNob2NraW5n 18312\nIGtpZWR5 18313\nIGVhcnRocXVha2U= 18314\nIGltcGxpZXM= 18315\nIGVudGVycw== 18316\nnoA= 18317\nIGVsZXZhdG9y 18318\nIGRlbGlnaHRlZA== 18319\nIE1pdHQ= 18320\nIEJhc2Vk 18321\nIERvbA== 18322\nIGtlbg== 18323\nIHdvcnJ5aW5n 18324\nIGZpbGVk 18325\nYWlsYW5k 18326\nINC80LXRgg== 18327\nIG1hc2M= 18328\nIM6R 18329\nIEp1bGll 18330\nIGRpbWVuc2lvbmFs 18331\naHVtYW4= 18332\nVG9r 18333\nw78= 18334\nIHVuc3Q= 18335\nIHNldWxl 18336\nIGVtYmFy 18337\nIO2VqeuLiOuLpA== 18338\nYWNpb24= 18339\nIOyJ 18340\nIOu2gOu2hA== 18341\nIGhlYXRlZA== 18342\n4oCm4oCm 18343\nIiE= 18344\nIHJlYWxpc2U= 18345\n0LXRgtGL 18346\naWVuaWE= 18347\naWV6 18348\nIGbDvGg= 18349\nIEVzc2U= 18350\nIHBz 18351\nIGTDsw== 18352\nYXN0ZXJz 18353\nIG9ucw== 18354\nUE0= 18355\nIHJldHJv 18356\nbWFrZXI= 18357\nd2hlbg== 18358\nIGVsbGE= 18359\nIExpdmluZw== 18360\nIExhbQ== 18361\nIHRyb25n 18362\nIGFwcHJvdmU= 18363\nIM64zrE= 18364\nIHN1bmc= 18365\n0LXQvdC40Y4= 18366\nIFJlbW92ZQ== 18367\nw6huZQ== 18368\naXJlbg== 18369\nIHN0cmFuZ2Vy 18370\n0LjQvdGL 18371\nIHbDpg== 18372\nYWZ0ZXI= 18373\nb3R0bw== 18374\nlOuhnA== 18375\nIEFob3Jh 18376\nbWlsbA== 18377\nSVNI 18378\nIGdyYWR1YXRpbmc= 18379\na3Rl 18380\nIHJlbm92 18381\nIHByb2Nlc3NlZA== 18382\na2V5cw== 18383\n0LXQutC+ 18384\nIGVucmljaA== 18385\nIMWfZWs= 18386\nIGluc2Vj 18387\nIE5hbg== 18388\nY2FrZXM= 18389\nIGlsbHVzaW9u 18390\nmOulvA== 18391\nIGFpcmw= 18392\naW1z 18393\nIGFudGVu 18394\n4buvbmc= 18395\nc24= 18396\nIHByZWNpc2E= 18397\n6riw7J6Q 18398\nINin2YTYuQ== 18399\nIGZvcmVtb3N0 18400\nIHBhcmFncmFwaA== 18401\nYXZhaXM= 18402\nINCy0L7RgQ== 18403\nIG1hbnM= 18404\nw61maWM= 18405\nYm90 18406\nINi52YY= 18407\nIGJyb3Ro 18408\nIGFsdGVybmF0ZQ== 18409\nIENoYXB0ZXI= 18410\nIHZlY3RvcnM= 18411\nZXNhcg== 18412\nIGluZGljYXRpb24= 18413\nIE5laW4= 18414\ntoE= 18415\nIGplYW5z 18416\nWUU= 18417\nY29uZA== 18418\nIHVuaXRlZA== 18419\nYWJp 18420\nIFNlcmdl 18421\nIHBhcnRpYWxseQ== 18422\nIG1hY3Jv 18423\nIGV0aGljYWw= 18424\ncnVpdA== 18425\nIHNoaWZ0ZWQ= 18426\nIGNhYmU= 18427\nIG1hdGhlbWF0aWNhbA== 18428\nIHJ1ZGU= 18429\n15nXldeq 18430\nIE1lcmM= 18431\nIGdhbnpl 18432\naWNpb24= 18433\nIHVuY29uc2Npb3Vz 18434\nIGJ1cm50 18435\nINGA0LXQsQ== 18436\n7Yq46w== 18437\nIGNoYXJt 18438\nYW5kYWw= 18439\n7LKc 18440\nb3RoeQ== 18441\nIEhhZGk= 18442\nIGFwcHJlY2lhdGlvbg== 18443\nRU5E 18444\nIHLDqWFs 18445\ntoTrk6Q= 18446\nIE5hZw== 18447\noKTqs6A= 18448\nIExhdXJlbg== 18449\nIHbhu5tp 18450\nIEJyaWRnZQ== 18451\nIFVtbQ== 18452\nIFdlZw== 18453\nIGNoYXF1ZQ== 18454\nIFNvcGg= 18455\nIGdkemll 18456\n7ZGc 18457\nIHN0ZXI= 18458\nIEJsYQ== 18459\nIHJlZmxlY3Rz 18460\nIGJlbmNobWFyaw== 18461\n0LLQsNGC 18462\nYW1pbmU= 18463\nIGFuaA== 18464\nIGNvbnRpbmVudA== 18465\nIEZEQQ== 18466\n7KGw 18467\nIMOqdGVz 18468\n15nXkA== 18469\nIGJsb29keQ== 18470\nIE5pbmU= 18471\naWVsdA== 18472\nZW1hbmQ= 18473\nIOuztOqzoA== 18474\nIHRpZGFr 18475\nIFNjaWVudA== 18476\ncGxleA== 18477\nb3N0ZW4= 18478\nIGFuaW1hdGVk 18479\nYXNzYQ== 18480\nIGRlcml2ZWQ= 18481\nINC40YHRgtC+0YA= 18482\nIE1pZw== 18483\n7IWY 18484\nIHJvcw== 18485\ncGx1cw== 18486\nb3NhdXI= 18487\nIF4= 18488\nIGludGVuc2l2ZQ== 18489\nIGdsb2JhbGx5 18490\nIGRpZmVyZW4= 18491\n7J206rOg 18492\nxIVk 18493\nIGTDqXM= 18494\nIHByZXNlbnRhdGlvbnM= 18495\nIENybw== 18496\nIGVzc2Vz 18497\nIEJldHdlZW4= 18498\nUGE= 18499\nIG5hdw== 18500\n4Lit4LiH 18501\nIGJyZWVk 18502\naWNodGU= 18503\nINCe0L3QuA== 18504\nIEJ1aWxkaW5n 18505\nIGNvbmZvcm0= 18506\nTU8= 18507\nINCW 18508\nIEtpZA== 18509\nbmFz 18510\nIER1ZQ== 18511\ncsOpcw== 18512\nIGRpb3g= 18513\nIEJpbg== 18514\nIHRheGk= 18515\nIHNhcA== 18516\nIEh1Yg== 18517\nIGNlbnRlcmVk 18518\nIHN1cmdl 18519\nIGF2b25z 18520\nIGxlYXJudA== 18521\nIFlhbQ== 18522\nIERpZXNl 18523\n0L3QuNC60Lg= 18524\nIEJlaWo= 18525\nV2lsbA== 18526\nIGF0dGVtcHRlZA== 18527\nIGdyaWVm 18528\nw7Nq 18529\nIGtpZG5leQ== 18530\nIG9wcG9uZW50cw== 18531\nIG5vbWU= 18532\nNTc= 18533\n0Y/RgtC90L4= 18534\nIG1pZG5pZ2h0 18535\nQW5ub3VuY2Vy 18536\nYWNpdHk= 18537\nb25lZA== 18538\nIHB1ZWRlcw== 18539\nIHByb2JsZW1hdGlj 18540\nIGNvcHM= 18541\nIFBldGU= 18542\ncmludA== 18543\ndW50ZWQ= 18544\nIGJpcA== 18545\n5qI= 18546\nIMOA 18547\nIGNlbnM= 18548\nYXRpdmVseQ== 18549\nIHVyZ2VudA== 18550\nIHN0cnVnZ2xlZA== 18551\nYWNodXM= 18552\nIG1pY3Jvd2F2ZQ== 18553\nIFNpZGU= 18554\nIERlbm4= 18555\nINGP0LI= 18556\nIHVyZ2U= 18557\nIGZvcmNpbmc= 18558\nd2FuZw== 18559\nINC60L7RgtC+0YDQsNGP 18560\nIG1hbW0= 18561\nIPCfjg== 18562\nIHRyaWJlcw== 18563\nIFNoYWRvdw== 18564\nIFNhbmc= 18565\nIEhpdGxlcg== 18566\nIGx1bg== 18567\nIHNjZW50 18568\n7KeR 18569\nIG92ZXJ3aGVsbWVk 18570\nIGJvbWJz 18571\nIGNyaW1pbg== 18572\nIGNvbnNvbGlk 18573\nIG1vbGVjdWxhcg== 18574\n15XXpw== 18575\nbm9y 18576\nIHBlcmNlaXZlZA== 18577\nIHbDqQ== 18578\nIGFsdG9nZXRoZXI= 18579\nIG9ydGg= 18580\nIHZlbQ== 18581\nIHp3YXI= 18582\naXpv 18583\nxas= 18584\nIG1lbHRlZA== 18585\nb3JkZW4= 18586\nIENoYXJsb3R0ZQ== 18587\nIEV4Y2Vs 18588\nYXJ0YQ== 18589\n7Jyg 18590\nIEdldw== 18591\nIHJvbWFuY2U= 18592\nZXJlbW9z 18593\nIGNvbG9uaWFs 18594\nIHRyYWRpdGlvbmFsbHk= 18595\nIHF1YW4= 18596\naG9v 18597\nIGNoYW1waW9uc2hpcA== 18598\nIGFyYml0cg== 18599\n7IWU 18600\nINC80LjQvQ== 18601\nIHNlbGZpc2g= 18602\nIGJsZXc= 18603\ncnlpbmc= 18604\nIG9wZXJhdG9ycw== 18605\nIGp1cmlzZA== 18606\nj4U= 18607\ndWl0aW9u 18608\nIEVD 18609\nIEFueWJvZHk= 18610\ndmF0ZQ== 18611\naWV0aWVz 18612\nIGFuYWx5c3Q= 18613\ntOyXkA== 18614\nINCy0YHQtdCz0LTQsA== 18615\nw6dlaw== 18616\nIEt1bg== 18617\nIGFnaW5n 18618\n1aE= 18619\n0YDQsNGE 18620\nIE1vbWVudA== 18621\nIEh1YQ== 18622\n6IM= 18623\ndGhlbg== 18624\n0LXQu9Cw 18625\nZXN0b25l 18626\nIGVuZGU= 18627\nIGF3YXJkZWQ= 18628\nIG7DpGNoc3Rlbg== 18629\nIFNwb3Q= 18630\nIE5lZw== 18631\nIGZhaXJ5 18632\nIENvdmVy 18633\nIGRlcG9zaXQ= 18634\nIHN0cmVzc2Z1bA== 18635\nIGp1bms= 18636\nIG1ldGFib2w= 18637\nSmE= 18638\nIOq3gA== 18639\nIHVuZGVyZ3JhZHVhdGU= 18640\nIGNhbmNlbGw= 18641\nIGNvbnNlbnN1cw== 18642\nIG9zbw== 18643\n4bq3 18644\nxJ9lcg== 18645\ncmFkYQ== 18646\nIFBhbGFjZQ== 18647\nIHBlZGFs 18648\nIGV4YWdnZXI= 18649\nIGJlaGF2aW9yYWw= 18650\ncGxheWVy 18651\nbGxlcw== 18652\nIGNvbm5lY3Rvcg== 18653\nIHNrZXB0 18654\njZTrnbzqs6A= 18655\nIG1pdHQ= 18656\nIEhhaGE= 18657\nIHBlcXVl 18658\nIEdvdHQ= 18659\nZmFuZw== 18660\n4LA= 18661\nam9z 18662\nIGtpY2tpbmc= 18663\nIG1vdW50ZWQ= 18664\nIHJlcGxhY2luZw== 18665\ndm9z 18666\nIHF1aWV0bHk= 18667\nIG1pbGl0 18668\nIG93bnM= 18669\nIG5pdmVhdQ== 18670\nIGF1cg== 18671\nIEJ1eQ== 18672\nIHByZWRpY3RlZA== 18673\nIGNvd3M= 18674\nIHBvbmVy 18675\nIERyaQ== 18676\nIHJlbWFya3M= 18677\nIHJlcG9ydGVy 18678\nIGFya2FkYcWf 18679\n0LXRgdGC0Lg= 18680\nIHNhdmVz 18681\nIMOnb2M= 18682\nIG1ldGFwaG9y 18683\nIEtlbA== 18684\nc3RhdGlvbg== 18685\nc2VtYmx5 18686\nIGFkdmlzb3I= 18687\nIHdvcmtzaG9wcw== 18688\nIGFjY291bnRpbmc= 18689\nIHRvaw== 18690\nbmllcg== 18691\naW5uZXI= 18692\nIGJ1cmFkYQ== 18693\nIEJC 18694\nIE9seW1waWM= 18695\nIFByYWN0 18696\nQ2hyaXN0 18697\nINGB0Y4= 18698\nIGthcw== 18699\nIHZpZXdlZA== 18700\nIG1hcmtlcnM= 18701\nIGZvdG8= 18702\nZ2V0aWM= 18703\nIEx1Y2Fz 18704\nIHBhZHM= 18705\nIEpvaA== 18706\nIENEVQ== 18707\nYWZmZW4= 18708\nYXJlbQ== 18709\nIEJlY2s= 18710\nIEdvc2g= 18711\nc2hpdA== 18712\nIE1hdGVy 18713\nYWJ1bGFyeQ== 18714\nIFJvb20= 18715\nbGxlbg== 18716\nIEZvbGxvd2luZw== 18717\nIGRvaXQ= 18718\nYmFsbHM= 18719\naXhh 18720\nIGdyb3VuZHM= 18721\nIOyeiOuKlOuNsA== 18722\nTFM= 18723\nIHdpbGRsaWZl 18724\nIFNRTA== 18725\nIHNoaWZ0cw== 18726\nQm9vaw== 18727\nIGhvc3RlZA== 18728\nbGxvcg== 18729\nIHNuYXBz 18730\nIGJlc29pbg== 18731\nINep15Q= 18732\nIHBlYW51dA== 18733\nw6RmdA== 18734\nuaA= 18735\nxZts 18736\nQXVkaWVuY2U= 18737\nIEJhcmJhcmE= 18738\nIGFkb3B0aW9u 18739\nIHdvbGY= 18740\nINC+0YHQvdC+0LI= 18741\nYXJkYQ== 18742\nIGV4cG9zZQ== 18743\nIOym 18744\namFz 18745\nxJM= 18746\nIGNvdW50bGVzcw== 18747\nIOyngQ== 18748\naGVhbHRo 18749\ndWVudA== 18750\naXNv 18751\nb3Rpb24= 18752\nIGh1bmdlcg== 18753\nIG1vaXM= 18754\nb2Zmcw== 18755\nIGNsYWltaW5n 18756\nIM6a 18757\nIEJlbGc= 18758\nINC90LDQuQ== 18759\n6riw64+E 18760\nIHVucHJl 18761\nIGdlZA== 18762\nIElv 18763\nINC/0L7RgdC80L7RgtGA 18764\nIGNvxZs= 18765\nIE5hcnJhdG9y 18766\nIMOHb2s= 18767\n7Zmp 18768\n4Lit4Lii 18769\nY2lwbA== 18770\nIHRpbWVy 18771\nIGRlZmlj 18772\nYXZpbg== 18773\nIGNhdGVnb3I= 18774\nIHRocm93cw== 18775\nIOuCnA== 18776\nINC/0L7RgdC70LXQtA== 18777\nIFRoYWk= 18778\nIG1hc2N1bA== 18779\nIGJla29tbWVu 18780\nIGludGVybmF0aW9u 18781\ndWxzZQ== 18782\nIGF5ZQ== 18783\nIHBvaQ== 18784\nIHBpeGVs 18785\nQ2hyaXM= 18786\nIHN0b3Zl 18787\nzr/OuQ== 18788\nIGdlbmVyYXRvcg== 18789\nIOy7rOs= 18790\nIGFjYWRlbQ== 18791\nIHByYWN0aWNlZA== 18792\nIGFxdWVzdA== 18793\nIGNvbnRyaWJ1dGluZw== 18794\nIEln 18795\nIOG7nw== 18796\nIGNvbnRhaW5pbmc= 18797\nIHdyZXN0bGluZw== 18798\nINGH0LXQs9C+ 18799\naGF1cHQ= 18800\nIGVzc2Fz 18801\ndmVsb3Bl 18802\nIGV4Y2VwdGlvbmFs 18803\nWVU= 18804\nIEFwcGxhdXNl 18805\ncmljYW5l 18806\nIGNvbnZlbmllbmNl 18807\nINC00LXQu9Cw0YLRjA== 18808\n0LjQu9C40YHRjA== 18809\nIEVudmlyb24= 18810\nODU= 18811\nIGPDog== 18812\nIOyViOuFle2VmOyEuOyalA== 18813\nIE1P 18814\nIFBvcGU= 18815\nIHNhaA== 18816\nb2Jp 18817\nIG1hc3RlcnM= 18818\nYWluZXM= 18819\nIGJsZXNzaW5ncw== 18820\nIG9iZXk= 18821\nIGZsdXg= 18822\nIGJyb3c= 18823\nIOyLpA== 18824\nIHBvcHVsYXJpdHk= 18825\nIExhbWI= 18826\nemV1Zw== 18827\n7JmU 18828\nj4TroZ0= 18829\naXR1YXRpb24= 18830\nIGFjY29tcGFu 18831\nIGRpYWxvZw== 18832\nIEphbWll 18833\nIHNld2luZw== 18834\nIGJsZWVkaW5n 18835\nIGJhaWw= 18836\nIHRocmVhZHM= 18837\nb2RnZQ== 18838\nIFNoYW5n 18839\nIGRlcGxveW1lbnQ= 18840\nY2hlZA== 18841\nIHNhdGlzZnk= 18842\nIGxheg== 18843\nIG1pc3NpbGU= 18844\nIExpbmtlZA== 18845\nIG1ha2Vycw== 18846\nY2l1bQ== 18847\nZnJl 18848\nIOuovA== 18849\nIOustOs= 18850\nIEVkZ2U= 18851\nIHNvY2lldGllcw== 18852\nIGFndWE= 18853\nIHN5bmNocm9u 18854\noaA= 18855\ndW5mdA== 18856\nIHVubQ== 18857\nIHRyaWFuZw== 18858\nIGluanVzdA== 18859\ndG9w 18860\nIG9yYWw= 18861\na29y 18862\nIO2VqA== 18863\nbGRpZ3Q= 18864\nY2XEnw== 18865\ncXVldA== 18866\nIExlbw== 18867\nIHNhdm9pcg== 18868\nIGVhc3Rlcm4= 18869\naWV1 18870\nIGV4cGVk 18871\nINCh0L8= 18872\nIHVubmVjZXNzYXJ5 18873\nIFBlcmZvcm0= 18874\nIE1pbmc= 18875\nINGA0LDQsg== 18876\nIGludGVudGlvbnM= 18877\nIGNvbXByZXNzaW9u 18878\nIFNhYw== 18879\nzr/Ouw== 18880\nYXJzb24= 18881\nIHRyb3V2ZQ== 18882\nIE11aGFtbWFk 18883\nINCy0YvRgQ== 18884\nIGZpbml0ZQ== 18885\nINC90LDRhdC+0LQ= 18886\ndWdh 18887\n0YDQsNC30YM= 18888\nIGNlbGVicmF0ZWQ= 18889\nIGNvbmZlc3M= 18890\nIHNxdWFyZXM= 18891\nIEdvcmRvbg== 18892\nIOuCmOyY 18893\nIHN5bmRyb21l 18894\nIGNvbXBsZXRpb24= 18895\nIGJhY2tpbmc= 18896\nIGRhcmY= 18897\nIFF1cmFu 18898\nIGludGVybWVkaWF0ZQ== 18899\nIGtlcg== 18900\nIGTDvA== 18901\naGVzaXZl 18902\nIGFjY291bnRhYmlsaXR5 18903\nIFJlYmVjY2E= 18904\nIFNsZWVw 18905\nIGRpZmbDqXJlbnQ= 18906\nb2xz 18907\nIFJpY2U= 18908\nIOuzuA== 18909\nIGFudGliaW90 18910\nz4TOrA== 18911\ncno= 18912\nYW1ibGluZw== 18913\nIHNlbnNpdGl2aXR5 18914\nIGNocm9u 18915\nYWxsYXM= 18916\nNjQ= 18917\nIGZsZWV0 18918\nIG9wdGltaXN0aWM= 18919\n0YHQutC+0LPQvg== 18920\nIGphZGk= 18921\nYWlsbGV1cnM= 18922\nIEVub3VnaA== 18923\nIHNlbmlu 18924\nIHBhY2tz 18925\nYm4= 18926\nIEFyZWE= 18927\nIFRybw== 18928\nqOumrA== 18929\n0LDRlA== 18930\nIFRob20= 18931\nIGhhcm1vbnk= 18932\n0L3QuNC60LA= 18933\nIHNvbWVkYXk= 18934\nSVNF 18935\nIEJyb2Fkd2F5 18936\nbGFyZXM= 18937\nZXJuZXNz 18938\n4LmE4Lih 18939\nIFRlbm4= 18940\nIE5BVE8= 18941\nIG1pbnV0b3M= 18942\nIEthbnNhcw== 18943\nIE1vbmc= 18944\nIGNvbXB0ZQ== 18945\niqQ= 18946\nIOyXrQ== 18947\nIHN1cGVyaGVybw== 18948\nIEdhcmRlbg== 18949\nIE1vcw== 18950\nIGF0dGFjaG1lbnQ= 18951\nIGJ1c3Q= 18952\n4K+K 18953\nIFRoYWlsYW5k 18954\nc3RhdA== 18955\nIHNwaWNl 18956\nIExlYg== 18957\nIGxlYXA= 18958\nemVjaA== 18959\nR0w= 18960\nIHZlcmw= 18961\nIGZpeGluZw== 18962\nIOuztOuptA== 18963\nIHBvcm4= 18964\nIGLDvHk= 18965\nINmF2Kc= 18966\nIFZpcnQ= 18967\nIFRvbW15 18968\nIGNhcmdv 18969\nIE9saGE= 18970\nIHJva3U= 18971\n2YPZhg== 18972\nIGJha2Vk 18973\nIHRhY3RpY3M= 18974\nIG1hcmtldHBsYWNl 18975\nIGt0w7NyYQ== 18976\nYXJsbw== 18977\nIHN3aXRjaGVz 18978\nIGNhY2hl 18979\nIEhS 18980\nIEdhbg== 18981\nIEdQUw== 18982\nIGR1YXM= 18983\naGVyZXM= 18984\n0LXRgNGI 18985\ndHJhY2s= 18986\nIGx1bmdz 18987\nU3RhdGlvbg== 18988\naWdnbGVz 18989\nIGNhbXBpbmc= 18990\nIGNvbXBsZXRpbmc= 18991\nYW1hcw== 18992\nIGN5Y2w= 18993\nIHByb3RvdHlwZQ== 18994\nIEp1ZGdl 18995\nb3R5cGVz 18996\nIGluZmVjdGlvbnM= 18997\noKTr 18998\n0LXRgNCz 18999\nb2Jh 19000\nIEJvZA== 19001\nIFNlY29uZGx5 19002\nIGFwb3N0 19003\nIHNvZ2Fy 19004\nIHJlYXNz 19005\naWVr 19006\nIGFzaGFtZWQ= 19007\nIGN1cnZlcw== 19008\nINCy0LDQtg== 19009\nIGVuc2VtYmxl 19010\nYXR1cg== 19011\nIHBob3RvZ3JhcGhlcg== 19012\nIGVpZ2h0aA== 19013\nIHdhc3RlZA== 19014\nIGRhbXA= 19015\nINC80LDQuw== 19016\nYXJlbmE= 19017\nIGludGVybmFsbHk= 19018\nIGhlZWxz 19019\nIFNhbHQ= 19020\nIGJsaXI= 19021\niOuCmA== 19022\nIGNvbnRyYXJ5 19023\nIHByaW1h 19024\nIG9zcw== 19025\nIHJhYmJpdA== 19026\nIGF1dG9y 19027\nIGJyb2FkbHk= 19028\nw61zdA== 19029\nIGJhY2tz 19030\n7ZSE 19031\nZXRv 19032\nIGp1cnk= 19033\n6LE= 19034\nIHByb3N0dQ== 19035\nIGJhcmE= 19036\nIHBhcmxpYW1lbnQ= 19037\nb3JpZW50 19038\n0LjQu9Cw0YHRjA== 19039\nIGluZGlyZWN0 19040\nw6Ft 19041\nIMOlcg== 19042\nIHRyYWl0cw== 19043\nIGTDrWFz 19044\n2YTZhQ== 19045\nIENU 19046\nYWx5c3Q= 19047\nIGxpdmVzdA== 19048\nIGtvcw== 19049\nTWF5 19050\nIEppbmc= 19051\nIGpvdXJuYWxpc3Rz 19052\n0YfQuNC6 19053\nYXJtcw== 19054\nIOqwkOyCrA== 19055\nINC40LzQtQ== 19056\nIMOpZ2Fs 19057\nIE5ld3Rvbg== 19058\nIHJlY292ZXJlZA== 19059\nIGJyYXVjaGVu 19060\nIEJyb24= 19061\n0LDQvdC+ 19062\nIHBhbGU= 19063\ncHJpc2Vz 19064\nIGhvcmFz 19065\nY2h0cw== 19066\nw7/Dvw== 19067\nYWtlcnM= 19068\nIEFsYXNrYQ== 19069\nemllag== 19070\nIHNjb29w 19071\n7J206rCA 19072\nY29y 19073\nw6lsw6k= 19074\nIHN1cmc= 19075\nIHZpZW5l 19076\nIEtyaXN0 19077\nNTQ= 19078\nIGJhbm5lZA== 19079\nIHNtb290aGx5 19080\nIHRyZWF0cw== 19081\nIHByb25vdW5jZQ== 19082\nIGZsdXNo 19083\nIGNhbWJp 19084\nIG11c2ljaWFu 19085\nIEFzaGxleQ== 19086\nIFNQRA== 19087\nIEJvYmJ5 19088\nIGdsb3Nz 19089\ncmVzcGVjdA== 19090\nIHJldmlld2luZw== 19091\nIGdlbmVyaWM= 19092\nxrDhu5tj 19093\nYXRzw6RjaGxpY2g= 19094\nIGhlYWx0aGllcg== 19095\ndWJlcnM= 19096\nINC00LDQvQ== 19097\nIE1lZGljYXJl 19098\nNTM= 19099\nIGNvbXBsYWludHM= 19100\namFj 19101\nIGFncmljdWx0dXJhbA== 19102\nU3Bl 19103\nIEpvbmc= 19104\nIGRpb3hpZGU= 19105\n6rKo 19106\nZWxpams= 19107\nIFNoaXQ= 19108\nYWludHM= 19109\nIElhbg== 19110\nIFNpbXBseQ== 19111\nIFN0cmU= 19112\nIEdEUA== 19113\nNTk= 19114\nYXN6 19115\nIEthdGll 19116\nINCx0YA= 19117\nIHBlZWs= 19118\nb3d5Y2g= 19119\nIHJlc29ydA== 19120\nIHJlc2lkZW5jZQ== 19121\nIHNwaWNlcw== 19122\nY2nDsw== 19123\nIGplZGVy 19124\nIGVtbw== 19125\nYXJpdW0= 19126\nIHB1ZmY= 19127\n66eJ 19128\n0YPQu9GM0YI= 19129\nIG1ldGE= 19130\nIOyghOs= 19131\nIG9wdGltaXphdGlvbg== 19132\nZ2FuZw== 19133\nIO2VhA== 19134\nIGVmZmljaWVudGx5 19135\nIHZpc3VhbGx5 19136\nIGZyb3N0 19137\nIEFydGh1cg== 19138\nIMW8 19139\nIGFjaGlldmluZw== 19140\nIHJvdGF0aW5n 19141\nIGxpbmluZw== 19142\nIG9jY3VwaWVk 19143\nbWVudGF0aW9u 19144\nIHN0cmV0Y2hpbmc= 19145\nIHN0YWxs 19146\nb3N0aWM= 19147\nIFNldmVy 19148\nIGdsdWM= 19149\nIHLDs8W8 19150\nIG91dHJlYWNo 19151\nc3RyYQ== 19152\naWtlbg== 19153\nIOyWmOq4sA== 19154\nIEpvaW4= 19155\nIGltcGU= 19156\nIGNvbXBlbnNhdGlvbg== 19157\nIFRhdA== 19158\nIENhcmxvcw== 19159\nw7xocnQ= 19160\nIEZyYW5jaXM= 19161\nY2pp 19162\neWVhaA== 19163\nIG1lbWJyYW5l 19164\nIGV4aGFsZQ== 19165\nIHJlbGk= 19166\nIE9S 19167\nIHJlZnJpZ2VyYXRvcg== 19168\nIFZlbmV6 19169\nTGlrZQ== 19170\nIHJhaXNlcw== 19171\nb3R0bGU= 19172\nYXR1cmE= 19173\nIHJ1bGVy 19174\nIHdlZXI= 19175\nIGd1aWRlZA== 19176\nIE1hZ24= 19177\nIENvcnBvcg== 19178\njZQ= 19179\nIGF0dHJpYnV0ZQ== 19180\nIFdvYWg= 19181\nIGFycm93cw== 19182\nIGF3YWl0 19183\nIFByaW0= 19184\nIGRpZ25pdHk= 19185\nIE9udGFyaW8= 19186\naXNjaGVy 19187\nIOyLnQ== 19188\naW1lbg== 19189\nb3V2ZXI= 19190\nQVNT 19191\n4buHbg== 19192\nb3B5 19193\nYWNodXNldHRz 19194\nIGVsZGVybHk= 19195\nRkE= 19196\nIERhaWx5 19197\nc2hpbmU= 19198\nIDU2 19199\n6KI= 19200\naWVybm8= 19201\nIHNraWxsZWQ= 19202\nIGdyb8OfZQ== 19203\nIE9haw== 19204\naWdnbGU= 19205\n0LXQu9C10Lk= 19206\nIGJpcmF6 19207\nIGFyZ3Vpbmc= 19208\nINC/0L7RjdGC0L7QvNGD 19209\nIGRyaWZ0 19210\nIGhhcm5lc3M= 19211\nIGRlaXhhcg== 19212\nYXV0cmU= 19213\nIFNlZWluZw== 19214\nIGNhcGl0YWxpc20= 19215\nIEVsZA== 19216\nemlvbmU= 19217\nIEJleW9uZA== 19218\nIHBlcmZlY3Rpb24= 19219\nIGhvZQ== 19220\nIGRlY2xhcmU= 19221\n0LDQu9Cw0YHRjA== 19222\nIHBva2U= 19223\nINeh 19224\nIGZpZ2h0ZXJz 19225\n6rKg64uk 19226\n0L7RgNC+0LI= 19227\nIGFjY29yZGluZ2x5 19228\nIElzYQ== 19229\nIG9wdGltaXpl 19230\nIE1pbmlzdHJ5 19231\nIHNhZ2U= 19232\n7Iuc66m0 19233\nIGJlbmk= 19234\nIGRvbmF0aW9u 19235\nIGNsZWFyZWQ= 19236\nIEx1Y2tpbHk= 19237\nIGhhcm1mdWw= 19238\ntey7pA== 19239\nIGNlbWVudA== 19240\n0L/QuNGB 19241\nIGRlZGk= 19242\nIENyYWln 19243\nIGRlbW9ucw== 19244\nIGN1c3RvbWl6ZQ== 19245\nIGlnbm9yZWQ= 19246\nIFRpYW4= 19247\nIGhvcGVk 19248\nIEJ1cmVhdQ== 19249\nIHJp 19250\nIFlhaA== 19251\nIHNvY2tldA== 19252\nIGZlYXR1cmluZw== 19253\nIHBhcmY= 19254\nIFRF 19255\nIFRlYWNoZXI= 19256\nIGNhdGFsb2c= 19257\n6rCA7KeA6rOg 19258\nIFNlaXRl 19259\nIGNvbmU= 19260\nIFBhbGVzdGlu 19261\nIGdld29vbg== 19262\nIGdhaW5pbmc= 19263\nINii 19264\nIGNhdGFzdA== 19265\nIG5laWdoYm91cg== 19266\nSVNU 19267\nIHN0ZWFsaW5n 19268\nIHRyb2lz 19269\nIGludGVuZA== 19270\nIFNob290 19271\nIHBpb25l 19272\nIEludGVs 19273\nIExJTg== 19274\nIGJyaWdodGVy 19275\nIFllc3RlcmRheQ== 19276\nIHNvdw== 19277\nc2lu 19278\nb2Rz 19279\nIGV0aGljcw== 19280\nIGludGVydmlld2Vk 19281\ncmVsbA== 19282\nIHJlZnJlc2hpbmc= 19283\nc8Ol 19284\nIGFic3VyZA== 19285\nIHBob3NwaA== 19286\nZmls 19287\nIHN0ZWhlbg== 19288\ndmFscw== 19289\nIGNhcmVk 19290\nIGRlbGw= 19291\nYm9uZQ== 19292\nIGhvY2g= 19293\nIHB1cA== 19294\nIGlv 19295\nIGFjb250ZWNl 19296\nZWxsZXM= 19297\nIFNwbA== 19298\naWdp 19299\nIHTDpG4= 19300\nIGVsZXBoYW50 19301\nIGdhdGVz 19302\nIHNsaWNlcw== 19303\nIHByYW5r 19304\nb2tyYXQ= 19305\nIGhpbGFyaW91cw== 19306\nIFNpZA== 19307\nIOuSpA== 19308\nIGVzc2VyZQ== 19309\nIHRlbGVwaG9uZQ== 19310\naW5hbGx5 19311\ncmF0b3I= 19312\nIGhlbGljb3B0ZXI= 19313\nIGnFn3Rl 19314\nIGdpZA== 19315\nIHRvdXJpc3Q= 19316\nIGNvbmZsaWN0cw== 19317\n0LDRgtCw 19318\nIHTDqQ== 19319\nIGFzc2VydA== 19320\nIGxhdW5kcnk= 19321\nIEJvbQ== 19322\nIHNwZWNpYWxpemVk 19323\nIE1vZGVybg== 19324\nb2dyYWY= 19325\nIGFubw== 19326\nIHJldHJpZQ== 19327\nIFB1dGlu 19328\nIEhBUg== 19329\nINC80LDRiA== 19330\nIM6xz4DPjA== 19331\nIHR1dHRp 19332\nINCy0YLQvtGA 19333\n7Ja1 19334\nIEJ1bA== 19335\n64uk66m0 19336\nxYJl 19337\nYXJpbg== 19338\nIHRoZXJhcGlzdA== 19339\nIGfDpXI= 19340\nIEN6eQ== 19341\ncHBl 19342\nbWly 19343\nIFRlcm0= 19344\nIEJlYXI= 19345\nbGFjZQ== 19346\nIE1vcmVvdmVy 19347\nIERpc2M= 19348\nIO2DgA== 19349\nIHRpdGxlZA== 19350\nIHN0cmlwcw== 19351\nIEZhaHI= 19352\nIFJpbmc= 19353\ncmFuZG8= 19354\nYWZh 19355\nIHNob3J0cw== 19356\nIHRydW5r 19357\nIHNlbnRpZG8= 19358\nz4nOvQ== 19359\nIGFjcmVz 19360\nIG92ZXJk 19361\nIE9seW1waWNz 19362\nIE1lcmNp 19363\nIOuCmOyYpA== 19364\nIGdlcm0= 19365\nYW1tZWQ= 19366\nIHByZWd1bnQ= 19367\nIE51dA== 19368\nIDwv 19369\nIHRyYXZlbHM= 19370\nIHZvY2FidWxhcnk= 19371\nZXRlbg== 19372\nb2Rlcg== 19373\nIGNvbnN1bWluZw== 19374\nd3JpdGluZw== 19375\nIGFwcGVhcmluZw== 19376\nIGFkanVzdGVk 19377\nc2Vt 19378\nIGZyZW50ZQ== 19379\nIG1heGltaXpl 19380\nIHp3aXNjaGVu 19381\nIHphbQ== 19382\nY29uc2Npb3Vz 19383\nemVr 19384\naGFv 19385\n7LKY65+8 19386\nIEVwaXNvZGU= 19387\nIHZpc2liaWxpdHk= 19388\nIG1pam4= 19389\nIHZpZWxlbg== 19390\nIEJyb3RoZXJz 19391\n15nXkQ== 19392\nIHbDpGxkaWd0 19393\nIGNydXNoZWQ= 19394\ndWZlbg== 19395\nYWN0aWM= 19396\nIEJlZA== 19397\nIEZB 19398\naXNzaXBwaQ== 19399\nIHJlbW90 19400\nIHBldHM= 19401\nIHRodW5kZXI= 19402\nIE1hbQ== 19403\n7JW17Luk 19404\ncGFyZW50cw== 19405\nIGLEsQ== 19406\nIHN1cnRvdXQ= 19407\nIHNlZ21lbnRz 19408\nIG5laG1lbg== 19409\nIHV0aWxpeg== 19410\nIFJ1Ynk= 19411\nIHLhu5Np 19412\nIGhhcHBpbHk= 19413\nIGJ1c2g= 19414\ndWx0YW4= 19415\n2Lg= 19416\nIEhpbA== 19417\nIGxhd24= 19418\nIGV5ZWJyb3dz 19419\nbWV6 19420\nIFN5ZA== 19421\ncmVw 19422\naW5m 19423\nIG92ZXJoZWFk 19424\nY3puaWU= 19425\nIG94aWQ= 19426\nIFdvbA== 19427\nIGRlc3Ryb3lpbmc= 19428\nIEFkZGl0aW9uYWxseQ== 19429\ndW1ibGVk 19430\nZGVw 19431\nIGRlcG9z 19432\nIGNvbW1vZA== 19433\nIGNha2Vz 19434\nIHRhbGVudHM= 19435\nIHBvdXJxdW9p 19436\nIGNvbnRlbXBs 19437\nbmVscw== 19438\n0L7RiQ== 19439\nIEFyYWJpYw== 19440\nIE1hcnlsYW5k 19441\nb3dv 19442\nIFBsYQ== 19443\nxJ9sdW0= 19444\nIHByb3BoZQ== 19445\nIFJlcHJlc2VudA== 19446\nb3BvbA== 19447\nYWNjb3Jk 19448\nIE1lYW5pbmc= 19449\nIGpvaW50cw== 19450\nIGJyYWtlcw== 19451\nY2t0 19452\nIDE5OTk= 19453\nIHB1YmxpY2F0aW9u 19454\nIFJldmlldw== 19455\n0L7QudC0 19456\nIG5pY2hl 19457\nIHNpZ25pZmljYQ== 19458\nIGRlYnI= 19459\nIG92ZXJsYXA= 19460\nIGRlbWFuZGluZw== 19461\nIFPDsw== 19462\nIHN1YnNlcXVlbnQ= 19463\nIHF1b3Rlcw== 19464\nIEN1cnJlbnRseQ== 19465\nIHByZXZlbnRpbmc= 19466\nIDEzMA== 19467\nIENlbA== 19468\nb25u 19469\nd25pZcW8 19470\n7JW9 19471\nINC60LDQutC40LU= 19472\nQUNI 19473\nIGd1bQ== 19474\nIElzcmFlbGk= 19475\n7Jy864uI6rmM 19476\n5ag= 19477\ncnVrdA== 19478\nIGNsYXBwaW5n 19479\nIE1hc3NhY2h1c2V0dHM= 19480\nIHJlc2lsaWVuY2U= 19481\nIHN1YnNjcmliaW5n 19482\nIGpld2Vscnk= 19483\nZ2VicmE= 19484\nIGNvcnJlY3Rpb24= 19485\nYm9v 19486\n2KY= 19487\nbGlv 19488\nc2Ft 19489\nIGVudmVsb3Bl 19490\na2Fs 19491\nIEZhcm0= 19492\nIGNhdHRsZQ== 19493\nIGJyYXM= 19494\nIHJlcGVudA== 19495\nIHRvbmVz 19496\nb3Npb24= 19497\ncGVjdGlvbg== 19498\nIGRlbmVu 19499\nyJtp 19500\nIE1hcmc= 19501\nIGFjcXVpcmU= 19502\naWJsaW5ncw== 19503\nIGFzcGly 19504\nIHNpemVk 19505\nIGFsYw== 19506\nIHZpYnJhdGlvbg== 19507\ndGls 19508\nZW1pbg== 19509\nIGNvcnJlbGF0aW9u 19510\nIHNpbmd1bGFy 19511\nINC/0L7Rj9Cy 19512\ncmVr 19513\nIGNoYXB0ZXJz 19514\nbWJyZQ== 19515\nIGF1ZGl0aW9u 19516\nw6dhcw== 19517\nIHZhbXA= 19518\nIHRlcw== 19519\nINGA0LDQt9Cy 19520\nIHJlc3BlY3RlZA== 19521\nY2lu 19522\nIGZ1Y2tpbg== 19523\nIMO8YmVyaGF1cHQ= 19524\nINC/0L7QsQ== 19525\nIGFsaWtl 19526\ntog= 19527\ncm9iaQ== 19528\nw650 19529\nIFRvdWNo 19530\nYW56YQ== 19531\nIGZpcm1seQ== 19532\nIEdyZWV0aW5ncw== 19533\nc2NhbGU= 19534\nZGFk 19535\n0LDQutGC0Lg= 19536\nIGJhY2t5YXJk 19537\n0L7QttC0 19538\nR3I= 19539\nIFNURQ== 19540\n0L7RgNGC 19541\nIGjDpHR0ZQ== 19542\nIEZpcnN0bHk= 19543\nIE9mdGVu 19544\nYXN1cmVz 19545\nIGRyYXdz 19546\ncmVkaXQ= 19547\nQVRF 19548\nUGU= 19549\nQ1A= 19550\nIGNvbXBlbGxpbmc= 19551\nIHN1YnNpZA== 19552\nIG5laWdoYm9yaG9vZHM= 19553\nIGRpcGxvbQ== 19554\nIGVudGVuZGVy 19555\ncGVyaW5n 19556\nYXVn 19557\nY2hhdA== 19558\n0J3Rgw== 19559\nIERvbGw= 19560\nIOygkA== 19561\nIGhvc2U= 19562\nbmFy 19563\nIHJld2FyZGluZw== 19564\nIFNvbGQ= 19565\nIHRha2k= 19566\nIGJsYWRlcw== 19567\nIEthdGg= 19568\nIGpvZ28= 19569\nIHNlbnNhdGlvbg== 19570\ndWFuYQ== 19571\ncGVs 19572\nIFJlY2VudGx5 19573\nIHBvbHltZXI= 19574\nIFVQ 19575\nLS0t 19576\nIGhvdmVy 19577\nIHJ1bGVk 19578\nINeU15DX 19579\nIGFmZmVjdGlvbg== 19580\nIMSR4buD 19581\nIGJyZWU= 19582\nIExheQ== 19583\nIFlvbmc= 19584\nIHJlY2VpdmVy 19585\nnOulvA== 19586\nIGRpc3Nv 19587\nIFFpbmc= 19588\nIMOpdg== 19589\nIG3DunNpY2E= 19590\nIGFlc3RoZXRpYw== 19591\nIEJyZWF0 19592\nIFRB 19593\nIGFjY3VyYXRlbHk= 19594\nP+KAiw== 19595\nIHdhZ2Vz 19596\ncmF3ZMSZ 19597\nIHN3YWxsb3c= 19598\nIGNvbXBsYWludA== 19599\nIGxpZWQ= 19600\nYmVjdWU= 19601\nIHJlbGF4aW5n 19602\nIFBva8OpbW9u 19603\nIHRlY24= 19604\nYmFuZw== 19605\ns7Ts 19606\nIHF1aWVu 19607\n0L3QvtC80YM= 19608\nIGhhYml0YXQ= 19609\nLi4uLi4u 19610\nYWJsaW5n 19611\nINGC0LDQutC40LU= 19612\nIGJlc29uZA== 19613\nIGVtcGxveWVk 19614\nIGFycml2ZXM= 19615\nIHZlc3NlbHM= 19616\nIEF4 19617\nIGRpc3BsYXlz 19618\nMTUw 19619\nb2xvZ2ll 19620\nIOyXkA== 19621\nIGNsbw== 19622\nINC00L7Qsg== 19623\nINCe0LQ= 19624\nIHZ1ZWw= 19625\nd2VuZA== 19626\nIHNsaXBw 19627\ndXJw 19628\nIExvdA== 19629\nIGJ1bGxldHM= 19630\nIHJhZ2U= 19631\nIHNraXJ0 19632\naWVudGVz 19633\nIG5o4buvbmc= 19634\nIE5hdHVyYWw= 19635\nIGhpbmQ= 19636\nIHdvcmtsb2Fk 19637\nbXU= 19638\n7YOc 19639\nIHN1bnNldA== 19640\n0LLQvtC7 19641\ncGl0 19642\nIEFTSA== 19643\nIOu2hOuTpA== 19644\nIGRvd25zdGFpcnM= 19645\n6a0= 19646\nIGNvdW50ZWQ= 19647\nIG5heg== 19648\n15XXpA== 19649\nIFBoaWxpcHBpbmVz 19650\nIDExMA== 19651\nIFBhcmtlcg== 19652\nIGdpdHU= 19653\nIGludGVyZXM= 19654\nIHVtYnJl 19655\nIE5hdHVyZQ== 19656\nIGplcg== 19657\nZW5vcw== 19658\nIHBhbmVsaXN0cw== 19659\nIGNvYXRpbmc= 19660\nIGNoZXJyeQ== 19661\nIFBlbnQ= 19662\nIE1pc3Q= 19663\ncmVnYXRpb24= 19664\nIHZpbmQ= 19665\nIENvcnBz 19666\nIE1pc3Npb24= 19667\nIG5vYmxl 19668\nIGZvbmN0aW9u 19669\nIHdhcnJpb3I= 19670\nIHByb3Rlc3Rz 19671\nb3VyaQ== 19672\nIGNvbnN0aXR1dGlvbmFs 19673\nxYJhbQ== 19674\nIGVtZXJnZWQ= 19675\nIGR5ZQ== 19676\nIFRyeWluZw== 19677\naWdt 19678\nw6lxdQ== 19679\nTE8= 19680\nIFZlcm0= 19681\nZXJ2aW5n 19682\nIFRJTQ== 19683\nIENp 19684\nIGZyZWV6ZXI= 19685\nIGdydXBv 19686\nIFNwb3J0cw== 19687\nINC/0YDQvtCz 19688\nINmE2Kc= 19689\nb3RoZXJhcA== 19690\naWZmYW55 19691\nYmlhbg== 19692\nIHJhbmtlZA== 19693\nIHByb3Bvc2Fscw== 19694\nIMSRw6J5 19695\nIGZyZWV6aW5n 19696\nIGluc2VjdHM= 19697\ndmls 19698\nIGNvbXBvc3Q= 19699\nIHNlbWFuYQ== 19700\nIGRpc3Rpbmd1aXNo 19701\nIGZhY2lsaXRhdGU= 19702\nIHBsdXNpZXVycw== 19703\nIHZlcmc= 19704\nIGFsZ3Vucw== 19705\nIFRpa1Rvaw== 19706\nIEV4cHJlc3M= 19707\n0LzQtdC90YI= 19708\nU1U= 19709\nIGludGltYXRl 19710\nIEF1dGhvcg== 19711\nIHdpdG5lc3Nlcw== 19712\nIGthbGF1 19713\nIGFyZ3VlZA== 19714\nIGF2b2lkaW5n 19715\nY3RpdmU= 19716\nIHB1cnN1aW5n 19717\nIHN5bGw= 19718\nw6F2ZWw= 19719\nIEF0bGFudGE= 19720\nIFV0YWg= 19721\nIFRpbGw= 19722\nIGVyZg== 19723\nIDIwMjI= 19724\nw6R0ZXI= 19725\nIGZ1bmVyYWw= 19726\nIEZsYXNo 19727\nIEF0bGFudGlj 19728\nIGdlbGU= 19729\n7KaI 19730\nIG1vcnRnYWdl 19731\nIOuEmA== 19732\nbGljaHQ= 19733\nIGFtYml0aW91cw== 19734\nIEJlaWppbmc= 19735\nIGRpdmluZw== 19736\nIHVuYm94 19737\naWxsYXM= 19738\nIG90cmFz 19739\nIGV2YWM= 19740\nIG1hcmluZQ== 19741\nINGB0L7Qt9C0 19742\nIENyZWF0ZQ== 19743\nIGdq 19744\nIGZyZXF1ZW5jaWVz 19745\naW5ndG9u 19746\nIFJvbWFucw== 19747\nIGFpbWluZw== 19748\nIEJ1ZmY= 19749\nIGVtcGVyb3I= 19750\nIE1vaQ== 19751\nIHByb21pc2luZw== 19752\nIGFsZ3VtYQ== 19753\nIHBhc2E= 19754\nIGRpc29yZGVycw== 19755\nU0k= 19756\nIHN1Y2NlZWRlZA== 19757\nIGN1ZXJwbw== 19758\nIHNvZGl1bQ== 19759\nIHN0dWI= 19760\naGVpcm8= 19761\nIGRlbGF5ZWQ= 19762\nZXRlcmE= 19763\ndHc= 19764\nIHN5bmM= 19765\naGQ= 19766\nIHRvdXJpc3Rz 19767\nIHN5c3Q= 19768\nIG3DqXQ= 19769\nIHF1YWxpZnk= 19770\nIE90aGVycw== 19771\nbGxlcnM= 19772\n0LDRgtC10LvRjNC90L4= 19773\nINCe0L3QsA== 19774\nIHBlcmNlaXZl 19775\nIOqygA== 19776\nIOqwgOyepQ== 19777\nINC40YHQug== 19778\nIE1hdHRlcg== 19779\nIEJsdWV0b290aA== 19780\nIHBlYXJs 19781\nIGFyaXNl 19782\nIG1vbnVtZW50 19783\nINC40LzQtdC90L3Qvg== 19784\nYWdp 19785\n2YTZig== 19786\nIHJobw== 19787\nIHNtYXJ0ZXI= 19788\nIGNvbmo= 19789\n0L7QutCw 19790\nIGtlZW4= 19791\nIFRyZWF0 19792\n0LrQu9GO0Yc= 19793\nIHBhY2tldA== 19794\nZWxzaXVz 19795\nIEFsYWI= 19796\n0LjQvdC4 19797\nIHBzaQ== 19798\nIGVuam95YWJsZQ== 19799\nIEVsbGVu 19800\nINCy0Lw= 19801\nIGVsaW1pbmF0ZWQ= 19802\nIFJvdw== 19803\nIHpvbWJpZQ== 19804\nIEt1 19805\nIHBocmFzZXM= 19806\nIGdyZW4= 19807\ndXRlcg== 19808\nIGRpcmVrdA== 19809\n15Y= 19810\nZW5lbg== 19811\ndXNh 19812\nINGB0LvQvtCy 19813\nxLA= 19814\nIEdo 19815\nIGNvcnJpZA== 19816\nIHF1ZWVy 19817\nIExpbmRh 19818\nIG9uYQ== 19819\nIG9ibGlnYXRpb24= 19820\nZGFy 19821\nINi1 19822\nZW1tZW50 19823\nYWNpZXM= 19824\nIHNjcmV3ZWQ= 19825\nIG5haw== 19826\nIGF5dWQ= 19827\nw6Fy 19828\nbGV6 19829\nIGRyb3du 19830\nIE1lZGljaW5l 19831\nIGxhYnM= 19832\nIGp1c3F1 19833\nIEdvbm5h 19834\nIHRlcnJvcmlzdA== 19835\ncXVlc3Q= 19836\nIGZhcnRoZXI= 19837\nIHJlcGxpZWQ= 19838\nIFNX 19839\nIE1pc3Npc3NpcHBp 19840\naXNobmE= 19841\nIGhvbGRlcg== 19842\nIHJlaWdu 19843\nIGFjY2VwdGFuY2U= 19844\nIHVs 19845\ntow= 19846\nIEhvdGVs 19847\nIENvb3Blcg== 19848\ndGFu 19849\nIEdyYWI= 19850\nIHZhcG9y 19851\nIGFjdGVk 19852\nIEthbmc= 19853\nZmFu 19854\nIOydtOyDgQ== 19855\ndXRldA== 19856\nIHdvcmR0 19857\nIGZhcm1z 19858\nZGF0 19859\nIGNvdXBsZXM= 19860\nIGJlYWRz 19861\naWVudG9z 19862\nVGhlbg== 19863\nb3NpdHk= 19864\nIFN0YW5mb3Jk 19865\nLi0= 19866\nV2FpdA== 19867\nIGRhdGFz 19868\nb2lyZQ== 19869\nIGhhc2h0YWc= 19870\naW1tZQ== 19871\nIGVuY291bnRlcmVk 19872\nIHNob3V0aW5n 19873\nIHJlc2lzdGFudA== 19874\nIFNldW5n 19875\nIHRyYWdpYw== 19876\nIERyYXc= 19877\nLCw= 19878\nIHNob3djYXNl 19879\nIEFG 19880\nIFN0cmk= 19881\nIGJhY2tlZA== 19882\nINGD0LM= 19883\nINCx0YPQtNGD0YI= 19884\nIENvbGU= 19885\nZXVycw== 19886\nKD8p 19887\nIGVzY2FwZWQ= 19888\nQVNU 19889\nIEFzc2VtYmx5 19890\nIHN0aWNrZXI= 19891\nIG1pZXV4 19892\nIGVudGVydGFpbmluZw== 19893\nIERPTg== 19894\nIEFtZW5k 19895\nIEthcmw= 19896\nIGluaGli 19897\nc3N0 19898\naWVn 19899\nfn5+ 19900\nIGhvb2tlZA== 19901\nIGxpdGVyYWw= 19902\nIHN1bm55 19903\nc3RlcHM= 19904\nIOuwnOs= 19905\nIE1hcmluZQ== 19906\nIHN1ZQ== 19907\nIHByaXNvbmVycw== 19908\nIEVi 19909\nNTg= 19910\nIGRydW1z 19911\nIGd1aWx0 19912\nYWxn 19913\nIGhhcHBpZXI= 19914\nIENN 19915\nIOyVhOuLiOyVvA== 19916\nINCf0LXRgA== 19917\n0YPQu9GP 19918\nIGtleXdvcmQ= 19919\nIFBhcmNl 19920\nIEZvcmVpZ24= 19921\nIEFtYW5kYQ== 19922\nIOuqqQ== 19923\ncGxlc3M= 19924\niKw= 19925\nw7Ntbw== 19926\nIHF1YWxxdWVy 19927\n7J2065286rOg 19928\nIGNvbnNwaXJhY3k= 19929\nIHN0cmF3YmVycnk= 19930\nIGhhdHRlbg== 19931\nRXM= 19932\nIHNwb3M= 19933\nIHZpbGxhZ2Vz 19934\nIGxldg== 19935\nINGB0YDQtdC0 19936\nIHdha2luZw== 19937\nIGNhbGN1bGF0aW9ucw== 19938\nINmF2Lk= 19939\nIHBvdXJpbmc= 19940\nIGxlYmlo 19941\nIHBvbGlzaA== 19942\nIFRvdXQ= 19943\nIGZ1bmt0aW9u 19944\n0LzQvg== 19945\nIFRp 19946\nIHdhc3Rpbmc= 19947\naXN0aWNhbGx5 19948\nIG1hbmlwdWxhdGU= 19949\nIHNpbXBsaWZ5 19950\nIHRlYW1tYXRlcw== 19951\nINCx0L4= 19952\nIGNvbnRhbQ== 19953\nIFF1aXRl 19954\nIGt1cno= 19955\nIENhbmQ= 19956\ndHlwZQ== 19957\nb3V0aGVhc3Q= 19958\nIGZpbmFuY2lhbGx5 19959\n0L7Qu9C9 19960\nZWxzb24= 19961\nIGZvcmVoZWFk 19962\ndWFnZQ== 19963\nbmF1ZGlibGU= 19964\nIEJlaGluZA== 19965\nIG5lZ290aWF0aW9ucw== 19966\nIOuniOydjA== 19967\nIGFsdGVybmF0aXZlcw== 19968\ncmFuaw== 19969\naG9sZGVy 19970\nIGhlYWxlZA== 19971\n0YLQvtGH 19972\nIFNwZWM= 19973\nIGV4aGliaXQ= 19974\nIHNoYWxsb3c= 19975\nIGdvYg== 19976\nIOuc 19977\nIGZydXN0cmF0aW9u 19978\nw61v 19979\nIG1lbHRpbmc= 19980\nIFN0b3Jt 19981\nIHBhdGVudA== 19982\nIEJhcmNlbA== 19983\nIHBlZGVzdA== 19984\n2YjZhQ== 19985\nIHRhaQ== 19986\nIE1vZGU= 19987\nIHdpbA== 19988\nIOuqqOultA== 19989\nIMOpZ2FsZW1lbnQ= 19990\nINeQ15c= 19991\nYXlhbg== 19992\nIGFtYXplZA== 19993\n7KeA64qU 19994\nIGhhY2llbmRv 19995\nIOydtOyVvA== 19996\nzrvOsQ== 19997\n4LiC 19998\n0LXRgtCw 19999\nIGV4YW1z 20000\nIHRyYXZlbGxpbmc= 20001\nUHJlc3M= 20002\n0LjRgNGD 20003\nIGJhc2VsaW5l 20004\nIGJ1c2Vz 20005\nIHJlaW5mb3I= 20006\ndmVuYW50 20007\nIFRydXRo 20008\nnb0= 20009\nb2Jl 20010\nIHllbGw= 20011\nIHNhdXNhZ2U= 20012\nVEY= 20013\nIEV2aWw= 20014\nIG1laW5lcg== 20015\n15nXpw== 20016\nIGhvcGVmdWw= 20017\nIHLDs3duaWXFvA== 20018\nIFBlcsOy 20019\ndHdv 20020\nbmRlcg== 20021\nINC80LjRgA== 20022\nIGNvbnNjaWVuY2U= 20023\nIFdhcnJlbg== 20024\naWNreQ== 20025\nIGFpbWVk 20026\nIGfDtnJh 20027\nWFQ= 20028\nIHB5cmFt 20029\nUmVk 20030\nYXR1 20031\nIEVzdGE= 20032\nIGVhcm5pbmdz 20033\nIGhhdHM= 20034\nIFN0YWR0 20035\naWNrZXQ= 20036\ncG9pbnRz 20037\naW5hbmRlcg== 20038\nIG1vdG9yY3ljbGU= 20039\nIOuPjA== 20040\nIO2VtOyVvA== 20041\na29t 20042\nIERpbmc= 20043\n5pI= 20044\nIHJlY3Vycw== 20045\nIGVzdGltYXRlcw== 20046\nIGRlcm5p 20047\nIHZlcnNjaA== 20048\nIE1JQw== 20049\n0LjQstCw0YLRjA== 20050\nINC/0YDQvtGI 20051\nIGRvc3Q= 20052\nINCy0YHRgtGA 20053\nIHdpZWw= 20054\nIHNpYmxpbmdz 20055\nINC00LXQsg== 20056\nIGVhcmxpZXN0 20057\nIGZhdGlndWU= 20058\nIG5oaQ== 20059\nIGd1c3Rh 20060\nIGJvbm5l 20061\nZnJvbQ== 20062\nIEplbm55 20063\nIHN1cHBvc2VkbHk= 20064\naW50YWdl 20065\nIGNvdW50aWVz 20066\nIHVucmU= 20067\nIHBsYW50aW5n 20068\nIEdyYWM= 20069\nIEdlbmVzaXM= 20070\nIEFscGhh 20071\neXN6 20072\nIHRpbGU= 20073\nIOqyveyasA== 20074\nINeZ16k= 20075\ncXVlbA== 20076\nIGRpc3RyaWJ1dGU= 20077\nZGVm 20078\nw6lyYWw= 20079\nIGNsdXRjaA== 20080\nYWRlbHBo 20081\nIFBsYXlTdGF0aW9u 20082\nhLg= 20083\nIHNq 20084\nYnJlYWtpbmc= 20085\nIOuQmOs= 20086\nIEN1YmE= 20087\nIFJ1c3NpYW5z 20088\nIE1BUks= 20089\nIHBlcnNl 20090\nIHJlc3RyaWN0ZWQ= 20091\naWdlcw== 20092\nIFRyYXZlbA== 20093\nIGVsZWN0cm9uaWNz 20094\nIHF1YXJ0ZXJz 20095\nIEtlaXRo 20096\nc2l6ZWQ= 20097\nIGRlYWRsaW5l 20098\nYXJlbnRo 20099\nIHbDrWRlb3M= 20100\nIHByb3RvY29scw== 20101\nYW1tZW50 20102\nIFRyYWluaW5n 20103\nIMOi 20104\nIHNlcXVlbA== 20105\n0L3QsNC6 20106\nIGtlaW5lbg== 20107\nIG1hdHRyZXNz 20108\nbHVkaW5n 20109\nIGNsYXNzaWZpZWQ= 20110\nIHJlYWN0b3I= 20111\nIEtvbnQ= 20112\nIHBhc3Nhcg== 20113\nIGhvbm91cg== 20114\nb3JpZw== 20115\nSU5B 20116\nIE5hdGhhbg== 20117\n0LLQsA== 20118\nINGB0LrQsNC30LDRgtGM 20119\ndMSxcg== 20120\nIGV4Y2x1c2l2ZWx5 20121\nIHNoYWRlcw== 20122\nINC/0YDQvtGG 20123\nIG9jY2FzaW9ucw== 20124\naWph 20125\nZmln 20126\nIHR1cw== 20127\nIHJlbWVt 20128\nIENocmlzdG9waGVy 20129\nIHNsaW1l 20130\nIGFsZ3VuYQ== 20131\nIEZvcnR1bmF0ZWx5 20132\nIGxvcnM= 20133\ndm9sbA== 20134\nYXZlcg== 20135\nIG91dGxldA== 20136\nIExpbmtlZElu 20137\nIEV4ZWN1dGl2ZQ== 20138\nIG9yZ2Fucw== 20139\nIEJlZ2lu 20140\nIO2ZlA== 20141\nIHRyYW5zcGxhbnQ= 20142\ncmFnZW4= 20143\nVk8= 20144\nIEbDtnI= 20145\nINio2KfZhA== 20146\nIEFuZHJl 20147\naXNpbmU= 20148\nIGxhc3Rz 20149\nIGhpc3TDs3JpYQ== 20150\nIGx1eg== 20151\nIGNvbGxhcg== 20152\nIGtpZG5h 20153\nIG9wdGljYWw= 20154\naW92 20155\nIHRvYg== 20156\nIGV4dGVyaW9y 20157\nIG1ldHJpYw== 20158\naWV1cg== 20159\nIHRyb2xs 20160\nINGA0L7Qtw== 20161\nIHTDtA== 20162\nIOyYiOyB 20163\nIEdlc2V0eg== 20164\nINC10LQ= 20165\nIGRlbm9taW5hdG9y 20166\n7LM= 20167\nIGxldHQ= 20168\nIGdyw7bDnw== 20169\nIEx1dGhlcg== 20170\nIHJlc3Rl 20171\nIHJlc2VtYg== 20172\nIHBlcm1ldA== 20173\na3Np 20174\nIGZpc2hlcg== 20175\nIFZvbg== 20176\n7ZS8 20177\nIM+Dz4TOvw== 20178\nIGxvY2tz 20179\nIHNob290cw== 20180\nIGthbXU= 20181\nIEtlcg== 20182\nIE9icw== 20183\nIGJpbGk= 20184\nIOuwsQ== 20185\nIHRvcnR1cmU= 20186\nYXNzeQ== 20187\nINC40LM= 20188\nIGxhc3Rpbmc= 20189\nIHRpZW5lcw== 20190\nIHJlY2VpdmVz 20191\nIE9zY2Fy 20192\nIHJlbWVtYmVyaW5n 20193\nIHByb2JsZW1hcw== 20194\nIGlh 20195\nIG1lbW9yYWJsZQ== 20196\nIGpvdXJz 20197\nIGZhw6dvbg== 20198\nYW1pYw== 20199\nIOu0pA== 20200\nYXRpcXVl 20201\nIOutlOqwgA== 20202\nIHppcA== 20203\naGFsdA== 20204\nIPCfmA== 20205\nIGZyaWVz 20206\nIGZpbmRlbg== 20207\nZ3Jh 20208\n0YDRg9C0 20209\naW1wb3J0 20210\nIOuLrOs= 20211\nIGlraQ== 20212\nIGNvbXBsYWluaW5n 20213\nIGZhemVuZG8= 20214\nIGdvb2dsZQ== 20215\nIHRhYnM= 20216\nIOuTpOyWtOw= 20217\ndWdv 20218\naWVydG8= 20219\nYXVmZW4= 20220\nIOuovOyggA== 20221\nIHNrdWxsZQ== 20222\nIHN1aXY= 20223\nIHNweQ== 20224\nIEthaQ== 20225\nIG1hcnRpYWw= 20226\nIG9uZGVy 20227\nYXRpbGl0eQ== 20228\nIGlyZ2VuZHdpZQ== 20229\nIGNsYXA= 20230\naW50ZWxs 20231\nIGluc3RhbGxpbmc= 20232\nIHVuaXF1 20233\nIENlbnRyZQ== 20234\nYXN0cw== 20235\ndWFy 20236\nIHJldmlz 20237\nIHRocmVhdGVuaW5n 20238\ncmFpcw== 20239\nIGN1aWQ= 20240\nc2th 20241\nIHJlc29sdmVk 20242\nIHJpZGVz 20243\nIGZhaWx1cmVz 20244\nIHNlbWI= 20245\nIG1hbGVz 20246\nVUZG 20247\nIHRyw6pz 20248\nYXBwZWQ= 20249\nIG5ld3NwYXBlcnM= 20250\ncmlldA== 20251\nIGFwcGxhdWRz 20252\n0JM= 20253\nIE5D 20254\nIGhldGVy 20255\nIGhhemFyZA== 20256\nIHJ5 20257\nIHN0cmljdGx5 20258\nIDU0 20259\nIOuTpOyWtOqwgA== 20260\nIHNwb250 20261\nIHRhdHPDpGNobGljaA== 20262\nIOunkOyU 20263\nbGF1Yg== 20264\nIGFic29yYmVk 20265\nYWNhxJ/EsXo= 20266\nIG9udQ== 20267\nINCQ0L0= 20268\nIGV4cGxpY2l0bHk= 20269\nIOyerA== 20270\nIEZ1dHVyZQ== 20271\nYWNodGVu 20272\nw6Bv 20273\neW9u 20274\nIHNlcmlh 20275\nIEhlcnJlbg== 20276\nY2Vq 20277\nIEFsYmVydA== 20278\n7J2064qU 20279\nZWN0b3I= 20280\nIHBhY2tpbmc= 20281\nIHZpcnR1ZQ== 20282\nIHZlbmly 20283\nREQ= 20284\nIHlheg== 20285\nIGxvZ3M= 20286\nIFBob3Rvc2hvcA== 20287\nIHNpZA== 20288\nbGluZ3M= 20289\nIHJlbW90ZWx5 20290\nIERpZmZlcmVudA== 20291\nIG9wZXJhdGVk 20292\nbGlnaHRz 20293\nIGRpc2NyaW1pbg== 20294\naXN0YW5jZQ== 20295\nIEdSRQ== 20296\nIHBsYWM= 20297\nIHNoaXJ0cw== 20298\nIGp1c3RpZnk= 20299\nIHRyYWJhbGhv 20300\ndXRpbA== 20301\ndm9j 20302\nIHF1YXJ0 20303\nIM6k 20304\nU0M= 20305\nIFNS 20306\nIC0i 20307\nIGhlc2l0YXRl 20308\nIHBhaw== 20309\nZ3Vh 20310\nSm8= 20311\nIHNvdXZlbnQ= 20312\nIEFuZ2VsYQ== 20313\nZXNzZWU= 20314\nYWRlbHBoaWE= 20315\nYXJrcw== 20316\nIHdlZWQ= 20317\nIGthbm5zdA== 20318\nIOq3uOufrOuLiOq5jA== 20319\nIHBsdXTDtHQ= 20320\nIENvbW1hbmRlcg== 20321\nIHN1bW1hcml6ZQ== 20322\n4K+A 20323\nIDk4 20324\nIGRldmVsb3BtZW50cw== 20325\nIENvc3Q= 20326\nIHRoZW9yZXRpY2Fs 20327\nIG9yZQ== 20328\nIG1ldGFsbA== 20329\nzr/Phc69 20330\nZmFocg== 20331\n0JrQkA== 20332\nIGNodWNr 20333\nIGFkYXB0ZWQ= 20334\nIE9rbGFo 20335\nIE5ldGhlcmxhbmRz 20336\nIHBvZXQ= 20337\nc3Rv 20338\na2F0 20339\nIHdlYXJz 20340\n568= 20341\nIOyWtOuUlA== 20342\nIEVzdG8= 20343\nIGxhdWdoZWQ= 20344\nIGRvbm5lcg== 20345\nIOuNsA== 20346\nIOybkOs= 20347\nb2N1cg== 20348\nIEtpY2s= 20349\nIERldHJvaXQ= 20350\nIGJpY3ljbGU= 20351\nIGxhY2tpbmc= 20352\ncGhhYmV0 20353\nIEtlbmQ= 20354\nQXNz 20355\nIHJldmVhbHM= 20356\nIM6g 20357\nIE5vYWg= 20358\npqzripQ= 20359\nIHNlbGxz 20360\nIEFsYWJhbWE= 20361\nIHRlcnJpZmlj 20362\nIEVsZW1lbnQ= 20363\nIO2G 20364\nIHR1cmJv 20365\nIEhvbQ== 20366\nIHRoZW9yZW0= 20367\nIGFkdmVudHVyZXM= 20368\nIHB1cmNoYXNpbmc= 20369\nIFTDoQ== 20370\nINC80LDRgg== 20371\nIHZlbW9z 20372\nIGR1dGllcw== 20373\nIHdlbmln 20374\nIGJvb3Ro 20375\nIGVudHJhcg== 20376\nVkE= 20377\nIGdlYXJz 20378\nIEphZQ== 20379\nw6hu 20380\nIGNhbGNpdW0= 20381\nIFJvYmVydHM= 20382\nINC/0YDQvtCx0LvQtdC8 20383\nIHJpYmJvbg== 20384\nINC90LDQt9GL0LI= 20385\nIGxhdg== 20386\nIGludGVydmVudGlvbnM= 20387\nIFVsdHJh 20388\nIG5hbWVseQ== 20389\nIGFkZXF1YXRl 20390\nIHJlY2Fw 20391\nIGRvY2s= 20392\nZnRpbmc= 20393\nIHZvaQ== 20394\nIGNvbnN1bHRhdGlvbg== 20395\nINGB0LXQvA== 20396\nIHBvZGVt 20397\nIHBvc3Nlc3Npb24= 20398\nIGNsdWVz 20399\nIFJ1c3NlbGw= 20400\nIHJlbmV3YWJsZQ== 20401\nINGD0Lc= 20402\naW5mb3JtYXRpb24= 20403\naWdnZXJz 20404\nV2l0aA== 20405\nd25v 20406\nIGVsYWJvcmF0ZQ== 20407\nY3RvcmFs 20408\nIERvdw== 20409\nIHJhbWVu 20410\n4buV 20411\nIGVyc3Rl 20412\nIFplbA== 20413\nIHF1YXNp 20414\nINC90LDQug== 20415\nIFN0YXJz 20416\nIHRyaWJhbA== 20417\nIHNlYXRlZA== 20418\nIHdvbA== 20419\nIGNob2w= 20420\nw6Rtw6Q= 20421\nIG91dGJyZWFr 20422\nIGNyZXM= 20423\nIHVuc2VyZXI= 20424\nIO2RnA== 20425\nIHVuZGVyd2F0ZXI= 20426\nIGFzc3VyZQ== 20427\nT09E 20428\nIG5hcHJhd2TEmQ== 20429\nIGVzdGFibGlzaG1lbnQ= 20430\nIGluY29u 20431\nIGRpZmVyZW50ZQ== 20432\nIGV4Y3Vz 20433\nIERpbQ== 20434\n0L7RhQ== 20435\nIExpbmc= 20436\ncm9sb2c= 20437\nIG91dGRvb3Jz 20438\nbmFq 20439\nIGVwaWRlbWlj 20440\nIHVudGVycw== 20441\nIDMwMDA= 20442\nIEdhYnJpZWw= 20443\nIOyXhuuKlA== 20444\nIGVuY2w= 20445\nIE9kZXI= 20446\nIEZvb3Q= 20447\ncGFz 20448\nIFp1aw== 20449\nIHdvcmtmbG93 20450\nIHVucA== 20451\nIGFsbGlhbmNl 20452\nZW5zY2hhZnQ= 20453\nIHlvZ3VydA== 20454\n0LjQvdC1 20455\nIGVydQ== 20456\nIGZpeg== 20457\nIGHFnw== 20458\nIGFwcmVuZA== 20459\nIGN1YWxxdWllcg== 20460\nIGNhcnJvdHM= 20461\nxLFuxLFu 20462\nYWZvb2Q= 20463\nIGZsb29ycw== 20464\nIGtleXdvcmRz 20465\nIHNwb3R0ZWQ= 20466\nIGRyYW5r 20467\nIHBhcmFz 20468\nIMO6bHRpbW8= 20469\nIGhhYmxhcg== 20470\nIHByb3NlY3V0 20471\n7JeQ64+E 20472\nIMOpcA== 20473\nIHN0aWNrZXJz 20474\nIHB1c2hlcw== 20475\na2g= 20476\nIHJlc3RhcnQ= 20477\nIFRodW5kZXI= 20478\n4budaQ== 20479\nIG11aXRh 20480\nIGZveA== 20481\nYXJkZcWf 20482\nIFphY2g= 20483\nIE1pbmVjcmFmdA== 20484\n57g= 20485\nID09PT0= 20486\nIGfDtnJl 20487\nIHN0YW5jZQ== 20488\naWd1bmc= 20489\n2Y7ZkQ== 20490\na8Ok 20491\nIHRlYWNoaW5ncw== 20492\n6YY= 20493\nIGRlY2F5 20494\nIHJpYw== 20495\nb21lbmE= 20496\nINCy0YHQtdC8 20497\nY2h0ZW4= 20498\nIFZlcnQ= 20499\nIO2VnOq1rQ== 20500\nrLTr 20501\nIGNvYw== 20502\nOik= 20503\na2VpdGVu 20504\nIEJB 20505\nZXRoZWxlc3M= 20506\nIGhlYWRxdWFydGVycw== 20507\nIHNwaWtl 20508\nIEJhc2U= 20509\nIDEwMQ== 20510\nIGNvb3JkaW5hdGVz 20511\nIHRhcmQ= 20512\nIGJvaWxlZA== 20513\nIE1vbnN0ZXI= 20514\nIG5vdGVib29r 20515\nIOq0gA== 20516\nIFdha2U= 20517\nIFNldHRpbmc= 20518\n7J207Jc= 20519\nIFN5ZG5leQ== 20520\nIEZpbm4= 20521\nIGxvYmJ5 20522\nIHNlbmlvcnM= 20523\n0L3QuNGF 20524\nYXZhbg== 20525\nIEpF 20526\nIHRyYWZm 20527\ndGhpbms= 20528\nIHNsYXA= 20529\nIENhc3RsZQ== 20530\nqW5n 20531\nIGFsZ3Vub3M= 20532\nIFBlcnNvbmFsbHk= 20533\nIE1hbGU= 20534\n7Yuw 20535\nIEdlbmVyYWxseQ== 20536\nIFBlbA== 20537\nIGRpYXM= 20538\nIGV2b2x2aW5n 20539\naXRvbA== 20540\n0LLQvtGA 20541\nIHBsZWlu 20542\nIGZsaWdodHM= 20543\nIGVsZXZlbg== 20544\nb3dlag== 20545\n4buRbmc= 20546\nIGFrdQ== 20547\nIGdsYW5jZQ== 20548\nIGNvbm5lY3Rpdml0eQ== 20549\nIGJhbGQ= 20550\n0YvRhw== 20551\nIGludGVzdA== 20552\nw6Fn 20553\nIEdSw5w= 20554\naWJsaWNhbA== 20555\nIFBhcGE= 20556\nIHBpdHk= 20557\nIGZhaW50 20558\nIHd1cmRlbg== 20559\nIGxlZ2FsbHk= 20560\nIHByZXk= 20561\nIFNjaWVuY2Vz 20562\nINC/0YDQvtGB 20563\nIHRyYWluZXI= 20564\nIHByb2Jsw6htZQ== 20565\nIGtpbG8= 20566\n0LrQvtCz0L4= 20567\nIGJyaWRnZXM= 20568\nODk= 20569\nIGxhc3RlZA== 20570\nIGVsZWdhbnQ= 20571\nYm93cw== 20572\nIHBhbGFi 20573\nIGRpcmVjdG9yeQ== 20574\nIGJ1bGI= 20575\ncGVvcGxl 20576\nSVg= 20577\nIGdlYg== 20578\nIDY2 20579\nIFRlbm5lc3NlZQ== 20580\nYWhsZW4= 20581\naWV2YWw= 20582\nIGNhdXQ= 20583\nIERhbWVu 20584\ncGxv 20585\naWFuZQ== 20586\n0LDQu9C1 20587\nYXR0YW4= 20588\nINin2YTYsw== 20589\nIHJpc2t5 20590\nIHNsZWV2ZQ== 20591\nIGluY2lkZW50cw== 20592\nIOuwlQ== 20593\nQ28= 20594\nIGFwcGxpY2FibGU= 20595\nIGltcGVyaWFs 20596\nIFBoaWxpcA== 20597\nIFllYQ== 20598\n0LXRgNC+ 20599\nINC/0L7QutCw0Lc= 20600\nw7xuZQ== 20601\n7JiA 20602\nSHVi 20603\ndG9y 20604\nIHNpZ3U= 20605\nY2VuZA== 20606\nIHBvbGl0aWNhbGx5 20607\nIOyCtA== 20608\nIHBhcnM= 20609\nIG91dg== 20610\nIHByaW1laXJh 20611\nIFNoYWg= 20612\nIHNhdHVy 20613\nIGNvbWJ1c3Q= 20614\nIHByb21vdGVk 20615\n7KO86w== 20616\nIHRlbXBsYXRlcw== 20617\nIOuLrA== 20618\nIGhhdWw= 20619\nINGC0LXRgA== 20620\nIHNsaWRpbmc= 20621\nY2VkZW50ZWQ= 20622\nY2hpbGRyZW4= 20623\nTVI= 20624\nIFdlaQ== 20625\nIGLDtnI= 20626\nIHByw7N4aW1v 20627\nYXLDrWE= 20628\nIHNhbXBsaW5n 20629\n0LXQu9C10L0= 20630\nZXNp 20631\nIERhbmllbGxl 20632\nIE9rbGFob21h 20633\n6IU= 20634\n0LXRgdC/ 20635\nIERWRA== 20636\nINCy0YvQvw== 20637\ncm91cw== 20638\nY29ucw== 20639\nIGVuaGFuY2Vk 20640\nIHBhc3Rvcg== 20641\nIFN1ZGRlbmx5 20642\nZmFy 20643\nUEVS 20644\nIE5n 20645\nMTAwMA== 20646\nIGNoZXc= 20647\nIHJ1bW9ycw== 20648\nIEFuYQ== 20649\nIGFubsOpZXM= 20650\nINGD0YHRgg== 20651\nIFBoaWxhZGVscGhpYQ== 20652\n0LXQttC00YM= 20653\nIGVmZmVjdGl2ZW5lc3M= 20654\nw6l0w6k= 20655\nIGRpbmc= 20656\nIHJlbGlnaW9ucw== 20657\nIGFnZWQ= 20658\nemllxIc= 20659\nIFJpYw== 20660\nIEthcA== 20661\nIFBhZ2U= 20662\nIHPDvA== 20663\nIG7DpG1saWNo 20664\nIG1hbmtpbmQ= 20665\nIHJlc3Rpbmc= 20666\nIGluZmx1ZW5jZXM= 20667\nIFNjaHVs 20668\nINC90LXQsg== 20669\nIG1hbmE= 20670\nIGNvbnN1bWVk 20671\nIFBvbQ== 20672\nIGNvbnNlZ3Vpcg== 20673\nIFRoYW5rc2dpdmluZw== 20674\nIEhpbmR1 20675\nbGFpcw== 20676\nIHRocml2ZQ== 20677\nIGNvbnRvdXI= 20678\n0LDRhtC40Y8= 20679\nIGZhbGFuZG8= 20680\nIErDoQ== 20681\nemFu 20682\n0LjRgtGD 20683\naXBoZXI= 20684\namFtaW4= 20685\nIEhhbGxv 20686\nIDE2MA== 20687\nINC+0YHQvtCx 20688\nIG1ldGU= 20689\nIOyVjOs= 20690\nIEJhcmNlbG9uYQ== 20691\nbGV0dGVy 20692\nINCd0LXRgg== 20693\n5Zk= 20694\nIGFkZW3DoXM= 20695\nIGNvb3JkaW5hdGlvbg== 20696\ndW50cw== 20697\nIHNsb3A= 20698\nINC/0YDQuNC0 20699\n7KeA66eJ 20700\nIHF1ZXN0aW9uaW5n 20701\nIGRpZXNlbA== 20702\nIGRlag== 20703\nIGFmZmlybQ== 20704\njZTrnbzqs6DsmpQ= 20705\naWVubmU= 20706\nIGNyYW5r 20707\nIHByZWRpY3Rpb25z 20708\nIHBoeXNp 20709\nY2hzZWw= 20710\nIGNvbWJpbmF0aW9ucw== 20711\nIGV4Y2VsbGVuY2U= 20712\n4bud 20713\nd2lkdGg= 20714\nd2VlZA== 20715\nhOulvA== 20716\nhOuniA== 20717\nIGFsdG8= 20718\nIGRhaXJ5 20719\nIE5vcm1hbA== 20720\ncHBlbg== 20721\nIG9iZW4= 20722\nIGRldmFzdGF0aW5n 20723\nIHBveg== 20724\nIEh1cw== 20725\nbWF6 20726\nIHdhcm5lZA== 20727\nIGRlbms= 20728\nIEF1c3M= 20729\nIHRyYWRlcw== 20730\naGVsbA== 20731\nIHByaW1lcm8= 20732\nIG1pYQ== 20733\n0LLQsNGA 20734\n2KjZig== 20735\nIGtpY2tz 20736\nIGHEnw== 20737\nIE3DvA== 20738\nIGx1Yw== 20739\n0LXQvdC40LXQvA== 20740\nIFN0YW5kYXJk 20741\ncmljZQ== 20742\nIEN1Yg== 20743\nIGdvdQ== 20744\nIEpvw6Nv 20745\n0YPRgdC6 20746\nIGVucXU= 20747\no4w= 20748\nZ2V3 20749\nIO2BsA== 20750\nb3dhbmlh 20751\naWFuaQ== 20752\nIGZha3Q= 20753\n0Y/QvdC4 20754\nIGJlZg== 20755\nIHRodW1ibmE= 20756\nIGNldXg= 20757\nYXBwbGU= 20758\nTkVO 20759\nIGdhZA== 20760\nYXBvbg== 20761\nIEZhbnRhc3RpYw== 20762\nIGNvbmNlbnRyYXRlZA== 20763\nZ2lybA== 20764\nbGVuZQ== 20765\nINCU0LvRjw== 20766\nIMOpdGE= 20767\nYWFu 20768\nIG91dHRh 20769\nIG5hcmM= 20770\nIEJvZHk= 20771\nYnJ1c2g= 20772\nIGxlZ2lzbGF0aXZl 20773\nIE1lZ2Fu 20774\nIG1pc3Rha2Vu 20775\nIE1pc3NvdXJp 20776\nIGxhYmVsZWQ= 20777\n0LvRj9C10YLRgdGP 20778\nIHJlYWxpc2Vk 20779\neW9yc3Vu 20780\nIFNhZmV0eQ== 20781\nIGFjY2VsZXJhdGU= 20782\nIHNhbmN0aW9ucw== 20783\nIHBlZQ== 20784\nIGp1ZWdv 20785\nIHBlcHBlcnM= 20786\nIHdhbA== 20787\n6riJ 20788\nZWxsb3c= 20789\nINC20LXQvQ== 20790\nIGNpbmNv 20791\nINGB0LjRgdGC 20792\nY292ZXJ5 20793\nIGdyYW0= 20794\nIMOpcG8= 20795\nIEJNVw== 20796\naXZvbA== 20797\nIENoZW0= 20798\ndXNlbWVudA== 20799\nIFN1cHBvc2U= 20800\nIOqwgOyngOqzoA== 20801\nIG1pbGxlbm4= 20802\nIFR1bg== 20803\nIG1lZGFs 20804\nIGhhY2lh 20805\nIHN0aW11bHVz 20806\nIGJyaWdodG5lc3M= 20807\nYWllbnQ= 20808\nIEhhbmRz 20809\naW5ldA== 20810\nIGNvYWxpdGlvbg== 20811\nIHJpc2Vz 20812\ncmluYQ== 20813\nIHNjb290 20814\nIGRlZmVuZGluZw== 20815\nIGludmVycw== 20816\nIGhpbGxz 20817\nIGZ1bGZpbGxlZA== 20818\nbGxpZQ== 20819\nIGFkb2xlcw== 20820\nIENoYXNl 20821\nIEpK 20822\nIG5ldWVu 20823\nIFRydQ== 20824\nIGluaGVyaXQ= 20825\nIHNpeHR5 20826\nIEV4cA== 20827\nIENsYXk= 20828\n0L7RgdC+0LE= 20829\nYXJuYQ== 20830\nIEltcGVyaWFs 20831\nINGN0YLQsA== 20832\nIHNvY2lhbGx5 20833\nYXR5 20834\nb2R5bmFt 20835\nIHJpYnM= 20836\nb21pYw== 20837\nIFRvbA== 20838\n0L7Qu9C2 20839\nIDE5OTg= 20840\nIGZyYW0= 20841\nIHJhbmtz 20842\nINCx0YPQtNGD 20843\nIENvbG9u 20844\nSHo= 20845\nIGFjY29tbW9kYXRl 20846\nIGV4cGxvZGU= 20847\n7YSw6w== 20848\nSEFFTA== 20849\nIEhhcnQ= 20850\nINC20LjQt9C90Lg= 20851\n5qE= 20852\nIGRlbGljYXRl 20853\noNeX 20854\nIHRvZnU= 20855\nIGFjaGlldmVtZW50cw== 20856\nIFNvcg== 20857\nIGFncmVlbWVudHM= 20858\nIDU3 20859\nIHRhbXA= 20860\nIGZyYW7Dp2Fpcw== 20861\nIGhlcmJz 20862\nY29ybg== 20863\nIGtvbms= 20864\nQU5B 20865\nIFFp 20866\nIHByw7Nw 20867\nIHRpZ2Vy 20868\nIOuRmA== 20869\nxINt 20870\nIGFwcHJlbnQ= 20871\nYWhhbg== 20872\nIHJ1bGluZw== 20873\nIHRzcA== 20874\nIHR3aXR0ZXI= 20875\nIHRlZW5hZ2Vy 20876\nYnVz 20877\nIO2S 20878\nIEFtZW5kbWVudA== 20879\nIHRhcHBpbmc= 20880\nIEFQSXM= 20881\nIG1hdGNoZWQ= 20882\n66m0 20883\nV0E= 20884\nIEJlYXV0eQ== 20885\nIGluZXZpdGFibGU= 20886\nIGdhc2Vz 20887\nINm+ 20888\naGlnaA== 20889\nIE9wdA== 20890\nIHByZWRvbWlu 20891\nz4HPjA== 20892\nIHR1YmVz 20893\nIOyVoA== 20894\nIEFh 20895\nb21ldG93bg== 20896\nIElN 20897\nIGRlc2Fy 20898\nw6RyZW4= 20899\nINC80LDRgQ== 20900\nIE3DtmdsaWNo 20901\nIHJlbnRhbA== 20902\nIO2VqOq7mA== 20903\nIERpYW5h 20904\nIGF1dGlzbQ== 20905\nIFB1ZXJ0bw== 20906\nxLFsZA== 20907\nIGZhbGFu 20908\nIGRyZWFtaW5n 20909\nIGd1dGU= 20910\nINC60LDQvA== 20911\nIHdyZWNr 20912\nIHN0b3J5dGVsbGluZw== 20913\nIExlZ2VuZA== 20914\nIFVrcmFpbg== 20915\nINC/0YDQvtC40YE= 20916\nIFNL 20917\nIO2WiQ== 20918\nIMWbd2k= 20919\nIEJlbGlldmU= 20920\nIG1vc3RyYXI= 20921\nIFRvZGQ= 20922\nIE5pZ2Vy 20923\naWN0aW5n 20924\naGFyZA== 20925\nOi8v 20926\naXJhYmxl 20927\naWdhdGlvbg== 20928\nIE1lbWJlcnM= 20929\nIOygnO2SiA== 20930\nIGRpc2NvdXI= 20931\nn70= 20932\ncmlrYQ== 20933\nIERO 20934\nIEZpZg== 20935\nIENhcGl0YWw= 20936\n0YDQvtC8 20937\nIFNhbnM= 20938\neXVu 20939\nIHBpbG90cw== 20940\nIHRyYXQ= 20941\nIG55dA== 20942\nIOuvvA== 20943\nIGV4cG9uZW50aWFs 20944\nIGVtZXJnZQ== 20945\nIHRyYWplY3Rvcnk= 20946\nINC/0L7Rh9C10LzRgw== 20947\nIHNlYWxlZA== 20948\nYXR0aQ== 20949\nIHdpZGVz 20950\nINC+0LPRgA== 20951\naWFuY2Vz 20952\nIHdpdG5lc3NlZA== 20953\nT3I= 20954\nb3Np 20955\nIEpvZWw= 20956\nb25hbA== 20957\nIEludGU= 20958\nY2VkZXM= 20959\nIEdvdHRh 20960\nYW5pdW0= 20961\nIGZlbWFsZXM= 20962\nIExlYmVucw== 20963\nIG1vaXN0dXI= 20964\nIFNpbXBsZQ== 20965\nIERvY2g= 20966\nYXLDoQ== 20967\nIGdlc2VoZW4= 20968\nVVNU 20969\nxqFp 20970\nIGNsYXNzaWZpY2F0aW9u 20971\nIGRpYWdvbmFs 20972\nIHBlcm1ldHQ= 20973\nY29tcA== 20974\nINin2YTYrQ== 20975\nIE1hbGF5cw== 20976\nIGdlaMO2cnQ= 20977\nIHBvcHBlZA== 20978\nIGNvbnRhY3RlZA== 20979\nINeb15w= 20980\nIDE0MA== 20981\nIGFkYXB0YXRpb24= 20982\nIG1hbnVz 20983\nIHR1cmtleQ== 20984\nIHByZWFjaA== 20985\nYnJpZ2h0 20986\nIGRvd25z 20987\nIHVucHJlY2VkZW50ZWQ= 20988\nIG1pZ2h0eQ== 20989\nIGNhdGVy 20990\naXR0aQ== 20991\nZ3M= 20992\nIERlcHV0eQ== 20993\nd3JpdGU= 20994\nIEJsZXNz 20995\nw6Fj 20996\nIHN1bW1pdA== 20997\nIOuPvOyalA== 20998\nIHRob3VnaHRmdWw= 20999\nIHNocmVk 21000\nc2luZ2luZw== 21001\nINC70YPRh9GI0LU= 21002\nIHllbg== 21003\nIHZpYnJhbnQ= 21004\nIFdhbHRlcg== 21005\nIGhvc3Rz 21006\nIGFtYnVs 21007\nIGludmFzaW9u 21008\nb2dhbg== 21009\nIHJlYXNvbmluZw== 21010\nIHN1Y2M= 21011\n0LvQtdC60YI= 21012\nIGZhbGE= 21013\nIGtpbmdz 21014\nIGdvaW4= 21015\nIGNhbGli 21016\nIEdSw5xORU4= 21017\nb3Rlcg== 21018\nIGVpbno= 21019\nIGluc3VsaW4= 21020\niqg= 21021\nIHNjYWxpbmc= 21022\nIENvcm4= 21023\naHlk 21024\nIG1hdHRl 21025\nUEw= 21026\nIGFsaWVucw== 21027\nIFNlZw== 21028\nZXN0aQ== 21029\nYXN0aWNz 21030\nIHdhcm1lcg== 21031\nIGluZ2Vu 21032\nIE1M 21033\nIHJvZGU= 21034\nIEV5ZQ== 21035\nYmVpdHM= 21036\nIEJhcm4= 21037\nwrss 21038\nIENodWNr 21039\nIHByb2ZpdGFibGU= 21040\ndWd1ZXNl 21041\nIEFyYWJpYQ== 21042\nIGNvY28= 21043\nIHB1ZWRv 21044\nIGluZmxhbW1hdGlvbg== 21045\nY2xpcA== 21046\nIHRhYmxlc3Bvb25z 21047\nIOygkQ== 21048\nIFN3ZWQ= 21049\nIGFuYXQ= 21050\n7Iig 21051\nIGFycmli 21052\nIGRhbmNlcg== 21053\nIENhcnRlcg== 21054\nIG1hZ25pZmlj 21055\nc3RvcmU= 21056\nIGZhZGU= 21057\nIGFjY29tcGFueQ== 21058\nIHdhaHI= 21059\nIHllYXN0 21060\nIG1pbmVyYWw= 21061\nIGxlZ2lzbGF0dXJl 21062\naXJvcw== 21063\nIGNyb3dkZWQ= 21064\n0YDQsNGI 21065\nb2NhZG8= 21066\n7Ja07JW8 21067\nIO2bhA== 21068\nIEJhcnJ5 21069\nbWFzdGVy 21070\nIG5pY2tuYW1l 21071\nICIuLi4= 21072\nIFJz 21073\nIE1vb3Jl 21074\nIHZlbnVl 21075\nINCx0YM= 21076\nbGlob29k 21077\nIEFnZW5jeQ== 21078\n0LvQvtCy 21079\nIGthaA== 21080\nIOyGjOumrA== 21081\nIG1hcnNo 21082\nIGluY29ycG9yYXRlZA== 21083\nYW50d29ydA== 21084\nIGtpbWNoaQ== 21085\nIHdvbw== 21086\nIGRpc3RyYWN0ZWQ= 21087\nZXJpZXM= 21088\nIGluZm9ybWFjacOzbg== 21089\nIENob29zZQ== 21090\nIEphZGk= 21091\nIGFuYWxvZ3k= 21092\nc2F5 21093\ndWZmbGU= 21094\nYm9r 21095\nIGFjaWRz 21096\nIGFjcXVpc2l0aW9u 21097\nIHZhcmlhbnRz 21098\nIHBhc3NpZXJ0 21099\n7J2064KY 21100\ncnVjdGl2ZQ== 21101\nYnJpZw== 21102\nIOOAjA== 21103\nZXBoZXI= 21104\nIHBI 21105\ndXRsaWNo 21106\nIHJlbGll 21107\ndWl0ZQ== 21108\nIHJlY2VwdGlvbg== 21109\nIGNvaA== 21110\nIFByZXA= 21111\nIGFudGljaXBhdGU= 21112\na2Vl 21113\nIGRlc2lnbmF0ZWQ= 21114\n0Y/RgtC4 21115\nIEtvcg== 21116\nIEFuaW0= 21117\nw7xobA== 21118\nIFdoaXQ= 21119\nIHVuY292ZXI= 21120\nIE1heWE= 21121\nINGC0L7Qs9C00LA= 21122\nsJU= 21123\ndXRlbmFudA== 21124\nIOyWvOs= 21125\nIGZvcmVzdHM= 21126\nIG1lbWU= 21127\nIGRpc3Rpbmd1aXNoZWQ= 21128\nIE1hcng= 21129\nIExpb24= 21130\nIHNlcnZhbnRz 21131\nIERpYW0= 21132\nIFBvbGljeQ== 21133\njbw= 21134\nIHRyaWdnZXJlZA== 21135\nYWJpbGly 21136\nIOydkQ== 21137\nIG5lZ290aWF0ZQ== 21138\nIGZleg== 21139\nIGVydw== 21140\nIHZhcmllcw== 21141\nIGplbWFuZA== 21142\nIGRpc2NoYXJnZQ== 21143\n0YHRj9GH 21144\nIFBBUg== 21145\nIEFmZmFpcnM= 21146\nIHZvdGVy 21147\nIGF0ZW4= 21148\nIGNyb2lz 21149\nb2JpbA== 21150\nIE9vcHM= 21151\nIEFyYw== 21152\nIEhlYXRoZXI= 21153\nYW5rYQ== 21154\nIHNpbXBsZXM= 21155\nzr/OvQ== 21156\nIj4= 21157\nIGNob3Jkcw== 21158\nIFNhbmRlcnM= 21159\nIOu2hOs= 21160\nQmVu 21161\nIGRhcsO8YmVy 21162\naWxpYW5z 21163\nIG9yZGVyaW5n 21164\nIE1hbmg= 21165\nIGtpbG9ncmFt 21166\nIGthcsWf 21167\nIGdyYXNw 21168\nIGdob3N0cw== 21169\nYWxlbg== 21170\nIEplZGk= 21171\nINCx0LvQuA== 21172\nIGRvd25sb2FkZWQ= 21173\nIGNvbmR1Y3Rpbmc= 21174\nIEhhaw== 21175\nIHJlc2VhcmNoZXI= 21176\naWxhbg== 21177\nZ29vZA== 21178\nIEhhbm5haA== 21179\nIGTDvMWfw7xu 21180\nIE1lc3NpYWg= 21181\ndWl0eQ== 21182\naW9uYQ== 21183\nIHByb2JhYmxl 21184\nIFlF 21185\nIGluZGVwZW5kZW50bHk= 21186\nIGJ1ZmZlcg== 21187\nYnVybg== 21188\nb3VyZA== 21189\nIE1jSw== 21190\nIGxpbmd1 21191\ndWplbXk= 21192\n0LXRgNGC 21193\nIGludHVpdGl2ZQ== 21194\nIGNyYWNrcw== 21195\nYXBwcm9wcmk= 21196\nbnR5 21197\nIGdlZW4= 21198\nIGxlbmQ= 21199\nIGNlcnRpZmljYXRpb24= 21200\nSURT 21201\ndW50ZXI= 21202\ncGVlcw== 21203\nIHRydW1w 21204\nIGJhbmtydXB0 21205\nIGZlYXM= 21206\n6Jc= 21207\nIGR1xbw= 21208\nIHZpcnVzZXM= 21209\nIDU4 21210\nZ29k 21211\nINC20LXQuw== 21212\nIHN0YWxr 21213\nSW5k 21214\nYWNoaQ== 21215\nIENG 21216\nIENvbmQ= 21217\nIHNhbmN0 21218\nIGNvbnRlbg== 21219\nIGZyZWVk 21220\nIFJU 21221\nIG1lbnRvcnM= 21222\n7KGx 21223\nIHBvcnRhYmxl 21224\nIFBhdWxv 21225\ncmFuZQ== 21226\nSEFIQQ== 21227\nIFNlY3Rpb24= 21228\n54Y= 21229\naHl1bg== 21230\nIM6tz4c= 21231\nIFB1Yg== 21232\nIEluZGVwZW5k 21233\nIGNvbXBvdW5kcw== 21234\nINGB0Ys= 21235\nIG1lc3NhZ2luZw== 21236\nIGRlZGljYXRpb24= 21237\nIG5vdGljaW5n 21238\nIGRldm90ZWQ= 21239\n0Y7RgtGB0Y8= 21240\nIHNuYWtlcw== 21241\nIGJhdHRsZWZpZWxk 21242\ncGVycw== 21243\nIGRlbGE= 21244\nOTI= 21245\nIGhhaQ== 21246\naWxsw6Q= 21247\nw6lyZXI= 21248\nZXZlcnk= 21249\nIHJlc3BvbnNpdmU= 21250\n15nXlQ== 21251\nb3Bm 21252\n6Yk= 21253\nirg= 21254\nQmVjYXVzZQ== 21255\nIHRvdXJpc20= 21256\nIOq3uOqyjA== 21257\n15XXpg== 21258\nIGNhbnM= 21259\nc3TDvHQ= 21260\nIGRvbm5l 21261\nIERpb3M= 21262\nIFViZXI= 21263\nYWN0b3J5 21264\nIG9yaWVudGVk 21265\nIEhlcm0= 21266\nIHBhdHJvbg== 21267\ndXJm 21268\nYmVp 21269\nIHByb2dyYW1h 21270\nIE9oaA== 21271\nZ2VuZXI= 21272\nIGZpc3Q= 21273\nIFdlbmR5 21274\nIGFuZGE= 21275\nIGd1ZXNzZWQ= 21276\nIGZyZWFr 21277\nIEtpbmdz 21278\nY2hvb2w= 21279\nIG9mZmxpbmU= 21280\nIEluZGlhbmE= 21281\nIEFsbGlhbmNl 21282\nIDUz 21283\nIHBhcnRpY3Vs 21284\nIEZvY3Vz 21285\nIGluaGFiaXQ= 21286\nIOqwmeydgOuNsA== 21287\nIE1jRw== 21288\nb3dza2k= 21289\nIOydtOqxtA== 21290\nIHBhxYRzdA== 21291\n0L7QvdC4 21292\naXR0YQ== 21293\nIGNvbmZpcm1hdGlvbg== 21294\nIEJyb29rbHlu 21295\nIG5vb2RsZQ== 21296\nZnVuZA== 21297\naXR1ZA== 21298\nIGdyYW5kcGFyZW50cw== 21299\nIGJhcmJlY3Vl 21300\nzrXOuc+C 21301\nIOE= 21302\nIGJhbGxvdA== 21303\nIFZldGVy 21304\nIHBpcGVz 21305\naWdpb3Vz 21306\nIEdyYXBo 21307\nZXN0ZWQ= 21308\nIOu4jOs= 21309\nIEtF 21310\nIGVpbnM= 21311\nIGhhdHJlZA== 21312\nIGRhbmc= 21313\nZWVlZQ== 21314\nIGFyY2hhZQ== 21315\nIEplc3Nl 21316\nIGRldGVjdGVk 21317\nIHNlbmk= 21318\nYnVyZ2g= 21319\nIGRpc3BsYWNlbWVudA== 21320\nIGRvcA== 21321\nIGNvbmRpdGlvbmluZw== 21322\nINC90LXRgdC60L7Qu9GM0LrQvg== 21323\nIGRpc3R1cmJpbmc= 21324\nUEg= 21325\nIHRoaW5uZXI= 21326\nIHdvdW5kZWQ= 21327\nIEN1YW5kbw== 21328\nIGN1c2hpb24= 21329\nIHdoaXRlcw== 21330\nIHByZWZlcmVuY2Vz 21331\nIOykgOu5hA== 21332\nIGthxbw= 21333\nIEdhdGU= 21334\nIFBhdGg= 21335\nZGxlcw== 21336\n4LiE4Lij 21337\naW1vcmU= 21338\nIOuztOyXrA== 21339\nIGRpc2NpcGxpbmVz 21340\n4buP 21341\nIG1lc21h 21342\nIOyDiOs= 21343\nIOyLrA== 21344\nIGdpbmc= 21345\nIHVtYnJlbGxh 21346\nSUdIVA== 21347\nIHBlbnNpb24= 21348\nIGNvbWJpbmluZw== 21349\nU1M= 21350\nIHJlY3RhbmdsZQ== 21351\n4buHdA== 21352\nIHByb3hpbQ== 21353\nIENvdw== 21354\nuIw= 21355\nIGludGVudGlvbmFs 21356\nIGRlY2lk 21357\nINGB0LrQsNC2 21358\nIFVtYQ== 21359\naWFzbQ== 21360\nYnV6 21361\nIGRlYnJpcw== 21362\nIGNhc3M= 21363\nIFByb3A= 21364\naXNrYQ== 21365\n66Cl 21366\nZXN0ZXJvbA== 21367\ndXNzaWFu 21368\n7J20656R 21369\nIHVubGltaXRlZA== 21370\nIGFkbWlyZQ== 21371\nIHRpZ2h0bHk= 21372\nIGdlbm9tZQ== 21373\nIEp1bmlvcg== 21374\ndmVuaXI= 21375\nZ3Vz 21376\nIGPEgw== 21377\nIFZsYWQ= 21378\nIO2C 21379\nIHJlbGF0aXY= 21380\naW5jaQ== 21381\nIGF1bnF1ZQ== 21382\nIEJveXM= 21383\n0YbQuNC+0L0= 21384\nIFN3aXNz 21385\nIHBoeXNpY2lhbnM= 21386\nIO2PiQ== 21387\nIFBFVA== 21388\nIHdvdW5kcw== 21389\nYWJvdXQ= 21390\nw6Bp 21391\nb256 21392\ndXJpdGllcw== 21393\nINGD0LLQuNC0 21394\nIG1lbnRhbGl0eQ== 21395\nIHZhcmlhbmNl 21396\nIHNlZ3VuZGE= 21397\nIHZvbGNhbm8= 21398\nYWxpZQ== 21399\n4KWH 21400\nIHRpbGVz 21401\nIFRlcnJ5 21402\nINin2YTZhNmH 21403\nIGNhbm9u 21404\nIHNjYXR0ZXJlZA== 21405\ncHRvbg== 21406\nIGRlZmluaXRpb25z 21407\nIGFsZ2VicmE= 21408\nb3Rlbg== 21409\nYWJsbw== 21410\naWp1YW5h 21411\nIHdyYXBwaW5n 21412\nIHNlc2FtZQ== 21413\nINC90LDRh9C40L3QsA== 21414\nIEFsZg== 21415\nINCg0L7RgdGB 21416\nb3Jubw== 21417\nIGFua2xl 21418\nIHNwZWNpYWx0eQ== 21419\nIGF0dGVtcHRpbmc= 21420\naWxpYXRpb24= 21421\nIDE5MjA= 21422\nIHBoZW5vbWVuYQ== 21423\nIFByb2R1Y3Q= 21424\nIEJ1Y2s= 21425\nIEF3dw== 21426\nc2Vlbg== 21427\nIHZvaWQ= 21428\nIEZyYW5rbGlu 21429\nIGFkdm9jYWN5 21430\nIFNlcA== 21431\nIGNvb2xlc3Q= 21432\nINGB0YDQsNC30YM= 21433\nIFF1YW5k 21434\nIDkwMA== 21435\nIFRyYWQ= 21436\nZGllcw== 21437\nIGhhc2g= 21438\nIHBvdHM= 21439\nIHNhZGx5 21440\nIHZpYWJsZQ== 21441\nIFRpZ2Vy 21442\nIE9ORQ== 21443\nIG5ldXJvbnM= 21444\nb3dhbmll 21445\nxJc= 21446\nIFNoYXI= 21447\nIExhbmRlcw== 21448\nIGNvbmZlcmVuY2Vz 21449\nIGNyZWRlbnRpYWw= 21450\nIGxpbWU= 21451\naW5lZQ== 21452\neGl0 21453\ncGF5 21454\nIGluY29ucw== 21455\nID4+Og== 21456\nIO2emOs= 21457\nIGxlc3Nlcg== 21458\nIHNwaWxs 21459\nIHByZW1pc2U= 21460\nIDM2NQ== 21461\nIEhvc3Q= 21462\nIHRvbWFy 21463\n15DXnA== 21464\n67KI 21465\nIFdoYXRz 21466\nIGxpZ2h0d2VpZ2h0 21467\nIE1hcA== 21468\nZmlh 21469\nZWxsc2NoYWZ0 21470\nIHZlbmRvcnM= 21471\ndWVzdG8= 21472\nIE1pc3Rlcg== 21473\nINCf0YDQuA== 21474\naG1h 21475\nIGludGVudGlvbmFsbHk= 21476\nIFRhbmc= 21477\nIGlkZW50aWZpY2F0aW9u 21478\nIGV0Y2V0ZXJh 21479\nIE5lZQ== 21480\nINGC0YDQuA== 21481\n6re4 21482\nIGNyeXB0b2N1cg== 21483\nIGluaGFsZQ== 21484\nIGFkZGljdA== 21485\nIG1hdQ== 21486\nINGC0LDQutCw0Y8= 21487\nIOuyhA== 21488\nIGNvbXByYXI= 21489\naWVkemllxIc= 21490\nINC+0YLQvdC+ 21491\nIGJlZ2lubmVy 21492\nINC80YPQtg== 21493\nIG9ic2M= 21494\nIGxpbWl0aW5n 21495\nYXNjdWxhcg== 21496\nIGluc3BlY3Rpb24= 21497\nYWNp 21498\nIHJlam8= 21499\nTXVz 21500\nIHphdGVu 21501\nIHN6Y3o= 21502\nIE1hZHJpZA== 21503\nIHZhcmlldGllcw== 21504\nIGVzdMOg 21505\nIFNoYWtlcw== 21506\nIGtpdHM= 21507\nIGFkbWluaXN0ZXI= 21508\nIGxhdmE= 21509\nIGfDpQ== 21510\n16rXmQ== 21511\nIFdheW5l 21512\nIGluc3RhZ3JhbQ== 21513\nIHJhdGVk 21514\ncGFwZXI= 21515\nIGJpbGQ= 21516\nIHByZXRlbmRpbmc= 21517\nIG9ic2VydmluZw== 21518\nINGB0LDQvNC+0Lw= 21519\nIHRyb3I= 21520\nIG9yZ2FuaXNtcw== 21521\nIGZhbHRh 21522\nIGhvbWV0b3du 21523\n57E= 21524\nIO2L 21525\nIGNoZWc= 21526\nIOyh 21527\nIGNvbW1h 21528\naXPDqQ== 21529\nIGxpa2VsaWhvb2Q= 21530\nYXZvcmVk 21531\nIGdlbGRp 21532\n0L3QuNC60L7Qsg== 21533\nIG1lZGlv 21534\nIGpha2ll 21535\nIEp1cA== 21536\nIGdyZWVuaG91c2U= 21537\nIHNwaXQ= 21538\n0LrQvtC1 21539\nINC60LDQtg== 21540\nIEdyYW0= 21541\nIENvbmZlcmVuY2U= 21542\nIGRlZmljaXQ= 21543\nc8Sxbg== 21544\naW5zZQ== 21545\ndcSf 21546\nIHJpY2h0 21547\nIGNvaW5jaWRlbmNl 21548\nIGV1cm9w 21549\nIGJ1dHRlcmZseQ== 21550\ncHJlYWQ= 21551\nIOyWvA== 21552\nIHdhdmVs 21553\nIEluZmlu 21554\nIFBsYW5ldA== 21555\nIHNlbGZpZQ== 21556\naWVudHJhcw== 21557\nIGFycm9n 21558\nb3Nlcg== 21559\naWRhbA== 21560\noNeX16DXlQ== 21561\nw7x0w7xu 21562\nIGZyZXNobWFu 21563\nIE1hY2hpbmU= 21564\nz4PPhA== 21565\nIERpYQ== 21566\n7J2064uk 21567\nbmVh 21568\nIGxpc3Rpbmc= 21569\nIGNvbmZpZ3VyZQ== 21570\ndXRvcg== 21571\nVXA= 21572\ndHNjaGFmdA== 21573\ncmnDqHJl 21574\nIHVwd2FyZHM= 21575\nINGF0L7Rh9GD 21576\nIHN3ZWVw 21577\nQnI= 21578\nIGV4cHJlc3Npbmc= 21579\nIHVuaGFwcHk= 21580\nIG1hbmRhdG9yeQ== 21581\nZ2VuZGVy 21582\nIEHDrQ== 21583\nIGluZGljYXRvcnM= 21584\nIG9pbHM= 21585\nbm90ZQ== 21586\nIHNlZ3Vy 21587\n0L7QttC10YI= 21588\neW5hc3R5 21589\nIGRpc3RhbmNlcw== 21590\nIG1lcmdl 21591\nQkVSVA== 21592\nIHN1cnJlbmRlcg== 21593\nIGJ1YXQ= 21594\nIEF3YXJkcw== 21595\nIHNlw7Fvcg== 21596\nb2RveA== 21597\nIGZsYXZvdXI= 21598\nIGFiZG9t 21599\nIGNvbmZpZ3Vy 21600\nODY= 21601\nIERJWQ== 21602\nIHJpZ2lk 21603\nsJg= 21604\nIGNvcnBvcmF0aW9u 21605\nIGdyb29t 21606\namF3 21607\nIE5lYXI= 21608\n0LjQu9C+ 21609\nIG9wZXJh 21610\nIElubm92 21611\n0LjRgNCw 21612\nk7E= 21613\nIHNwZWNpZmllZA== 21614\nIGNvc20= 21615\nIEZyZWVkb20= 21616\nIGNsb3du 21617\nIE5lbQ== 21618\nINCy0L7Quw== 21619\n0ZHQvQ== 21620\nIGNoYXJnZXI= 21621\n4LmB4Lil 21622\nIGluZmx1ZW50aWFs 21623\nw6RzaWRlbnQ= 21624\n6aQ= 21625\nIOyEoOs= 21626\nIHZvbHVtZXM= 21627\n5pA= 21628\nIG91dHJhcw== 21629\nIFR3aXRjaA== 21630\nIGZvdW5kaW5n 21631\nIGF3aGlsZQ== 21632\nIGNvaWw= 21633\n6rCZ 21634\nIGPhuqM= 21635\nIFRocm93 21636\nIEhlbmNl 21637\nb21tdA== 21638\nIEJlbmphbWlu 21639\n0LPQu9GP0LQ= 21640\nVGltZQ== 21641\nb2JpYw== 21642\nIG1vdXI= 21643\nIGRyZWFk 21644\nIEzDoA== 21645\nIENoaWxl 21646\nIHByZXZhbA== 21647\nIHZhaW4= 21648\nIGFydMSxaw== 21649\nIHByZXNlcnZlZA== 21650\nINC+0YLQtA== 21651\nIHdhcmVob3VzZQ== 21652\nIGJlc3Rl 21653\nIFNldmVyYWw= 21654\nIFNpdHVhdGlvbg== 21655\nIGNhcmRib2FyZA== 21656\nVG9k 21657\nZXJuYQ== 21658\nIGdhcmFudA== 21659\nIGdlc3R1cmU= 21660\nIGhlbg== 21661\nIHNwZWxsaW5n 21662\nb3NleHVhbA== 21663\nIGFubmU= 21664\nIG1pY2U= 21665\nIE1laW5l 21666\nY2FyZA== 21667\nIHJlYmVsbA== 21668\nIGNlcnRv 21669\nIOycoOs= 21670\nIHZlcnNjaGllZA== 21671\nIEJvcw== 21672\nIGludmVudGlvbg== 21673\nIHRyemU= 21674\nIG1hbmnDqHJl 21675\nIENoYWQ= 21676\nIHNwcmU= 21677\nIG9yZ2FuaXNhdGlvbnM= 21678\nIHBvb3JseQ== 21679\nIGFudGVyaW9y 21680\nIHN0YWly 21681\n0LrRgA== 21682\nIGF0b21pYw== 21683\nIHN5bXBhdGg= 21684\nIGNvbnRpbnVhbGx5 21685\nIGtsZWluZQ== 21686\nw6h0ZQ== 21687\n0LjRiQ== 21688\nzr/Pgg== 21689\ncGV1dA== 21690\nIHJlcG9zaXQ= 21691\nIGVudHJh 21692\nRW0= 21693\nIGZpbmFuY2luZw== 21694\nINC80L3QvtCz 21695\nIHRoZXNpcw== 21696\nIENvbXB1dGVy 21697\nZWF1 21698\nIFRyZWU= 21699\nIGJyaWRl 21700\nb25zaWV1cg== 21701\nc2hpcmU= 21702\nd2lj 21703\nREU= 21704\nIOyImOs= 21705\nIGFjb20= 21706\nIFBP 21707\nZXJzY2g= 21708\nINC/0L7QvNC+0Yk= 21709\nIEFybWVu 21710\nIOyjvQ== 21711\nIHpvcg== 21712\nIHByaW50cw== 21713\nIERhc3M= 21714\nIGR1cmFibGU= 21715\nIFRyYW5zcG9ydA== 21716\n7J6Q6rCA 21717\nINC70LXQsw== 21718\nIGTDqXQ= 21719\nw7RsZQ== 21720\nYW1vdXM= 21721\nWU4= 21722\nIGNsaWZm 21723\nIGdyYW1tYXI= 21724\nINCf0L7RjdGC0L7QvNGD 21725\nIGzDoG0= 21726\nZXNjaA== 21727\nIG1pc2VyYWJsZQ== 21728\nIHZvbHRz 21729\nIENhZA== 21730\ndWthbg== 21731\n0YLQuNCy 21732\ncnVzdA== 21733\nIOyYrOudvA== 21734\nIHZlcms= 21735\nIGNoaWNrZW5z 21736\nIFlvbw== 21737\nIG91dGZpdHM= 21738\nY29kZQ== 21739\nIGhpZXJhcmNoeQ== 21740\nbmV0ZXM= 21741\nIGNvdW50ZXJwYXJ0 21742\nIHTDtGk= 21743\nIHRlZA== 21744\nIEJhcnQ= 21745\nIOudvA== 21746\nIEdlbmF1 21747\nIGluY29taW5n 21748\nIEFCQw== 21749\ncmlxdWU= 21750\nINC+0YLQvw== 21751\ncXVhbA== 21752\nIGluY2VudGl2ZQ== 21753\nIGlocmVu 21754\n16DXmQ== 21755\nbG9l 21756\nIDE5MzA= 21757\nIGJhcmc= 21758\nIGRpY3Rpb24= 21759\nIMO2bmNl 21760\nSU5T 21761\nIHJlaA== 21762\naXNpYWo= 21763\nbW91dGg= 21764\nIHNjb3Jpbmc= 21765\nbMSxaw== 21766\nIOyVhOyjvA== 21767\nT1JJQQ== 21768\nIEVzdGFkb3M= 21769\nIGNvbXBhbmlvbg== 21770\nIGFzc2VtYmxl 21771\nIHB1bmlzaGVk 21772\nIGl0YWw= 21773\nIHByZXZlbnRz 21774\naXN0ZXM= 21775\nIEtlbnR1Y2t5 21776\nIGxvY2F0ZQ== 21777\nIGZhc3Rpbmc= 21778\ng4A= 21779\nIFNlYg== 21780\nIENyb3du 21781\nb3BpYQ== 21782\nIHdoaXA= 21783\ndXN6 21784\n0LrQsNC80Lg= 21785\nIGRhdGFiYXNlcw== 21786\nIHByb3NlYw== 21787\nIDE5OTc= 21788\nIOyCtOynnQ== 21789\nIFNvbGFy 21790\nIFB1ZXM= 21791\nIFplbg== 21792\nb2xsbw== 21793\nIEd1cnU= 21794\nIHNxdWVleg== 21795\nINCX0LA= 21796\nIMSN 21797\nY2VwdGlvbnM= 21798\nY2Nh 21799\naXphYmxl 21800\nbWFuZA== 21801\nIGJyZWFrdGhyb3VnaA== 21802\nIHRhYmxlc3Bvb24= 21803\nIFNFQw== 21804\naWto 21805\nIFPDo28= 21806\nINC/0LvQvg== 21807\nYW1lbg== 21808\nIHByYWM= 21809\nIGRhcmxpbmc= 21810\nIHRhbGxlcg== 21811\nIHJlbmRlcmluZw== 21812\nIOyasOumrOqwgA== 21813\nIM+EzrfPgg== 21814\nIG3Dow== 21815\nIGVzb3M= 21816\ndWVyZG8= 21817\nINGB0YfQuNGC 21818\nYWxsZXI= 21819\n7JeI7Ja07JqU 21820\nIG1pbGxvbmVz 21821\nbGVyaW4= 21822\nIHBlZ2Fy 21823\nb25uZQ== 21824\nIGVucm9sbG1lbnQ= 21825\nIGxpZWd0 21826\nIGJvYQ== 21827\nd2nEmQ== 21828\nYnNw 21829\nIGN5Y2xpbmc= 21830\nIEJlcm5pZQ== 21831\nIDE5ODk= 21832\nINC00LDQu9GM 21833\nIERha290YQ== 21834\nINGB0LLRj9C3 21835\nIENQ 21836\nIHN0YXJl 21837\n7YKk 21838\nIHByb3NwZXJpdHk= 21839\nIGFycmFuZ2VtZW50cw== 21840\nIGFycml2aW5n 21841\nbcOk 21842\nIGtheWFr 21843\naXB0 21844\nIHBhcmRvbg== 21845\nIHJlbGF0 21846\nIHZlcnN0ZQ== 21847\nIEZpZw== 21848\nIGZvaWw= 21849\nIFRhbGtpbmc= 21850\ncGVhcmU= 21851\nIG5vaQ== 21852\nINC/0YDQuNGI 21853\nIGhvY2tleQ== 21854\nIGFkbw== 21855\nIE9VVA== 21856\nNjc= 21857\nIGhvcm1vbmVz 21858\nIEF2ZW51ZQ== 21859\nIFN1cGVybWFu 21860\nIHByZXNjcmlwdGlvbg== 21861\ndWJlcm5ldGVz 21862\nQ0w= 21863\nb3RpdmU= 21864\nTklT 21865\naWVuZW4= 21866\nIHNhZG5lc3M= 21867\nIFZpdA== 21868\nVHk= 21869\nIHN0YXJ0ZXI= 21870\nIGJlZGU= 21871\nIGZvdW5kYXRpb25z 21872\nIHNvcmU= 21873\n0YnQtdGB0YLQsg== 21874\n7Jqw6w== 21875\nINGH0YPQsg== 21876\nbGluaw== 21877\nIG1hbmV1 21878\nd29ya2luZw== 21879\nw6Bu 21880\nIEF0dGFjaw== 21881\nIENhcnQ= 21882\ndmVpcw== 21883\nIFJlc3A= 21884\nZW5zaW5n 21885\nIOyii+yVhOyalA== 21886\nIGVzY3VjaA== 21887\nIFJOQQ== 21888\ngrQ= 21889\nIGFkb3A= 21890\nIGJlbmRpbmc= 21891\n2LnYrw== 21892\nIG1hbmFnZXM= 21893\ndXNw 21894\nIHRhcnQ= 21895\nIHJvdXRlcg== 21896\nQm8= 21897\nIGVzdGFibGlzaGluZw== 21898\nIGJhbGFuY2luZw== 21899\nIGF0aGxldGlj 21900\nIFNsbw== 21901\nIGZpbGxz 21902\nINC90LDQsQ== 21903\nINC00LDQuw== 21904\nIHBvc3Nv 21905\nIFZpZWxlbg== 21906\nIGNyaXRpY3M= 21907\nIGxhd3N1aXQ= 21908\nIElzYWFj 21909\nINGE0LjQu9GM0Lw= 21910\nIHRyYXM= 21911\nIHByYXc= 21912\nIENyYXp5 21913\nIG5ldQ== 21914\nIGt1bGw= 21915\nIHR1bW9y 21916\nIEFQUA== 21917\nZ2F0ZQ== 21918\nIEFSRQ== 21919\nOTg= 21920\nIFN0ZWFt 21921\nIGZ1Y2tlZA== 21922\nbGFnZQ== 21923\nIOKZrA== 21924\nIE1E 21925\nZnk= 21926\nIHNoZWxscw== 21927\nIFNlZW1z 21928\naXplcnM= 21929\nIHJhbmdlcw== 21930\nIEFudG9uaW8= 21931\nQVRJT04= 21932\nIEJhYmE= 21933\nIOyDiQ== 21934\na3Vu 21935\nIHByYXllZA== 21936\n0YDRjw== 21937\nINC/0YDQvtGC0LjQsg== 21938\nIHNlYXM= 21939\nYnVyeQ== 21940\nINeU16k= 21941\nIHRyYWl0 21942\nIERlcGVuZGluZw== 21943\nIGRyZQ== 21944\nIGvDtm5udA== 21945\n0YbRgw== 21946\nIGxpcHN0aWNr 21947\nZWV6 21948\nINC/0YDQuNC80LXRgA== 21949\nIGFzc2lnbm1lbnRz 21950\nQm9i 21951\nIG1ldGFscw== 21952\nIHNwZWNpYWxseQ== 21953\nIOyYiOs= 21954\nIMWh 21955\nIHZpc3Rh 21956\nIM6s 21957\nIHR3aW5z 21958\nIG5vdGFibGU= 21959\nIFNhdQ== 21960\nIGTDqXZlbG9w 21961\nIMOnZWs= 21962\nIHBvbHlub20= 21963\nYXZhbQ== 21964\nIHRhbWLDqQ== 21965\n0L7QvdC+0Lw= 21966\nIHBsYXNtYQ== 21967\nIGVmZWN0 21968\nIGzDpG5n 21969\nIGNhc2k= 21970\n0YHQsA== 21971\nxLFtxLE= 21972\nk6TsnYA= 21973\nIGxhYm91cg== 21974\nb3NzZW4= 21975\nIFB1bg== 21976\ncmlm 21977\nIGRvc2Vz 21978\nIG9wZXJhdGVz 21979\n0LjQu9C70Lg= 21980\nIGphYXI= 21981\nc3Rhdw== 21982\nIOyCrOuekQ== 21983\nIGF0bQ== 21984\nIHByb3RlY3Rz 21985\nIGltcGVk 21986\nSE8= 21987\nIGNpbWE= 21988\nIHRvY2g= 21989\nYWJpcw== 21990\nIHNlbmRv 21991\nbGF1cw== 21992\nIGN1cmw= 21993\nIE51bQ== 21994\nIHNwb25zb3Jz 21995\nIGTDqWJ1dA== 21996\nIEFsZXhh 21997\nIELDvHI= 21998\nIEFtZXI= 21999\nIGNvcGU= 22000\nINC40LfQsg== 22001\namFs 22002\nIDE5OTU= 22003\nYXBhdA== 22004\ncmVzc2U= 22005\nIFByaXpl 22006\nIENsYWlyZQ== 22007\nIEJyYW5kb24= 22008\nIHdzenlzdGtv 22009\nIHZhbHVlZA== 22010\n4LiZ4Liw 22011\nIHNlY3Q= 22012\nIHNlY3JldGx5 22013\nIGRpYW1vbmRz 22014\nIEV2YW4= 22015\nIFJQRw== 22016\niOuPhA== 22017\nIFVuaXZlcnNhbA== 22018\nIGRvdWJ0cw== 22019\nIFBpbg== 22020\nd2nEhXo= 22021\nmqk= 22022\nIGFsYm8= 22023\nIGJyYXVjaHQ= 22024\nQVVM 22025\nIE1vYmlsZQ== 22026\nZ3JhZGVz 22027\nIHNjaGVt 22028\nd2h5 22029\nIE5pY2h0 22030\ncGk= 22031\nZ2xl 22032\nIGNob3J1cw== 22033\nIGdseQ== 22034\nIHJlaW5mb3JjZQ== 22035\nIG11ZmY= 22036\nIFNoZW4= 22037\nIEhvbGE= 22038\n0YPQsw== 22039\ndmlkZW1tZW50 22040\ndmlhbA== 22041\nYWNpb3Vz 22042\nbGFpbWVk 22043\nIFJpY28= 22044\nIHZlZ2c= 22045\nIGlsbHVzdHJhdGlvbg== 22046\nIEJ1dHRlcg== 22047\nb3dhZA== 22048\nIGV1eA== 22049\nIGVuZmFudHM= 22050\nIExlYWRlcg== 22051\nIFZpbGxhZ2U= 22052\nZXRpY2FsbHk= 22053\n2YbZig== 22054\nIHN0ZXc= 22055\nIHN1cnByaXNlcw== 22056\nIGN1ZQ== 22057\nIEdyYW5kbWE= 22058\nIENlbHNpdXM= 22059\nIFJpY2h0 22060\nZW5j 22061\nIHBldGl0aW9u 22062\nIGhlcmI= 22063\nIHdpY2tlZA== 22064\nIHNjaGxl 22065\nb2NhbHk= 22066\nIHRyYW5zZg== 22067\nIHRva2Vucw== 22068\nIEdyYXk= 22069\nIEJCQw== 22070\nSUs= 22071\nIDE1MDA= 22072\nem4= 22073\nIE5ldg== 22074\nIGtveQ== 22075\nIHphcg== 22076\nIGJ1bGxzaGl0 22077\nIENvbG9tYmlh 22078\ndWxhdGl2ZQ== 22079\nIHdpZGVzcHJlYWQ= 22080\neWVjdA== 22081\na2l0 22082\nIGVtcHJlc2E= 22083\nIG5vdXI= 22084\nIGJ1cm5z 22085\nYXRpbg== 22086\nYWlyZWQ= 22087\nIHJldm9sdXRpb25hcnk= 22088\nINCz0L7QtNGD 22089\nIExvZ2Fu 22090\nIDE5OTY= 22091\nIEdyYWhhbQ== 22092\ncmVi 22093\nIE5IUw== 22094\nIGNvc3R1bWVz 22095\nIG5hd2V0 22096\nIGxvdmVycw== 22097\nIEx1Y3k= 22098\nIEluZGlnZW5vdXM= 22099\n7ZWY6riw 22100\nIGltbXVuaXR5 22101\npbTr 22102\ndWl0bw== 22103\nIGV4Y2Vzc2l2ZQ== 22104\nIGRvbmF0aW9ucw== 22105\nINeU16g= 22106\nIOyyqw== 22107\nIGRyeWluZw== 22108\nbWVsb24= 22109\nIHN1cnZleXM= 22110\nIOustOyKqA== 22111\nYWFh 22112\nIHByb2Jl 22113\nYW5jaWFs 22114\nIGxvdWRlcg== 22115\nIGhvdGVscw== 22116\nw7zEnw== 22117\nYWduZXI= 22118\nIG9yaWdpbnM= 22119\nIOuniOyngOuniQ== 22120\nICoq 22121\nIHN0cmFuZ2Vycw== 22122\nIEhhdXM= 22123\nY29tZWQ= 22124\nIGFudGhyb3A= 22125\nIHVzbw== 22126\nIOyVhOyngQ== 22127\nIFl1YW4= 22128\nIO2VhOyalA== 22129\ncGxlcg== 22130\ncmVzc2l2ZQ== 22131\nIHNwcmF3 22132\nIFN0ZXc= 22133\nIDE5OTQ= 22134\nIGVsZGVycw== 22135\nIG1laW5lbg== 22136\nIGp1bnQ= 22137\nIGFjb3VzdA== 22138\nIFdvaG4= 22139\nIGJhbmFuYXM= 22140\nIHByb2plY3Rpb24= 22141\nIFN0aWNr 22142\nbGVndA== 22143\nc3BlZWQ= 22144\nIGPFqW5n 22145\nIFdvcnQ= 22146\nIEJhbHRpbW9yZQ== 22147\nINGG0LXQuw== 22148\nIGR1bm5v 22149\nPyw= 22150\nIExvY2Fs 22151\nb3N0bw== 22152\n0K0= 22153\n0L7QtNCw 22154\nIFBvcnR1Z3Vlc2U= 22155\nIHRoZWlycw== 22156\nIGTDqW0= 22157\nIGRyYXVm 22158\nIEJ1ZGRoaXN0 22159\nZXJ0YQ== 22160\nR2U= 22161\nIGNhcnJvdA== 22162\nIFdvbmRlcmZ1bA== 22163\nIHNvYWs= 22164\nIGNoYWlybWFu 22165\nZ2dp 22166\nSUNB 22167\nZnJpZWQ= 22168\nIGZsaWNr 22169\nIFRocm91Z2hvdXQ= 22170\nIOyasOs= 22171\nIGNvdWdo 22172\nIGZsdWZmeQ== 22173\nc2Nob29s 22174\nIHJpcHBlZA== 22175\nLS0tLS0tLS0= 22176\nIFp1a3VuZnQ= 22177\nINC90LXQsQ== 22178\nIHN0bw== 22179\nIEJP 22180\ncGVudA== 22181\nIExhd3JlbmNl 22182\nz4nPgg== 22183\nc3RpY2tz 22184\nIEVpbnM= 22185\nINGA0Ys= 22186\nIFN0cm9uZw== 22187\nIGNhcmFtZWw= 22188\nIHNwaXRl 22189\nYXphcg== 22190\nIGNyaXRpY2FsbHk= 22191\nIG9icmE= 22192\nb3dpdHo= 22193\nIFpvbmU= 22194\nINGA0LXQug== 22195\nIHN1Zw== 22196\nYXJkZWQ= 22197\nIGfDrA== 22198\nZmZlbnRsaWNo 22199\nYW5jaGU= 22200\n2J8= 22201\nYXN0aWNhbGx5 22202\n7J286w== 22203\n0LvQsNCy 22204\nIHNpbXBsZXN0 22205\nIEZyaWVuZA== 22206\nIHF1ZWxsbw== 22207\nIGFtYml0aW9u 22208\nIGFiYmlhbW8= 22209\nINGE0L7RgNC8 22210\nIEVzc2E= 22211\nIGVkdWNhdG9ycw== 22212\nIHN0YXRpc3RpY2Fs 22213\nIGNoYW5nZXI= 22214\nIGF0YXU= 22215\nw6l0YWlz 22216\nIFNoYWtlc3BlYXJl 22217\n65CY 22218\nIHRyaWdnZXJz 22219\nIHJlYWxpeg== 22220\nIGNlbHVp 22221\nd2hlZWw= 22222\nIGxveWFsdHk= 22223\nIHNjcmVhbXM= 22224\na2Vocg== 22225\nIE1lZ2E= 22226\nZWFzdA== 22227\nIHRvcHM= 22228\nIFRvdGFsbHk= 22229\nb3VudGFpbg== 22230\nbG9yZA== 22231\nIHZpb2xhdGlvbg== 22232\nIEdB 22233\nIG5pY2Vy 22234\nIEZyZXNo 22235\nIE1lbGlzc2E= 22236\nZnVuY3Rpb24= 22237\nIHJhcGU= 22238\nIGV4Y2VwdGlvbnM= 22239\nIHNpbGljb24= 22240\nIGxpYmVydHk= 22241\nIGhvdXNlaG9sZHM= 22242\nIENB 22243\nINCe0LE= 22244\nIGxpYg== 22245\nnow= 22246\nY2lmaWM= 22247\nIHRyb3BpY2Fs 22248\nIGludmVzdGlnYXRpbmc= 22249\nSEQ= 22250\nIGFkYXB0ZXI= 22251\nIFBpdHQ= 22252\nYW5jaWE= 22253\nIFNoZWxs 22254\nZnJpZW5kbHk= 22255\nIGNvbmNsdXNpb25z 22256\nIHR1cnRsZQ== 22257\nIGRlY29tcA== 22258\nIGFuaW1hdGlvbnM= 22259\nINGB0LXQug== 22260\naW5zaQ== 22261\nIHJldGVudGlvbg== 22262\na2ll 22263\nIGluamVjdGlvbg== 22264\nIE1hZGlzb24= 22265\n7LCw 22266\nIHZpZW50 22267\nIHZhcmllZA== 22268\nIHZpb2xpbg== 22269\nIEJpbA== 22270\nIGx1Y2tpbHk= 22271\nIGh0dA== 22272\nbMOk 22273\nIHJhbmNo 22274\nIHPDs2xv 22275\n7JWF 22276\nIERlcmVr 22277\nIFNjcmlwdHVyZQ== 22278\n0L7RgNCw 22279\nIGNsYXNzcm9vbXM= 22280\nYXZpbA== 22281\nZm9ybWVk 22282\nIGJlZm9yZWhhbmQ= 22283\nIEdlbQ== 22284\ncHJlY2g= 22285\nIGxpbg== 22286\nIGdyZWVucw== 22287\n0YbQtdCy 22288\nIE1lcmNlZGVz 22289\nIGRyb3VnaHQ= 22290\nZ2FzcHM= 22291\nIGFib3J0aW9u 22292\nIHRlcnJpYmx5 22293\nIHNwb3PDs2I= 22294\nIHNlY3VyZWQ= 22295\nIGF0csOhcw== 22296\nIHdhdmVsZW5ndGg= 22297\nIGdyYWlucw== 22298\nZWN0aXZl 22299\nIHNwYWNlY3JhZnQ= 22300\nIHRvdXJz 22301\nIHByb2Zlcw== 22302\nIHN1cmdlb24= 22303\nIFBpZQ== 22304\nIGlkZWFsbHk= 22305\nYXJuZXI= 22306\nVVA= 22307\nb3BhcmQ= 22308\nc2Nl 22309\nIGltbWVuc2U= 22310\nIE9ydA== 22311\ncm9sbGVy 22312\nIERhbGxhcw== 22313\nIE5pY2hvbGFz 22314\nIHN1bGY= 22315\nIFRveW90YQ== 22316\nIHF1YW50aXRpZXM= 22317\nY2VhbnM= 22318\nIGN1aQ== 22319\nYW7Dp2E= 22320\nIENBTg== 22321\naXR6ZXJsYW5k 22322\nIHpvdQ== 22323\nIEN5YmVy 22324\nbGVnZW4= 22325\nIEluaXQ= 22326\nZWR1 22327\nIGFwZXJ0 22328\nIGFkamFj 22329\nb3V2 22330\ncnM= 22331\nIGNhYmJhZ2U= 22332\nIHdoZWVsY2hhaXI= 22333\naW55bA== 22334\nIER5bmFt 22335\nIOyVhOuLiOudvA== 22336\nIGxpbmc= 22337\naGw= 22338\nINC80L7Qs9GD 22339\nIGNyaXNw 22340\nIG1pag== 22341\nIGR1Zw== 22342\nbmlu 22343\nIGJsb3Nz 22344\nIGJlbG9uZ2luZw== 22345\nIGxvdWRseQ== 22346\nIG1pbmVyYWxz 22347\nIGNvbmNsdWRlZA== 22348\nIHNlYXJjaGVk 22349\nOTY= 22350\nIE1lZXQ= 22351\nIFNFTw== 22352\nINCh0Lo= 22353\nIEhvYg== 22354\nb3R0YQ== 22355\nIHByb3BhZ2FuZGE= 22356\nIGNpbm5hbW9u 22357\nIGh1bnRlcg== 22358\nIGdlbWVpbnM= 22359\nIHNjdWxwdHVyZQ== 22360\ndWxzaW9u 22361\nIHbDpGw= 22362\nIG1hZ2F6aW5lcw== 22363\nIGNvbnRyb3ZlcnN5 22364\nIHNlcXVlbmNlcw== 22365\nIO2ajA== 22366\nIGRlbGV0ZWQ= 22367\nkOuPhA== 22368\nIHZhcnlpbmc= 22369\nIG1vdW50aW5n 22370\nIGFmZmFpcg== 22371\nIHBhdGh3YXlz 22372\n5qY= 22373\nIGRpZ28= 22374\nINC00L7Qug== 22375\nQWxleA== 22376\nIHRvYmFjY28= 22377\nIENW 22378\nIGJvdGhlcmVk 22379\nIGFtYmllbnQ= 22380\naW5reQ== 22381\nIFNM 22382\nIGhhdGVz 22383\nIGplxbxlbGk= 22384\nIGNvbmdyZWc= 22385\nIGVsYXM= 22386\nIGRldXRz 22387\nIFN0dWRpb3M= 22388\nY2jEmQ== 22389\nIGRvY3VtZW50ZWQ= 22390\nIENydXo= 22391\nIExlbg== 22392\nIERvdWdsYXM= 22393\nIFBvcnR1Z2Fs 22394\nZW50aQ== 22395\nIHNwb3VzZQ== 22396\nIGFuYWx5cw== 22397\nYXZpYQ== 22398\nIGVkaXRlZA== 22399\nIGzhuqFp 22400\nYnVpbHQ= 22401\nIHZpbGxl 22402\nYWRvcmE= 22403\nIGJyYWNlbGV0 22404\nIHN1c2hp 22405\nIHBt 22406\nIHRyYWlscw== 22407\nIGx1Zw== 22408\nIMO2dmVy 22409\nIHNvcnJvdw== 22410\nIGNvbG9ueQ== 22411\nYWRveA== 22412\nIHNlcmll 22413\nYW55YWs= 22414\nINi3 22415\nIEd1bGY= 22416\nIFBW 22417\nIFNhbXVlbA== 22418\nIEtpdA== 22419\nIFJhbA== 22420\nb250aW4= 22421\nZXhwbA== 22422\nIGVudHJpZXM= 22423\nIGFjdGl2aXN0cw== 22424\nUHM= 22425\nIHNhbnQ= 22426\nINGC0L7Rhw== 22427\nIEJydW5v 22428\na2VsZXk= 22429\nIHR1dHRv 22430\n6ZQ= 22431\nIHZpbnRhZ2U= 22432\nIHRlcnJpZmllZA== 22433\nINC/0L7RhQ== 22434\ndXNpdmU= 22435\nb3dlcnM= 22436\n0LDQudGC 22437\n64+Z 22438\nIHR3aXN0ZWQ= 22439\nIFRob3VnaHQ= 22440\nIHRhaA== 22441\nIHNocmluaw== 22442\nIHNoZWVy 22443\nbGl0 22444\nIGRhbGFt 22445\nIGRpYg== 22446\nIHZhcmQ= 22447\nb3dhbmU= 22448\nIGRvYnI= 22449\nIFJlbmE= 22450\nINGB0LLQvtGO 22451\nIHBhw61zZXM= 22452\nIEVyYQ== 22453\nIEJVVA== 22454\nc2lnaHM= 22455\nIOq3uOqxsA== 22456\nIGdyb8OfZW4= 22457\nIOu5qOumrA== 22458\nIG5lcnZlcw== 22459\nIGNvbnN0aXQ= 22460\nIHByZW9jdXA= 22461\nIEdheQ== 22462\nIFh1 22463\na2VlcGVy 22464\naGV1cmU= 22465\nLi4p 22466\nIENhbG0= 22467\nIFVuaWRvcw== 22468\nIOydtOqygw== 22469\nIEFxdWk= 22470\nIOygnOydvA== 22471\nZMSxcg== 22472\n7KaY 22473\neW91cg== 22474\nINGN0YLQuNC8 22475\nMjAyMA== 22476\nIHJ1bmQ= 22477\nIEhP 22478\nIENhdGhlcmluZQ== 22479\naWVsaQ== 22480\nIGZ1c2lvbg== 22481\nIGlkZW9sb2d5 22482\nIGZvcmFt 22483\nc2hhcGVk 22484\nIO2bhOs= 22485\nIHd0 22486\nIHJldHI= 22487\nIHByw6lj 22488\nIOqwkQ== 22489\nIG9wZW5seQ== 22490\ndml0eQ== 22491\n6rWs7JqU 22492\nIG9ic3RhY2xl 22493\nIGJvbw== 22494\nIHNlaW5lcg== 22495\naWNvcm4= 22496\nIGVpZ2VubGlqaw== 22497\nIGhlYWRlcg== 22498\nYXJlbW9z 22499\nIHNvZnRlcg== 22500\nINCf0L7QtA== 22501\nIHByZWp1ZA== 22502\nIGRlZmluZXM= 22503\naWVydGU= 22504\nIGJsZW5kaW5n 22505\nIGJlbGlldmVycw== 22506\nIFdvY2hlbg== 22507\nINC90LjQutCw0Lo= 22508\nINCa0L7Qs9C00LA= 22509\nIFR5cGljYWxseQ== 22510\nIO2BrA== 22511\nY2lvcw== 22512\nIG1pc3NpbGVz 22513\nIHNwb25nZQ== 22514\nIEtpdGNoZW4= 22515\nIHRyZW4= 22516\nbmluZ2Vu 22517\nIHNjcmFw 22518\nIHNlcmFpdA== 22519\ntOyg 22520\n57k= 22521\nIOuwmOs= 22522\nIHJlc3RvcmVk 22523\nIHByenlrxYJhZA== 22524\nIEt1YmVybmV0ZXM= 22525\nIHNhaXQ= 22526\nIHV3 22527\nIGVuYWJsaW5n 22528\nIHRyYXZlcnM= 22529\nYW1wcw== 22530\nIE9NRw== 22531\nZW5zb3I= 22532\nIHpvc3Rh 22533\nIHByb25vdW5jZWQ= 22534\nQW5n 22535\nbm9ybWFs 22536\nIGVjb25vbWllcw== 22537\ndGlu 22538\nIENoYW1waW9u 22539\naXplbg== 22540\nIGFyYmVpdGVu 22541\nIEdvc3BlbA== 22542\nIFp1 22543\nbmdh 22544\nIGxpdGVyYWN5 22545\nIE1hbnM= 22546\nIGNpcmN1bGF0aW9u 22547\nIGFkYXA= 22548\nIFRvdGFs 22549\nIG1lcmVrYQ== 22550\nIG9sYWNhaw== 22551\n0YHRgtCw0YLQuA== 22552\nSmFjaw== 22553\nIG11bmQ= 22554\nIHRoaWVm 22555\nYmllcw== 22556\nIOqygQ== 22557\nYXF1ZQ== 22558\nINqp24w= 22559\nIFNjYXI= 22560\n5bI= 22561\nIGFib2w= 22562\nIGRldm90ZQ== 22563\nIDAx 22564\nIHNpdHRlbg== 22565\nIFZpc3VhbA== 22566\nd2Vlaw== 22567\nc29tZQ== 22568\naW5ndA== 22569\nIGpvdXJuYWxpc20= 22570\nIEhpcg== 22571\nIEJhY2hlbG9y 22572\naW5lcnk= 22573\nw5xORA== 22574\nIGNvbG9yaW5n 22575\nIENyaXN0 22576\nIGNlbGVicml0aWVz 22577\nINGH0LjRgQ== 22578\nIENyaXQ= 22579\nIGRpZmZlcmVudGlhdGU= 22580\nINCc0L3QtQ== 22581\nZWxpbQ== 22582\nIHNlYWZvb2Q= 22583\nIGFsZ3VtYXM= 22584\nb3RoZXJhcHk= 22585\nIGdsYXVi 22586\nIGFyYml0cmFyeQ== 22587\nZ2Vucw== 22588\nINCx0YPQtNC10Lw= 22589\nIHRhdg== 22590\nIGNyZWFteQ== 22591\nIENvdW50cnk= 22592\nYcOx 22593\n0LzQtdGC 22594\nIGhpbnRlcg== 22595\nIG1pc20= 22596\nIGlsbHVzdHJhdGU= 22597\nw5xORE5JUw== 22598\nIGRlY3JlYXNpbmc= 22599\nIHdlbmlnZXI= 22600\nQUtJ 22601\naXhvbg== 22602\nINC90LXQuQ== 22603\nIGZhdHRv 22604\nIG5lcmQ= 22605\n56A= 22606\nIGJpdHRl 22607\nUGVy 22608\nIHRhbmU= 22609\nIGfDtno= 22610\nIGZvcnRl 22611\nIEV5 22612\nINC90LDQstC10YA= 22613\nIFdvcmRQcmVzcw== 22614\nIE1pcw== 22615\nxa8= 22616\nesOkaA== 22617\nIGludMOpcmVzcw== 22618\nb3NhdXJz 22619\nIEZhbGxz 22620\nIG5lc3Nh 22621\nOTc= 22622\nIG11c2V1bXM= 22623\nIGNvcnJlc3BvbmRz 22624\nIHNpbmdz 22625\nZm91cg== 22626\nIGVkZXI= 22627\nIENvbW11bmlzdA== 22628\nb2E= 22629\nbmVr 22630\nIFdITw== 22631\nIGNvcnBv 22632\nIG1lc3Npbmc= 22633\nz4TOsc65 22634\nIGJydXNoZXM= 22635\nIGJpc2M= 22636\nIEFyYmVpdHM= 22637\nIFRheA== 22638\nIHNlbGU= 22639\nIGZsYWdz 22640\nb3VwZQ== 22641\nIGFudGljaXBhdGVk 22642\nIE5hZA== 22643\nIHBvdXJlZA== 22644\nIG1s 22645\nIGxsYW1h 22646\nIHZpc3VhbGl6ZQ== 22647\nIGxpc3RlbmVycw== 22648\n2YTZgw== 22649\nYWx0ZW4= 22650\nTWljaGFlbA== 22651\nIGNvc8Os 22652\n1aHV 22653\nb3B1cw== 22654\nIO2VtOyjvA== 22655\nIGhpa2U= 22656\nIEF0dG9ybmV5 22657\nIEhpbGxhcnk= 22658\ndWRlZA== 22659\nIO2VmOyngOunjA== 22660\nIGRvdmU= 22661\nIHN0b3Jtcw== 22662\n0LDQutGB 22663\nIGRvY3RyaW5l 22664\nIGhleA== 22665\naWtz 22666\nbm/Fm8SH 22667\nIHNjcmlwdHM= 22668\nIM60zrXOvQ== 22669\nINGN0YLQuNGF 22670\nINCG 22671\nYWJlcg== 22672\nIFZhcw== 22673\nIGNlbnRpbWV0ZXJz 22674\n157XlA== 22675\n0L3QuNCx 22676\nIHJpZGVycw== 22677\nIFRyaWI= 22678\nIHRha8W8ZQ== 22679\nIG5vdW4= 22680\nIGljb25z 22681\nIHNvbGVseQ== 22682\nbWluZGVk 22683\nIGRpc3Bvbg== 22684\nIFN3aXR6ZXJsYW5k 22685\nIGNsdXN0ZXJz 22686\nIHF1ZWRh 22687\nYWlsaW5n 22688\nIG1hbmdh 22689\nIDY4 22690\nhIg= 22691\nIHRldA== 22692\nZ2lucw== 22693\naGF1cw== 22694\nIE9Q 22695\nb3RlZA== 22696\nIG5vdXZlYXU= 22697\nQUxMWQ== 22698\n2YjYrw== 22699\nw7Ju 22700\nIG1vcnRhbGl0eQ== 22701\nIEdpdEh1Yg== 22702\nZHJvcA== 22703\nIGRpc2d1 22704\nIHJlY29t 22705\nIGxvY2Fscw== 22706\nIGhvbWVtYWRl 22707\nYW1iYQ== 22708\nIHByb251bmNpYXRpb24= 22709\nIGFscGhhYmV0 22710\n0LDQvdGM 22711\nb3dhbnk= 22712\naXJhcw== 22713\naWRlbmN5 22714\nT01F 22715\nINGA0LDRgdGB 22716\nYXJhaw== 22717\ndmlhbWVudGU= 22718\nIG5vbnByb2ZpdA== 22719\nIFlvdVR1YmVy 22720\nIHBhcmVudGg= 22721\nIEJvbw== 22722\ndmF0 22723\nIFN0aXI= 22724\nIHByZWNpcA== 22725\nIGFudHM= 22726\nIGFsbHk= 22727\nIE1hb3Jp 22728\nIOuMgO2VnA== 22729\nb2dlbmU= 22730\nIExhYm91cg== 22731\nYXJldHRl 22732\nIHJlY3ljbGluZw== 22733\nZW5zYQ== 22734\nIHB1cnN1aXQ= 22735\nIHNhaw== 22736\nINCX0LTQtdGB0Yw= 22737\nIHRvbGVyYW5jZQ== 22738\nIHNhYXQ= 22739\nIGNsaWNrZWQ= 22740\n4pml 22741\nIGZhY2Vib29r 22742\nIEludG8= 22743\nIGluY2VudGl2ZXM= 22744\n6riw64qU 22745\nIERlbm5pcw== 22746\nIFdpaw== 22747\nZ2VzY2g= 22748\n4LmA4Lib 22749\nIM+AzrE= 22750\nIFdob28= 22751\nIHJvdW5kZWQ= 22752\nIGRvcGU= 22753\nIGNhcHR1cmluZw== 22754\nIFdhcnJp 22755\nIGNpdmlsaWFu 22756\nIGNoYXJtaW5n 22757\nIGVzYXM= 22758\nIHN1c3RhaW5lZA== 22759\nIGxlYW5pbmc= 22760\nIGFidW5kYW5jZQ== 22761\nw61saWE= 22762\n0LDQu9GM0L3Ri9C5 22763\nIHBo4bqjaQ== 22764\nYWNqYQ== 22765\nIOqwmeyVhA== 22766\nYWN0aXY= 22767\n4Liy4Lii 22768\nIDk3 22769\nINC80L7QuQ== 22770\nY3Jv 22771\nIEphY2tpZQ== 22772\naXR0ZWVz 22773\nYnJhY2h0 22774\ndWxlbnQ= 22775\nIOygnOs= 22776\nIHBsdWdpbg== 22777\ndmFudGFnZQ== 22778\ncGFydHk= 22779\nIHN1YXM= 22780\nIGFudGU= 22781\n0YPQuw== 22782\n0J3QkA== 22783\nIM+Dz4U= 22784\nIG1ldGg= 22785\nIGVudGh1c2lhc20= 22786\n0Y/RgtGB0Y8= 22787\n7ZmU6w== 22788\nIHN5bnRoZXRpYw== 22789\nIHNlYXNvbmluZw== 22790\nIExvc3Q= 22791\nb25vbXk= 22792\nIFNwYXJr 22793\nIGJ1cmU= 22794\nIGFzc3VyZWQ= 22795\nIGltYWdpbg== 22796\nIGNhcnJv 22797\nU2hh 22798\nxIV0 22799\n0L3Rg9GC0Yw= 22800\nw6F0aWNh 22801\nVFk= 22802\nIGtlcm4= 22803\nIEJyYXppbGlhbg== 22804\nw7A= 22805\nIHN1c3BlbmRlZA== 22806\nIENhcmli 22807\nIGJpemlt 22808\nIE9saXZlcg== 22809\nVG9t 22810\nINC/0LvQsNC9 22811\nIG5vcGU= 22812\nb21ldGhpbmc= 22813\nIGJlaWRlbg== 22814\n0YbQtdC9 22815\nIGZsdWN0 22816\nIM68zr/PhQ== 22817\nIGZhdGhlcnM= 22818\nIEJsYWtl 22819\nIHVwd2FyZA== 22820\nIERhc2g= 22821\nIExpbA== 22822\nIOyImOuPhA== 22823\nIHJldmVsYXRpb24= 22824\nIGVsZXZhdGVk 22825\nIEppYW5n 22826\nTEVE 22827\nIFRob21wc29u 22828\nINC80L7Qs9GD0YI= 22829\n0YHRgtGA0YM= 22830\naWZpZXJz 22831\nIGNvbWViYWNr 22832\nIGJ1eWVycw== 22833\n6rKw 22834\nIFNhbGVz 22835\n0LjRh9C1 22836\nY2lvbmVz 22837\nIHdoaXN0bGU= 22838\nIGR1bGw= 22839\nTEVY 22840\nIO2VmOqyoOyKteuLiOuLpA== 22841\nIGNyaW1pbmFscw== 22842\nIGRlc2NlbnQ= 22843\naXBwbGU= 22844\nbWFzxLE= 22845\nIGZvb2xpc2g= 22846\nINC00YPQvNCw0Y4= 22847\ndGFy 22848\nIG1hbmdv 22849\nIGNob3Jlb2dyYXBoeQ== 22850\nTWF0dA== 22851\nIHRlcnJpdG9y 22852\nIGFjYWJh 22853\nIEVpbnN0ZWlu 22854\nIElCTQ== 22855\nIE1ldGFs 22856\nIENyeXN0YWw= 22857\nIHJhaA== 22858\nIGZvdWw= 22859\nIElzbGFuZHM= 22860\nIGludGFjdA== 22861\nIFJhaWw= 22862\nLjo= 22863\nIGFjw6E= 22864\nINC/0YDQvtC/ 22865\n0LXRgNC1 22866\nIFdyaXRl 22867\naGVoZQ== 22868\nIEZP 22869\nIM+Dz4TOtw== 22870\nIGRvaW4= 22871\naGVsZA== 22872\nIGFwcHJvcHJpYXRlbHk= 22873\nIGRlbGliZXJhdGVseQ== 22874\nIGFyY2hpdmU= 22875\nIGdpdmVhd2F5 22876\nIGZpbmFsZQ== 22877\n0LvQsNGB 22878\n0LXQvdC+ 22879\nxqFu 22880\nb2dv 22881\nIEF1ZGllbmNl 22882\n44Wg 22883\nIHN1YnVy 22884\nIGhlYWRhY2hl 22885\n0LDQvdC90Y8= 22886\nIFdpdGNo 22887\nIFN3ZWRpc2g= 22888\nIEJJ 22889\nIGVyYXNl 22890\nIGtoaQ== 22891\nIGNvbW1lbnRhcnk= 22892\nIFN1bHRhbg== 22893\n7YOd 22894\nIExlYmFu 22895\nIOuztOyL 22896\nIFBhbQ== 22897\ncGVrdA== 22898\nbW9udGg= 22899\nIGdyb3VuZGVk 22900\n6r4= 22901\nIMWfZWtpbGRl 22902\nMjUw 22903\nIFNDSA== 22904\naW9zbw== 22905\nIGluYXVn 22906\naGVpbWVy 22907\nIHJlZmxlY3Rpbmc= 22908\nIFJ1dGg= 22909\nIE9pbA== 22910\nIHRyb3V2ZXI= 22911\ndWVw 22912\nLi5d 22913\nIOyeiOs= 22914\nIG9saGE= 22915\nIHJlYXNvbmFibHk= 22916\nIGdsaXRjaA== 22917\nVUI= 22918\nIEdyYW4= 22919\nIGFkYWxhaA== 22920\nIGxlbnQ= 22921\n2LHYpw== 22922\nIHRyYWN0aW9u 22923\nIGFkanVzdGluZw== 22924\ntKQ= 22925\n0L3QuNCx0YPQtNGM 22926\nINC00L7Qvw== 22927\nIHN0cmV0Y2hlZA== 22928\nIG9ydA== 22929\nIGNvc2luZQ== 22930\ndmlvbA== 22931\nIOyF 22932\nY2ly 22933\nIGJhc3RhcmQ= 22934\nINGF0L7QtA== 22935\nIHF1aWVy 22936\nIHByZXNzdXJlcw== 22937\nIEFuaA== 22938\nIGVsbGVz 22939\nINC00YDRg9C3 22940\nINC80L7QttC10YLQtQ== 22941\nIGNo4bs= 22942\nIE3DqQ== 22943\nw7Zr 22944\n4bqndQ== 22945\n7KCI 22946\nemlu 22947\nIGNhdXRpb24= 22948\naWJhbg== 22949\nIGp1ZGdpbmc= 22950\n0YPRjtGC 22951\nIGJhag== 22952\nINCh0LXQudGH0LDRgQ== 22953\nIFBvb3I= 22954\nIE5hemk= 22955\nIHVwYmVhdA== 22956\neWFuZw== 22957\nIHdlZWtlbmRz 22958\nIEVzc2VudGlhbGx5 22959\nIG9sdXlvcg== 22960\nIHNwYXRpYWw= 22961\nYWNrZXI= 22962\nIHNlbGxlcg== 22963\nINeQ15XXqg== 22964\nkdec 22965\nIHZpdmlk 22966\nIEJvbmQ= 22967\n6raM 22968\naXNrdA== 22969\nIGdvYXQ= 22970\nZHJpdmVy 22971\nIG11Zw== 22972\naWN0aW9uYWw= 22973\nIGFsbHQ= 22974\nIEluaXRp 22975\nIFJhbmQ= 22976\nIGZpbmlzaGVz 22977\nIOqwiA== 22978\nIHZpdGFt 22979\nIHRlZW5hZ2Vycw== 22980\nIE1vcnJpcw== 22981\n7KSE 22982\nIE9yaQ== 22983\naXlh 22984\nIG15w7Zz 22985\nU3RlcA== 22986\nIEtyZQ== 22987\nIGRpbm9zYXVy 22988\nIOuqhw== 22989\nYWZmZQ== 22990\nIOuQqeuLiOuLpA== 22991\nIHplZw== 22992\nIE1hbmhhdHRhbg== 22993\nIHN1amV0 22994\ndWVsbGU= 22995\nc3RvZmY= 22996\nIGTDvHI= 22997\nIHN1Ym1hcg== 22998\nZXNlcw== 22999\nIGFxdWVsZQ== 23000\nIG5vdQ== 23001\nIEZhaXRo 23002\ndHo= 23003\nINGC0L7QvNGD 23004\nYWNldXQ= 23005\nbGllcnM= 23006\nIGJhbmR3aWR0aA== 23007\nxrDhu50= 23008\nIHJlc3BlY3RpdmU= 23009\nIEF2ZQ== 23010\nIHNwcmVhZHNoZQ== 23011\nIFNlbnQ= 23012\naWNhbWVudGU= 23013\nIGluZnJh 23014\nIGxlYXJuZXJz 23015\nIOCuiQ== 23016\nYWlhaA== 23017\ncmVuYWw= 23018\nIG11c3RhcmQ= 23019\nIGhhYnQ= 23020\n54M= 23021\nIFF1w6k= 23022\nIGFuYWx5emluZw== 23023\nIHNvbGlj 23024\nINeU15XXkA== 23025\nIGNhdXNh 23026\nIHdlbGNvbWVk 23027\nIFN1Y2Nlc3M= 23028\nIGZhY2lsZQ== 23029\nINCf0L7RgtC+0LzRgw== 23030\nc2NoZWlu 23031\nIGZldGNo 23032\nIHN0cmF0 23033\nINGB0YLQvtC40YI= 23034\n7JeQ7ISc64qU 23035\nINGB0L/QvtGB0L7QsQ== 23036\nbWFt 23037\nIHNlcsOtYQ== 23038\nbmFtZW50cw== 23039\nd3JpdGVy 23040\nIGNvbnN1bHRpbmc= 23041\n7ZiA 23042\nIEJlcmtlbGV5 23043\nZXU= 23044\nYXNpdmU= 23045\nVVU= 23046\nIEFuYWx5dA== 23047\nIHN1Ym1pc3Npb24= 23048\nIG1hZ25pZmljZW50 23049\nZW56YQ== 23050\nIGVjb24= 23051\nIHByb2ZpbGVz 23052\nIGluY2Fy 23053\nQWI= 23054\nIE51bg== 23055\nIGhpYw== 23056\nc2NyZWFtaW5n 23057\nIHJlc2lsaWVudA== 23058\nZ3J1bmQ= 23059\nIGNvbmN1cg== 23060\nIGJlcmVpdHM= 23061\nTEQ= 23062\nIG51cnQ= 23063\n7Ik= 23064\nIGZlYXN0 23065\nIGVuY3VlbnQ= 23066\nIE1pY2hlbA== 23067\nIHN1cHJlbQ== 23068\nIl0= 23069\nIGZlZWRz 23070\nIEtvbGxlZ2Vu 23071\naXNzZXI= 23072\nIEZlbmc= 23073\nIFdlbg== 23074\nbXVu 23075\nIHRlbsOtYQ== 23076\nIFdyZXN0 23077\nIOyYpOuKmOydgA== 23078\nIHN0ZWFk 23079\nIHJlc3RvcmF0aW9u 23080\nIGRvbmF0ZWQ= 23081\nIGRlbHM= 23082\nIGNlbnN1cw== 23083\nIGRlc3BlcmF0ZWx5 23084\nd29ydGh5 23085\nSEU= 23086\nIFNwYQ== 23087\nIEJyeWFu 23088\nIGhq 23089\nIFJhdw== 23090\n7JWE6w== 23091\nIENhbWVyYQ== 23092\nIHppZW4= 23093\nIHN0eWw= 23094\nIFRX 23095\nIENoZWVzZQ== 23096\nYm9ybmU= 23097\nIG9ibA== 23098\nIEFscmVhZHk= 23099\nIHVuc3RhYmxl 23100\nIGZsYW1lcw== 23101\ncG9zdA== 23102\nSGE= 23103\ncm9tYWdu 23104\nIOyXhOuniA== 23105\nZGVzdA== 23106\nIGtvbGVq 23107\nIHRlbXBvcmFyaWx5 23108\nIGRldGVybWluaW5n 23109\nIEdsYXNz 23110\n0YDQvtC9 23111\nb2xhbg== 23112\nIGRvbWluYXRlZA== 23113\nX19fXw== 23114\nINmH2LDYpw== 23115\nIERhbmE= 23116\nIGRpbmhlaXJv 23117\nYXF1 23118\n66+8 23119\nIMOgcw== 23120\nIEpvZXk= 23121\nIEdyaWZm 23122\nIGF0dGFpbg== 23123\nIHRyYW5zaXRpb25z 23124\nIExpdGVyYWxseQ== 23125\n0LXQvdC0 23126\nIEhhdmVu 23127\nIGdyYWJiaW5n 23128\nIGNyeXN0YWxz 23129\nIEZvdXJ0aA== 23130\nIGNhbmRsZXM= 23131\nINGB0LvRg9GH0LA= 23132\ncmljbw== 23133\nIDUwMDA= 23134\nZXR0bw== 23135\nIHVuZG8= 23136\nIGt0bw== 23137\nIGRpdmVydA== 23138\nIGNoaXI= 23139\nIHBlcnNlYw== 23140\nIGhpa2luZw== 23141\nIGFubm91bmNlbWVudHM= 23142\n0LfRiw== 23143\nIGF1Yw== 23144\nIHN5c3RlbWlj 23145\nIFJN 23146\nz4POsQ== 23147\nINCU0LY= 23148\nIHlhcg== 23149\nIFdhcmQ= 23150\nIHBpc3NlZA== 23151\nIGNhcm4= 23152\nIGF1dG9ub21vdXM= 23153\n44WO44WO 23154\nc292ZXI= 23155\nIHJlZmxleA== 23156\nIGdhcmRlbnM= 23157\nIGRhdGVk 23158\n7LE= 23159\nYW1pxJk= 23160\nIGNvbnRpbnVpdHk= 23161\nIGNpdGl6ZW5zaGlw 23162\nIHNjaHdlcg== 23163\nIHphaw== 23164\ndGFibGU= 23165\nINGB0Yc= 23166\nIM+DzrU= 23167\nIGdlbmVyYXRlcw== 23168\n6rWs64KY 23169\nw7Zo 23170\nw7Nt 23171\nYWxhbQ== 23172\nIEpVRFk= 23173\nIEJ1Zw== 23174\nIGRyb25lcw== 23175\nIMOhZ3Vh 23176\nYWNha3M= 23177\n5po= 23178\nINCa0L7QvQ== 23179\n15bXlA== 23180\nIHN0cml2ZQ== 23181\nIEFsdGVybg== 23182\nIG5lYXJlc3Q= 23183\nIHByb3llY3Q= 23184\ndGVyYQ== 23185\nIEFTSExFWQ== 23186\nIHdvcm0= 23187\nIHJlcGxheQ== 23188\nIHRhcmE= 23189\nIEluZGlhbnM= 23190\naWNhaWQ= 23191\nIOyInA== 23192\nIGFwcGVhbGluZw== 23193\nIFdlcw== 23194\nIG1lbnRpb25z 23195\nINC00LXQu9C1 23196\nIGt3 23197\nIGZyYWdpbGU= 23198\naXN6 23199\na8Ozdw== 23200\naGFuZw== 23201\nY29sb3I= 23202\nIHByZXNpZGVudGU= 23203\nODc= 23204\n0LXRhA== 23205\nINC00L7QsdCw0LI= 23206\nIE5lbHNvbg== 23207\nw6FmaWM= 23208\nIE1JQ0hBRUw= 23209\nIG1lY2hhbmlj 23210\nIG1ldHJlcw== 23211\nIG9jenl3acWbY2ll 23212\nIENpbmQ= 23213\nIG9nc8Ol 23214\nIGxhbmRzY2E= 23215\nQUNF 23216\nIGhlYWRsaW5lcw== 23217\nIGNhdGFseXN0 23218\nIENhdGNo 23219\naW5rbGVz 23220\nIHBpbGxz 23221\nb3Jkbw== 23222\nIGltbWlncmFudA== 23223\nIGV4YW1pbmF0aW9u 23224\nIGFjY2lkZW50cw== 23225\nesSFZA== 23226\nIHF1aWVyZQ== 23227\nIG5lbGxh 23228\nIDY3 23229\nIHBhc3Nh 23230\nIHN1cGVyZmlj 23231\naXN0b3I= 23232\nIG5vdg== 23233\n64u1 23234\nIG1hbmRhdGU= 23235\naXNvbnM= 23236\nIFZpcnR1YWw= 23237\nIHNlbGJlcg== 23238\nIGNvdW5zZWxpbmc= 23239\nIE5CQQ== 23240\nIHNlcHQ= 23241\nIGJlbGlldmVy 23242\nIG1hcnZlbA== 23243\nIEludGVncg== 23244\nINC80ZY= 23245\nIG9ycGg= 23246\nIGJhY2t3YXJk 23247\nIEdlbmVyYXRpb24= 23248\nIFBpY3Q= 23249\nINGC0L7Rgg== 23250\nIHRhcGk= 23251\ncHJvY2hlbg== 23252\nIGhhbGx3YXk= 23253\naHRl 23254\nINuB25I= 23255\nIFp1bQ== 23256\nYWNobWVudA== 23257\naXF1ZXI= 23258\nZm9sZw== 23259\nIEVkZGll 23260\nIEtpbA== 23261\nIHdlbGxuZXNz 23262\nc3RvY2s= 23263\nIGthw6c= 23264\nIHRlcnJvcmlzbQ== 23265\nIHBvaW50ZXI= 23266\nT2Y= 23267\naGVyaWM= 23268\nIFVsdGltYXRlbHk= 23269\nIG1lc2Vz 23270\nIFRyYWRl 23271\nIHBpbnQ= 23272\nIHR1aXRpb24= 23273\nIGRpc2FncmU= 23274\nIOqyjOyehA== 23275\nIG1hbnVzY3JpcHQ= 23276\nIHJvb21t 23277\nIG91dHB1dHM= 23278\n0LXRhtC4 23279\nIHJpZXM= 23280\nIHNhbHVk 23281\nb3R6ZGVt 23282\nIG1hc3Nlcw== 23283\nIGJ5xYJh 23284\nIGNsZWFyaW5n 23285\nIGRpc2NvdXJzZQ== 23286\nYXRzb24= 23287\nIGZvbGRlZA== 23288\nIEphcg== 23289\n2YTZiQ== 23290\nOTAw 23291\nINGD0YHQvw== 23292\nIHByb3BoZWN5 23293\nIGludGVyZmVyZQ== 23294\n0LjRhdC+0LQ= 23295\n4LmM 23296\nIHRocmk= 23297\nINee16k= 23298\nIGxhesSxbQ== 23299\nIDE5OTI= 23300\nIGZ1dHVybw== 23301\nIGxvY2tpbmc= 23302\nIGVtYmFyZ28= 23303\nIE5laXRoZXI= 23304\naXZhbWVudGU= 23305\nIG3DpXN0ZQ== 23306\nIG1paw== 23307\nIGNvbGxlY3Rvcg== 23308\n0LXQutC+0YLQvtGA 23309\nIEdhbmQ= 23310\nIHNlbnRpcg== 23311\nIE1pZ2h0 23312\nIGdhbnplbg== 23313\nVUM= 23314\nIHJlbGF0aW5n 23315\nU0Q= 23316\nIG1vc3F1aXRv 23317\nR1I= 23318\nIGhvbGxvdw== 23319\n4piF 23320\nIFdhbGtlcg== 23321\nIGFmZmlsaWF0ZQ== 23322\nIGR1cGxpY2F0ZQ== 23323\n0L3QtdC8 23324\nIGdyYXBl 23325\nIE9yZ2FuaXphdGlvbg== 23326\nIHN5bnQ= 23327\nSm9l 23328\nIGdlZw== 23329\nIHJldmVhbGluZw== 23330\nIEV0aGFu 23331\nb3V0ZXI= 23332\nIHlheQ== 23333\n0LvQsNGA 23334\nIHJlcG9ydGVkbHk= 23335\nIGlocmVy 23336\nIHJlY29nbmlzZQ== 23337\nIGJ1bXBlcg== 23338\nIFJhbmR5 23339\nIFZlbnVz 23340\ndGxlcw== 23341\nIGFwcGV0aXRl 23342\nIGdsdWNvc2U= 23343\nIGNob2R6aQ== 23344\nIEZ1cnRoZXJtb3Jl 23345\ndGly 23346\nIGNvbnRh 23347\nIGludHVpdGlvbg== 23348\nIGFsdGl0dWRl 23349\nIGNodW5rcw== 23350\nIEpvc2h1YQ== 23351\nxLHEn8SxbQ== 23352\ncnlsaWM= 23353\nbGVhbnM= 23354\nIO2UvOs= 23355\nTEw= 23356\nUXVl 23357\nIGdvcg== 23358\nINC30L3QsNGH0LjRgg== 23359\nIHBvZW1z 23360\nIGV4Y2Vs 23361\nIGV4cGxvcmVk 23362\nIHBvcHVs 23363\nIGluY2x1c28= 23364\nc3TDpA== 23365\nIEdhdmlu 23366\nYWxsaW5n 23367\nIM+Ezr/OvQ== 23368\n6ak= 23369\nYXJiZWl0 23370\nIEdhcw== 23371\nIGdsb3Jpb3Vz 23372\ncmllYmVu 23373\nIHNwYW0= 23374\nIGluZG9vcg== 23375\nIHRocnVzdA== 23376\nIEFsZA== 23377\nIFByaW9y 23378\nIG9uYm9hcmQ= 23379\nb2Nh 23380\nQVNI 23381\no6A= 23382\nIENocmlzdGluZQ== 23383\nIGRyYXdlcg== 23384\nIG5vb24= 23385\nIOyemOs= 23386\nIHBlcm1hbmVudGx5 23387\nINC90LDQv9GA0LjQvNC10YA= 23388\nIHBvZGNhc3Rz 23389\nZXJhcGV1dA== 23390\ncHJpdA== 23391\nIHN0YWlubGVzcw== 23392\nINqp25I= 23393\nIGZhbWlsaWE= 23394\nINGA0LDQt9GA 23395\ndW50bw== 23396\nINGB0YLQvtC7 23397\nIGjDpA== 23398\nIEhhaQ== 23399\nIFBC 23400\naXpvbg== 23401\nIGtvbm50ZQ== 23402\nIGLDvHnDvGs= 23403\nIHV0aWxpemFy 23404\n2oY= 23405\nIGFxdWVzdGE= 23406\nIG1peGVy 23407\ndWRlbnQ= 23408\n0LvQtdC60YE= 23409\nxYJ1 23410\nINGB0LjRgdGC0LXQvA== 23411\nINC90L7RgNC8 23412\nIGZhdGFs 23413\nIGNvbnNpZGVyYXRpb25z 23414\nIHZhbGlkYXRpb24= 23415\nIG9saQ== 23416\nIGthcmRlxZ8= 23417\nIEdMT1JJQQ== 23418\nIHBhbGw= 23419\n0LXRgdGC0LU= 23420\nIHJlY3Rhbmc= 23421\nIG1lZGlldmFs 23422\nYWxsYWhp 23423\nYXN0aQ== 23424\nIFN5cmlhbg== 23425\nIHNoZWFy 23426\nIGRlYnVn 23427\nIE1haQ== 23428\nIGtub2NraW5n 23429\nIExleA== 23430\nYXJkYW4= 23431\ncm92 23432\nIG1lbW9yaWFs 23433\nb29reQ== 23434\nIHN0dWZmZWQ= 23435\nIHBhc3PDqQ== 23436\nIHdpZw== 23437\ngqA= 23438\nIHByw7N4aW1h 23439\nIDE5OTE= 23440\nINC80LXQttC00YM= 23441\nIG51ZXN0cm9z 23442\nIEJlYXN0 23443\nIHNtbw== 23444\nYXRjaGVk 23445\nb2xvZ2lh 23446\nINC80L7QtA== 23447\nIGdlZQ== 23448\nIGNvbmNlcHR1YWw= 23449\nIMO0 23450\nIGRlY3JlYXNlcw== 23451\nIHF1ZXJpZXM= 23452\n0L7Qu9GM0Yg= 23453\nIEFwYXJ0 23454\nIGV4ZW1wbA== 23455\nIGZsZWQ= 23456\nIE9GRg== 23457\nZ2dhaw== 23458\nIGJlYWQ= 23459\naGly 23460\nbGllcw== 23461\nIENsZWFybHk= 23462\nxLFsYXI= 23463\nIGNoZXNz 23464\nIHdoaWNoZXZlcg== 23465\nIDk2 23466\n4bqx 23467\nIHJlc3BlY3Rz 23468\nINC80L7RgA== 23469\nIG9yZ2FuaXNt 23470\nIGdyYW5kcGE= 23471\nIFZpZQ== 23472\nIGZsb29kaW5n 23473\nIHVwZ3JhZGVk 23474\n0ZHRgA== 23475\nIGNoZWVrcw== 23476\nIGNvbnF1ZXI= 23477\nIHN0dWJib3Ju 23478\nIHB1enpsZXM= 23479\nIGF1Y3Rpb24= 23480\nIHJlbHlpbmc= 23481\nIFBST0Y= 23482\nIEVzcGVy 23483\nINCc0KM= 23484\nIGh5cGU= 23485\nIHBvc3NpYmls 23486\nIGltcHJpc29u 23487\nIEVybg== 23488\n7JeI7Iq164uI64uk 23489\nIGVudmll 23490\nIHJlc3VycmVjdGlvbg== 23491\nIHNwZXI= 23492\nIFZlbmV6dWVsYQ== 23493\nc29t 23494\nIOyeoOq5 23495\nIG5vdXZlbGxl 23496\nIGNsb3Nlcw== 23497\nIDE5NDA= 23498\nIHF1YQ== 23499\nIEphcmVk 23500\nIFBpcg== 23501\nIGluZGU= 23502\nIHNjcnVi 23503\ndWt1 23504\nIHJlcXVpcmluZw== 23505\nINCy0LDQvNC4 23506\nIGNvbnNpZGVyYWJsZQ== 23507\naWxpYQ== 23508\nIGlubmU= 23509\nIG1laW5lbQ== 23510\nIGhhcmRzaGlw 23511\nIHRyYXBz 23512\ncm9j 23513\nIOyEpOs= 23514\nIHJlc2VhcmNoaW5n 23515\nIE1hcmdhcmV0 23516\nIHBlbm55 23517\nIGLEsXJhaw== 23518\n0ZHQuw== 23519\nIHdvb2w= 23520\nIHJoZXQ= 23521\nIGZsYXR0ZW4= 23522\n54c= 23523\n4LmA4Lij 23524\nIHBpZWQ= 23525\nIENoYXA= 23526\nIHVuZGVybQ== 23527\nIGZyZXQ= 23528\nIGNyYXNoZWQ= 23529\nIEZyYXVlbg== 23530\n2LDZhw== 23531\naXZhbg== 23532\nIGxpdGVyYXJ5 23533\nbGF0ZWdv 23534\nIHNww6R0ZXI= 23535\nIHNpbWlsYXJpdGllcw== 23536\n4oY= 23537\nIENvcm9u 23538\nIENyZWVr 23539\nIGJvc3Nlcw== 23540\nIGFjY29tcGFuaWVk 23541\nIGRlYmF0ZXM= 23542\nIGFzc2VtYmxlZA== 23543\nIMOB 23544\nIFZhaQ== 23545\nIHRyYWN0 23546\nIHNpbXBsZW1lbnQ= 23547\nIEFyaW4= 23548\nIHZ1bG5lcmFiaWxpdHk= 23549\nIGhvcm1vbmU= 23550\nSUVM 23551\nT09L 23552\nIHJlbGF5 23553\nIEFuZHJlYQ== 23554\ncmls 23555\nIG5lY2Vzc2l0eQ== 23556\nYWNldXRpY2Fs 23557\n0Y7RiQ== 23558\nb3VzaW5n 23559\nbmFobWVu 23560\nIGZvb3RwcmludA== 23561\nbWFw 23562\nIFRpZXI= 23563\nYW5ueWE= 23564\naW50ZW5k 23565\n5aI= 23566\nIGRlY29yYXRl 23567\nIHpvbWJpZXM= 23568\nIEh5ZA== 23569\nIFN1eg== 23570\nIGNhbXB1c2Vz 23571\nIEVtYg== 23572\nIHRocm90dGxl 23573\nIGFkbWlu 23574\nIG9wb3J0dW4= 23575\nIG1pcnJvcnM= 23576\nIGlkZW50aXRpZXM= 23577\nIENsaW4= 23578\nIOu5hOs= 23579\n4bmj 23580\nIE90dA== 23581\nIGJsdWVz 23582\nIGltcHJlc3Npb25z 23583\nLSw= 23584\nIHZhZ3Vl 23585\nYWZl 23586\nIGluZmVyaW9y 23587\nZXJhbGQ= 23588\nIG1lZGljaW5lcw== 23589\nIHByZWd1bnRh 23590\nb3NlbHk= 23591\nIHTDqWzDqQ== 23592\nIE1vbnRo 23593\nIExlYWRlcnM= 23594\nIEVneXB0aWFu 23595\nIHJhdGlvbg== 23596\na2Vycw== 23597\naGVpdHM= 23598\nIHJlY2h0 23599\nUGxheQ== 23600\nIGVn 23601\nIHBvbGxz 23602\nIFdPT0RS 23603\nIHNsb3Rz 23604\namFt 23605\nQm90aA== 23606\nIFJhdA== 23607\n0YDQsNC2 23608\nIEJyaWdodA== 23609\n4buRaQ== 23610\ndXJpb3Vz 23611\nIHNpbmdlcnM= 23612\nIGxvZ2lu 23613\nIHTDqm0= 23614\nbGF0aW9u 23615\nIE11bQ== 23616\nxrDhu51uZw== 23617\nIEVkaXRvcg== 23618\nIGlubm92YXRpb25z 23619\naGF2ZQ== 23620\nIFNlaw== 23621\nIHdlYWtlcg== 23622\nIEdvYg== 23623\nQWZ0ZXI= 23624\ntOyngA== 23625\nIOusuOygnA== 23626\nIGRpc2FkdmFudGFnZQ== 23627\nIGdhemU= 23628\nIE1hY2s= 23629\nz4HOrw== 23630\nIEtpc3M= 23631\nIEhvbG8= 23632\nIEJpcnRo 23633\naXpp 23634\nYmFi 23635\n7Iuc6rOg 23636\n0LTQtdGA0LY= 23637\nIHNxdWF0 23638\n0LrRg9GB 23639\ndW5p 23640\nIENvbW1l 23641\nIFdPT0RSVUZG 23642\nIENoYW1waW9uc2hpcA== 23643\nIHdlbGNoZQ== 23644\nIFlvdXRo 23645\nemVt 23646\nIG9kcG93 23647\nIHBlcnNpc3RlbnQ= 23648\ncnV0 23649\n7JSp 23650\n7Zal 23651\nbGFpcg== 23652\naWt1 23653\nIHZlbmRvcg== 23654\nIGNow7puZw== 23655\nIGZpbmFuY2k= 23656\nIG92ZXJseQ== 23657\nw6J1 23658\nIGdsdXRlbg== 23659\nIDE4MDA= 23660\nIGRpdmlzaW9ucw== 23661\nIGNpdWRhZA== 23662\nIG9iZWQ= 23663\nIHdhcnVt 23664\nIGVoZXI= 23665\nIGVsaW0= 23666\nINCS0L4= 23667\nIHBldXZlbnQ= 23668\nIFdhbm5h 23669\nIGF0dGVuZGFuY2U= 23670\nIGFzc2Vzc21lbnRz 23671\nIEJvZw== 23672\nIGltYWdlcnk= 23673\nIGNvbGxlY3RpdmVseQ== 23674\nIGluZm9ybWFs 23675\nIFNjaHdl 23676\nIGRldXRsaWNo 23677\nIENoZWw= 23678\nIFBF 23679\nb3dlZA== 23680\nIGJhbm5lcg== 23681\nIHNoZWx2ZXM= 23682\nIFJldHVybg== 23683\nTEFVR0hT 23684\nIGNvbmdyYXR1bGF0ZQ== 23685\nIE5vcndheQ== 23686\nIGR3ZWxs 23687\nIENhcmliYmVhbg== 23688\nIG5vcm1z 23689\nIEFuaW1hbA== 23690\nIFZhbGVudGluZQ== 23691\nIGV4dGVuZGluZw== 23692\nIFZvdQ== 23693\nb3Jy 23694\nIENoZW5n 23695\nwqE= 23696\nINC00L7RgNC+0LM= 23697\nIHZlZw== 23698\nIGjDpQ== 23699\nIFhpbg== 23700\nIOy5tOs= 23701\nZW1ldA== 23702\nIGh5cG90aA== 23703\nIGludGVyZXNzYW50ZQ== 23704\ncmljZXM= 23705\nSVo= 23706\nIFVTRA== 23707\nIHJ1bm5lcg== 23708\nIEJhZw== 23709\nIOq9 23710\nIGNvbWXDp2Fy 23711\nIHBpZ3M= 23712\nIHdlYWtuZXNzZXM= 23713\nUGg= 23714\nIFZpb2w= 23715\nIGRyYWdnaW5n 23716\nIEFxdcOt 23717\nIENTUw== 23718\nIG1pbGxpbWV0ZXJz 23719\nIGVzdMOhcw== 23720\nIGFjdXRl 23721\nIGRlamFy 23722\nacSf 23723\nb2JyYQ== 23724\nTG92ZQ== 23725\nIHNpbGs= 23726\nKioqKg== 23727\nIGpvaW5z 23728\nIHByb2w= 23729\nIOqwkOyCrO2VqeuLiOuLpA== 23730\n2K3Yrw== 23731\nYWdoZXR0aQ== 23732\nw6RubmVy 23733\nIHN0cmFuZw== 23734\nIGRvdWJsZWQ= 23735\nIGRlc2NyaXB0aW9ucw== 23736\nIHN0ZWxsZW4= 23737\nIHBhcnRp 23738\nsoTr 23739\nIMO2xJ8= 23740\naWdoaW5n 23741\nIGFuZ3VsYXI= 23742\nIG5hdHV1cg== 23743\nIFNoZWw= 23744\nxrDGoQ== 23745\nIHJheXM= 23746\nIHNlcGVy 23747\nc3RhcnQ= 23748\ndmlzZWQ= 23749\nIHJ1c2hlZA== 23750\nIGludGVybmF0aW9uYWxseQ== 23751\nIG5pdmVs 23752\nIGJveGluZw== 23753\nZmFsbGVu 23754\n4buRYw== 23755\nIHNlaW5lbg== 23756\ncGxpY2l0eQ== 23757\nIGNhcmJvaA== 23758\nIFRyYXZpcw== 23759\ndXNv 23760\nIFBoYXNl 23761\nIGFjdGl2YXRpb24= 23762\nIG9waW8= 23763\nt6g= 23764\nIGRlY3JlYXNlZA== 23765\nQ2Fy 23766\nIGJ1bmRsZQ== 23767\nIGV4cGVuZA== 23768\nb3JtYWw= 23769\nIGFkamFjZW50 23770\nIG1lZQ== 23771\nINC+0YDQsw== 23772\nIHRyYW5zY3JpcHQ= 23773\nIExhbmd1YWdl 23774\nR1M= 23775\nIHNldWw= 23776\nw6BuaA== 23777\nIG55YQ== 23778\nbmluZ3M= 23779\nIOyLnOs= 23780\nIOuUsOudvA== 23781\nIEFncg== 23782\nw61k 23783\nIGFieQ== 23784\nIE5lbw== 23785\nxLF5b3J1eg== 23786\nIFRoaW5raW5n 23787\nYWltZQ== 23788\nIHZpdGU= 23789\nIHRyYXbDqXM= 23790\nINeR16I= 23791\nINC80LXQtA== 23792\nT3Vy 23793\naG9vdA== 23794\nIGxpbmVy 23795\nIFBpenph 23796\nIGh5Zw== 23797\nZmxpZXM= 23798\nIENvbnRpbnVl 23799\nIGRlbnRhbA== 23800\nIFRpYg== 23801\nIHJlZ3VsYXRl 23802\nbGllw58= 23803\nQUxL 23804\nIFRhZQ== 23805\n6ri4 23806\nIEJyZXhpdA== 23807\nIEd1dA== 23808\nIG9jY3VwYXRpb24= 23809\nIHpyb2Jp 23810\nw6Jt 23811\nIHdoaXNr 23812\nIGthbnNrZQ== 23813\nb21vbg== 23814\ncm9iZQ== 23815\nIHdhcmZhcmU= 23816\nIHRo4buD 23817\nIGpha2k= 23818\nIHN0cm9rZXM= 23819\nIHBlYXM= 23820\nIERhbWl0 23821\nSEFO 23822\nIGludGVyZmVyZW5jZQ== 23823\nINC80LjQvdGD0YI= 23824\nTkVS 23825\nb3V0aW5n 23826\nIHRleHR1cmVz 23827\nn4k= 23828\nb3dp 23829\nIO2VmQ== 23830\nIGRlbnM= 23831\nIHByb3RhZ29uaXN0 23832\nw6Rubg== 23833\nIGdvZGRlc3M= 23834\nIHdvbGx0ZQ== 23835\naWpv 23836\nIFdvY2hl 23837\nIFZQTg== 23838\nc3Rvcnk= 23839\nIGtpbmRlcmc= 23840\nIGZ1bm5lbA== 23841\nIGRpc3RyZXNz 23842\n0L3QvtGB0YLRjNGO 23843\nIG5vaXN5 23844\nINC/0YDQvtC00L7Qu9C2 23845\nIGRhcmFu 23846\nIGVuenltZQ== 23847\n0LvQvtC2 23848\nIG11dGU= 23849\nIGR3YXI= 23850\nINin2LM= 23851\nIGtvbXBs 23852\nIG1lcml0 23853\nIGZvc3Nl 23854\nIERyaW5r 23855\nIGZvcmE= 23856\nIHdvaGw= 23857\nIGJyZWV6ZQ== 23858\nIHNhbml0 23859\nIGRyaW4= 23860\nIOydtOqxsOuKlA== 23861\nIDYy 23862\nIOywqOs= 23863\nYWJ5dGVz 23864\nIGRlZWRz 23865\nINC5 23866\nacOobWU= 23867\naWdnbGluZw== 23868\nICIn 23869\nINGH0LDRgdGC0Yw= 23870\nIEFuc3dlcg== 23871\nIGV2YW5nZWw= 23872\nIDEwODA= 23873\nIFZpc2l0 23874\naWNpZW50 23875\nIHJlbGlhYmlsaXR5 23876\n0Y7RgdGM 23877\nIEVhcmxpZXI= 23878\nIGZpZA== 23879\nIHNsZWV2ZXM= 23880\naXlvcnN1bg== 23881\nIGJpYg== 23882\nIEFjY291bnQ= 23883\n0Y/Qu9C4 23884\nY2lwbGluYXJ5 23885\nemFz 23886\nINCx0LXRgA== 23887\nIG5lY2tsYWNl 23888\nIGJsZW5kZXI= 23889\nIFBoaWxsaXBz 23890\nZXRp 23891\nIEp1cGl0ZXI= 23892\nIHByb3ZvYw== 23893\nIFllYXJz 23894\nZW50cmU= 23895\nYWNpbw== 23896\nIGvDvA== 23897\nIGFudGVubmE= 23898\nIG5vdmVscw== 23899\nIGZhcnQ= 23900\nIFN1Z2Fy 23901\nIEp1ZHk= 23902\nIGNvbGxhcHNlZA== 23903\n57A= 23904\ncml0aXM= 23905\nIOyDge2ZqQ== 23906\n0JfQqw== 23907\nIFZlcmY= 23908\ncmFuZWFu 23909\nZXJldW0= 23910\nIFRhcmdldA== 23911\nIDg4 23912\nINCY0Lc= 23913\naWRlbw== 23914\nIHJlZ3Jlc3Npb24= 23915\n7Lac 23916\nIG3Ds3dp 23917\nIHN0dWRpb3M= 23918\naWVucw== 23919\naXBo 23920\nIGZyeWluZw== 23921\nIGZhc2NpbmF0ZWQ= 23922\nIFdhaA== 23923\nYnVja3M= 23924\nbWF5YQ== 23925\nIFNhdHVybg== 23926\nIE1vbW15 23927\nIHJhdGluZ3M= 23928\nIGF1dHVtbg== 23929\nxrDGoW5n 23930\nIGxvc2Vy 23931\nIGNlbnRybw== 23932\nw6lyaWV1cg== 23933\nIEZvbGQ= 23934\nIHN1cGVydmlzb3I= 23935\nIE5vYmVs 23936\nIHVuZGVyZXN0 23937\nb2JpYQ== 23938\nINCy0YHRjw== 23939\nIHZlcnc= 23940\nIGZ1ZWxz 23941\nIGFydGlmYWN0cw== 23942\nIOu2mQ== 23943\nIEF1dG9t 23944\n25Q= 23945\n15XXoQ== 23946\nIGlobmVu 23947\nIDU5 23948\nb3VuZGluZw== 23949\n0LXRgNGL 23950\naW5hcnM= 23951\nY2hhbnQ= 23952\nIGFkZGljdGVk 23953\nIGV4cGxvc2l2ZQ== 23954\nIGRpc3BlcnM= 23955\n4paI 23956\nYXhpcw== 23957\nQVJZ 23958\nIGx1bQ== 23959\nINGD0YHQuw== 23960\nINiM 23961\nIHJ1cGVlcw== 23962\nIFBlYXJs 23963\nY2FtcA== 23964\ndHY= 23965\nb3lh 23966\nIGNvbmNsdWRlcw== 23967\nIGNvbGxpc2lvbg== 23968\nIGJ1eWVy 23969\nIHBsYXlncm91bmQ= 23970\nIHNwcmluZ3M= 23971\nIGZlbWluaW5l 23972\nIFJhcw== 23973\nIGluY2FyY2Vy 23974\n7ZeY 23975\nIGRpYWxlY3Q= 23976\nIGNsb3N1cmU= 23977\nIGNoYXR0aW5n 23978\nIGJhYmU= 23979\nIHNwb3RsaWdodA== 23980\nIG5vdGF0aW9u 23981\nU3Rhcg== 23982\nacOjbw== 23983\nIHTDqnRl 23984\nIHRpZGU= 23985\nIGp1bnRv 23986\nIHNlbmF0b3I= 23987\n0KU= 23988\nIGV4Y3VzZXM= 23989\nIGJsaW5r 23990\nIGFkbWlzc2lvbg== 23991\nIExpbHk= 23992\n0YvQvNC4 23993\nIGFtaWdv 23994\nIGx1c3Q= 23995\n64us 23996\nIGFtaW5v 23997\nIGNvbnN1bHRhbnQ= 23998\nIEVsZWN0cmlj 23999\nIOuFuOuemA== 24000\ndWphaA== 24001\nIHNob290ZXI= 24002\naWNodGVu 24003\nIFVrcmFpbmlhbg== 24004\nIGFpbXM= 24005\nIEVudGVydGFpbg== 24006\nIG1pcmFjbGVz 24007\nIHplaWdlbg== 24008\nIGxhbQ== 24009\nIHJlc3M= 24010\nIEppbGw= 24011\neWxhbg== 24012\nIHJvb2s= 24013\nIGhheWE= 24014\nIHBhc3Nwb3J0 24015\nYWRhdGE= 24016\nIGp1aWN5 24017\nY29uZg== 24018\n0LvQtdC5 24019\nIFN6 24020\nIGludGVyY2VwdA== 24021\nIFRlYW1z 24022\nIG1ha2Vu 24023\naXJyZWw= 24024\nIExJS0U= 24025\n4bqteQ== 24026\n6rWw 24027\nIHNob3J0YWdl 24028\nIHBhcmFkaWdt 24029\nIHBhcGVs 24030\nIGFzdGVybw== 24031\nIHNvbGxlbg== 24032\nIE1pY2tleQ== 24033\nIE9ybGVhbnM= 24034\nIGNob2xlc3Rlcm9s 24035\nIGdvb3Nl 24036\n0YbQuNGO 24037\nIEZM 24038\nINCz0L7Qu9C+0LI= 24039\nIHRyaWJ1dGU= 24040\nIEdhbQ== 24041\nIMOpdmlkZW1tZW50 24042\n0Y/RhQ== 24043\nIGluYXBwcm9wcmk= 24044\ndWhhbg== 24045\nIG9yZ2FuaXphdGlvbmFs 24046\nYWlsZWQ= 24047\nIGVuZHVyZQ== 24048\nIDc2 24049\nIHNob3RndW4= 24050\nIGxpdnJl 24051\nIHN1aXRlZA== 24052\nIHdhcm10aA== 24053\nIFNJTQ== 24054\nIGVudmlzaW9u 24055\nIGRlZ3JhZA== 24056\nw65uZQ== 24057\nTGF1Z2hpbmc= 24058\nIFdob2V2ZXI= 24059\nIEJ1ZGRoaXNt 24060\nIHNwcmlua2xl 24061\nY2XEn2l6 24062\nIHJ1aW5z 24063\nIHN0YXJjaA== 24064\nIEhlcno= 24065\nIGluanVzdGljZQ== 24066\nIGh1bWlkaXR5 24067\n0L7QttCw0LvRg9C5 24068\nIE9iamVjdA== 24069\nIElnbg== 24070\nIEV4YW0= 24071\naWdlcnM= 24072\nIHRob3U= 24073\nIFNveQ== 24074\naXZhcw== 24075\nIHBvbGVz 24076\nbWF0aA== 24077\nINCy0L3QuNC8 24078\nSU5HSU5H 24079\nZWRyYWw= 24080\nIGV4cGxvcg== 24081\nIHJvYXN0ZWQ= 24082\nIGNyYXds 24083\nIGNvZmY= 24084\nIGFub20= 24085\nIHdpag== 24086\nIGltcHJvdmVz 24087\nIHRyZWF0eQ== 24088\nIGRpc2NvdmVyaW5n 24089\nIHN0YXR1dGU= 24090\nIG1lcmNhZG8= 24091\nINGB0LjQuw== 24092\nIGludGVs 24093\nIENoYW5jZWxsb3I= 24094\nIE1lZGljYWlk 24095\ndWdp 24096\nIHZlcmJhbA== 24097\nIGTDtm4= 24098\nIHNjcmlwdHVyZQ== 24099\nIGl0ZXJhdGlvbg== 24100\nZWtz 24101\nIE94Zm9yZA== 24102\nIHfDpGg= 24103\nIFZhZA== 24104\nIEFL 24105\nIOyVhOydtOs= 24106\nIGlldHM= 24107\nIG5lZWRsZXM= 24108\n2YPZhQ== 24109\nIHBhc2Fkbw== 24110\nIGFsYnVtcw== 24111\nIHllYQ== 24112\nZXR6ZW4= 24113\nhOuPhA== 24114\nIGRldGVybWluZXM= 24115\nIHRoZWU= 24116\nIFBsYXlpbmc= 24117\nw6RydA== 24118\nINem 24119\nY2xlZA== 24120\nIGRvd253YXJk 24121\nYWxvbmU= 24122\nIHNvbHU= 24123\nIHBhcnRpdGlvbg== 24124\nIHd6 24125\nZGQ= 24126\nIHBlc3NvYWw= 24127\nIGZhY3Rvcmllcw== 24128\nIGJsZWlidA== 24129\n4Lih4Liy 24130\nYWxzYQ== 24131\nIE5GTA== 24132\nIGZ1ZXJh 24133\nIHJlc2VydmVk 24134\nIEVhcm4= 24135\nIGhlbHQ= 24136\nIHNob3J0Y3V0 24137\nIGNvbnZpbmNpbmc= 24138\nc3BhY2U= 24139\nIGVuZm9yY2U= 24140\nIGNvcmVz 24141\nIGVmdGVy 24142\nIHJlY2Vzc2lvbg== 24143\neGljbw== 24144\nIHByb3Bvc2l0aW9u 24145\nYXJpYW5z 24146\ncm9wb2w= 24147\nIOuqsOs= 24148\nIM6c 24149\nIOyalOymmA== 24150\nIGFjdGl2aXN0 24151\nIGNvbnZpY3Rpb24= 24152\nIHphYg== 24153\nIGNhbmNlbGVk 24154\n0YLQvtGH0L3Qvg== 24155\nIM6u 24156\nbml0ZQ== 24157\nIGZ1bmRyYQ== 24158\nYnV6emVy 24159\n0LXQu9C+ 24160\naWNhdGlvbnM= 24161\nIHpvbmE= 24162\nIHRlZW5z 24163\nIG1ldGhvZG9sb2d5 24164\nIOykkeyalA== 24165\ndGhhbg== 24166\nIFVs 24167\nIEdyZXk= 24168\nIGhvZw== 24169\nSU5L 24170\nIFN1bmc= 24171\nIENsYXVk 24172\nIENOTg== 24173\nIGRlbGl2ZXJz 24174\nYWxpbg== 24175\nIEFkb2Jl 24176\nb3RoZQ== 24177\nIERlc3dlZ2Vu 24178\n4Liz 24179\nIHdlcmRl 24180\nIGdyZWFzZQ== 24181\nIHVwZ3JhZGVz 24182\nIEZpbmxhbmQ= 24183\nYWNjZXB0 24184\nIGludGVycm9n 24185\nYmVl 24186\nIHByZWRl 24187\nIE5lcA== 24188\nIENhbWJyaWRnZQ== 24189\nIGdyYXBocw== 24190\nIGhhdW50ZWQ= 24191\n0YHQtdC8 24192\n5qc= 24193\nU29tZQ== 24194\nIE1hbGw= 24195\nIHJlaGVhcnNhbA== 24196\nIFVyYmFu 24197\nIExhZw== 24198\nIG5pbQ== 24199\n6rCV 24200\nIHBvc2l0aW9uZWQ= 24201\nIGF2b2lkZWQ= 24202\nRU1B 24203\nIGxsZWdhcg== 24204\nIHLDoXBpZG8= 24205\nIGdvdXZlcm4= 24206\nIGhpbmc= 24207\nIGRlYWxlcg== 24208\nIHJlZm9ybXM= 24209\nIGZhdHR5 24210\n0LrQvtC7 24211\nIEFjZQ== 24212\nIG5lcA== 24213\nIOyyrQ== 24214\nIGNvbXB1dGF0aW9u 24215\nIFN0cmVhbQ== 24216\nYm91cm5l 24217\ndHVy 24218\nUG9y 24219\nIHNsZWVweQ== 24220\nIGJhbmdldA== 24221\nIHdlaWdocw== 24222\nIGJsZWliZW4= 24223\nIEdyZW4= 24224\nIHVuaW9ucw== 24225\nIOq1kA== 24226\nIGFwcmVuZGVy 24227\ndWl0YXI= 24228\nIEplc3Q= 24229\ndW1pbmc= 24230\nIFBsYXllcg== 24231\nIEV4dHJlbQ== 24232\nIGludGVnZXI= 24233\n0LDRh9C1 24234\nIGNvbmNlcnRz 24235\n15XXmw== 24236\nIHRyb2NoxJk= 24237\nIFJlcGU= 24238\n4LmC 24239\nxbxlbg== 24240\nIHNvdW5kaW5n 24241\nIGFub255bW91cw== 24242\nIGV4Y2E= 24243\nIElyYW5pYW4= 24244\nIGVuZXJnZXRpYw== 24245\nIHdpdmVz 24246\nINGG0LLQtdGC 24247\nIGFpcw== 24248\nIHN1ZGFo 24249\nIHVuZGVyd2Vhcg== 24250\nIGNydW5jaHk= 24251\nIFBhaW4= 24252\nIGdlcsOnZWs= 24253\ncmVkaWN0 24254\nIG1pc21h 24255\n0ZbRgg== 24256\nIHN1cnZpdmluZw== 24257\nzq3Pgg== 24258\nIHBhcnRpY2lwYW50 24259\nIEhlc3Nlbg== 24260\nw6FyaWFz 24261\nIHN1YndheQ== 24262\naXN0w6Q= 24263\nIGNvcmFs 24264\nIG1hcmlqdWFuYQ== 24265\nIE1lbW9yaWFs 24266\n0YjQuNC5 24267\ncml6 24268\nIHNhdGVsbGl0ZXM= 24269\nIGxlYXNl 24270\nIENhbWVyb24= 24271\ndW1waA== 24272\nIGNsYXNzbWF0ZXM= 24273\nw6Row6Ru 24274\n0YHRgtCy0LU= 24275\nIGh1ZQ== 24276\nk6TsnYQ= 24277\nIHByb3BvcnRpb25hbA== 24278\nIG5vc3M= 24279\nIGxhcHM= 24280\ncsOl 24281\nIGJpdGNvaW4= 24282\n0JfQq9Ca0JA= 24283\nIOy2qQ== 24284\nINmE2YQ= 24285\nIE1vcnQ= 24286\nIEVzcA== 24287\nYXJub3M= 24288\nINGB0LrQsNC30LDQuw== 24289\nIMOkbmQ= 24290\n15nXmded 24291\nIEdlYg== 24292\nZ2VoZW4= 24293\nSW5hdWRpYmxl 24294\nYm9yb3VnaA== 24295\n0YTRhA== 24296\nIGZlbGxvd3NoaXA= 24297\nIFBhcGVy 24298\nIGN1cnZlZA== 24299\nIEdFT1I= 24300\nIGNhbGN1bGF0b3I= 24301\nIENhdGFs 24302\nIHbDoG8= 24303\nIGJ5cGFzcw== 24304\n0LvQtdGC 24305\n4LM= 24306\ndHJhbnM= 24307\ncmVuY2llcw== 24308\n7KGM 24309\naWdlbnQ= 24310\nIHRhc3RlZA== 24311\nIG9jZWFucw== 24312\ndWZ0 24313\nZXJ2aWNl 24314\nINCc0KPQl9Cr0JrQkA== 24315\nIENsYXNzaWM= 24316\nIHJlc3BlY3RpdmVseQ== 24317\nfik= 24318\nw650cmU= 24319\nIE5hc2g= 24320\nIHppdA== 24321\nIOybgw== 24322\nIOuGkg== 24323\ncXVvdGU= 24324\nIFVucw== 24325\nIHRhYw== 24326\nIHByb3Zlcw== 24327\nIFBvcnRsYW5k 24328\nYmx5 24329\nIGVyZQ== 24330\n7LaU 24331\nIMOpcG9jYQ== 24332\nINGC0YvRgdGP0Yc= 24333\nNzY= 24334\nIGhhZGU= 24335\nIEZybw== 24336\nIHBvbMOtdGljYQ== 24337\ndGFn 24338\nIO2VrQ== 24339\nIHNjaMO2 24340\nYXJldHQ= 24341\nIHByb3Zpc2lvbnM= 24342\nIG1vdG9ycw== 24343\nIGltYWdpbmc= 24344\nIGRvaw== 24345\ndWxvdXNseQ== 24346\nIG1laWxsZQ== 24347\n65A= 24348\nIElTTw== 24349\nIFNURU0= 24350\nIEJvd2w= 24351\nIHRvd2Vycw== 24352\nIEVl 24353\nIFBlcmZvcm1hbmNl 24354\nIGxvaW4= 24355\nY3Vzc2lvbg== 24356\nIGNvYXN0YWw= 24357\naWFsZQ== 24358\nY29tcGFzcw== 24359\nIHNwZWxscw== 24360\nIGRpc2FwcG9pbnRpbmc= 24361\nIOuyiOynuA== 24362\nRUVS 24363\nIHZlcnNhdGlsZQ== 24364\nYXN1cnk= 24365\nIGVuZmlu 24366\nIGRvd25zaWRl 24367\nIGd1aWRpbmc= 24368\nINin2YTZgg== 24369\nIG5pbmV0eQ== 24370\nY2hhcmdlZA== 24371\nIEZhbnM= 24372\nIHBoaWxvc29waGljYWw= 24373\nIGdhcm4= 24374\nIG3DpW5nYQ== 24375\nIHdpbGxpbmduZXNz 24376\nIHBvcnRpb25z 24377\nYWJlbg== 24378\nIO8= 24379\nwr8= 24380\ncmF1bA== 24381\nIHNwcmludA== 24382\naWZlbg== 24383\nxLF5bGE= 24384\nINC60YPQvw== 24385\nIGVuc3VpdGU= 24386\nIENhcGl0b2w= 24387\nIDYz 24388\nINCz0L7QstC+0YDQuNGC 24389\nIGFwcG9pbnRtZW50cw== 24390\nb21pYXN0 24391\nIGNhcmVn 24392\nIHB1Ymxpc2hlcg== 24393\nIGhlcmF1cw== 24394\nIM61zq8= 24395\nIFZT 24396\nIHNhY3JpZmljZXM= 24397\ndGhpcmQ= 24398\nIGh1bWFuaXRhcmlhbg== 24399\nIOuCtOw= 24400\naW1vbg== 24401\nIGluZXF1 24402\nIHpvYg== 24403\nIGNvbWZvcnRhYmx5 24404\nIERpbmdl 24405\nIGNhbmNlbGxlZA== 24406\nIFBTQUtJ 24407\nIFJvYmluc29u 24408\nIGZpbnM= 24409\nKT8= 24410\nIEhpc3Rvcg== 24411\nINGH0LXQu9C+0LLQtdC60LA= 24412\nIHRic3A= 24413\ndGV4dA== 24414\na2lt 24415\nIHVwZGF0aW5n 24416\nIGdlbGQ= 24417\nZmVsZA== 24418\nj7w= 24419\nIG3DpA== 24420\nIGNhZsOp 24421\n1oA= 24422\nIFNyaQ== 24423\nIFJlZ2lvbg== 24424\nIEhhaGFoYQ== 24425\nIGZpbmFuY2Vz 24426\nINin2YTYtA== 24427\nIGJ1bms= 24428\ncnVr 24429\naGFmdA== 24430\nIGxhdGVyYWw= 24431\nIGV4dGVuc2lvbnM= 24432\nIOyVhOydtA== 24433\nIGRlZmluaXRl 24434\nIFpoYW8= 24435\nIEx1aXM= 24436\nc3R5 24437\nIGNhc29z 24438\nIEtsaW0= 24439\nIDE5OTM= 24440\nIHJlYWxpemF0aW9u 24441\nIGhpc3Rvcmlhbg== 24442\nIGNyYWNrZWQ= 24443\n64K0 24444\nIHN5c3TDqG1l 24445\nIENJQQ== 24446\nINGC0LLQvg== 24447\nb3NwaGVyaWM= 24448\nIGZsZWU= 24449\nIHLhuqV0 24450\nIFJlZ2FyZGxlc3M= 24451\nIHJlbHVjdA== 24452\nIHRpbWVseQ== 24453\nIEp1bGlhbg== 24454\nR00= 24455\n6ZI= 24456\nYWR1cmE= 24457\nIGRyZXNzZXM= 24458\nIOuUlA== 24459\nIG5vbWluYXRlZA== 24460\nIGFkdm9jYXRlcw== 24461\neW1waA== 24462\nIHJlY29yZGluZ3M= 24463\nIGRldmlhdGlvbg== 24464\nIHByaW9yaXRpemU= 24465\nIHNwaXJhbA== 24466\nIFlPVVI= 24467\nIHRyYW5zcG9zZQ== 24468\nYW1wb28= 24469\nIOybkOuemA== 24470\nIFZpc2lvbg== 24471\nIHBvbGl0ZQ== 24472\nIGhhbWI= 24473\nIFBhdGllbnQ= 24474\n7YGs6w== 24475\nIHNpYQ== 24476\nIOqzsw== 24477\nIMW+ZQ== 24478\nIHN1cGVybWFya2V0 24479\n67k= 24480\nIFNpZXJyYQ== 24481\nIGdyaWxsZWQ= 24482\nIFVwb24= 24483\nIGFic2VudA== 24484\nIG1lYw== 24485\nIEFwb2xsbw== 24486\nIHB1bms= 24487\nIFBhxYRzdA== 24488\nINGB0LLQvtC5 24489\nIOqxsOq4sA== 24490\nR2lybA== 24491\nIHNraW5ueQ== 24492\nIFByZW1pZXI= 24493\nIHRlcnJpdG9yaWVz 24494\nIGxpYWJpbGl0eQ== 24495\nIGplcms= 24496\ncmF0aWM= 24497\nIGRhbmNlcnM= 24498\nINGD0YDQvtCy 24499\nIOq0gOs= 24500\nb25seQ== 24501\nIFN0dQ== 24502\nIHNrZWxldG9u 24503\nIOutkOs= 24504\nINC30LDQutC+0L0= 24505\nxLFrdA== 24506\nIE1JS0U= 24507\nIGzDtg== 24508\nbWll 24509\nIHJlaXRlcg== 24510\nIEtvbGxlZw== 24511\nIEFkYW1z 24512\nbGljaGVy 24513\nIMOnb2N1aw== 24514\n0Y/Qsw== 24515\nIGJsdXNo 24516\nIHN1bnNoaW5l 24517\nIGV6 24518\nIERldmls 24519\nIOq4uA== 24520\nYWRk 24521\nIGxpY2Vuc2Vk 24522\nIHZpbnls 24523\nIEN6ZWNo 24524\naW1hZw== 24525\nIGNyYWNraW5n 24526\nIOy6 24527\nIHVkYWg= 24528\nIHNvbW1lcw== 24529\nIOyWvOq1 24530\nd2HEhw== 24531\nIGZyZXM= 24532\nIFdhbG1hcnQ= 24533\nINCi0LXQv9C10YDRjA== 24534\nYXRpc2Y= 24535\nQ0k= 24536\nbGFuZw== 24537\nIGRpZmZ1c2lvbg== 24538\nIHNvbW9z 24539\nIE1ha2Vz 24540\nIFJpY2t5 24541\nIG11Y2hh 24542\n7ZWo 24543\nIGhvcnNlcG93ZXI= 24544\nYXNpYQ== 24545\nIGZpYmVycw== 24546\nIGVybQ== 24547\n0YHQutC40LU= 24548\nIGplc3Rl 24549\nIGZpcmVmaWdodA== 24550\nIGN1aXNpbmU= 24551\nIGJlc29uZGVycw== 24552\nZGln 24553\nIOyihQ== 24554\nINGD0LY= 24555\nIHRyYWNpbmc= 24556\nIGNlcnRhaW5z 24557\nIEFwcGx5 24558\n0YvQstCw0YLRjA== 24559\n54w= 24560\nIGJydQ== 24561\nIFlFUw== 24562\nIEJhaQ== 24563\nIERpdA== 24564\nIEJpcw== 24565\nIHVubGU= 24566\n0YHRgtCw0YLQvtGH0L3Qvg== 24567\nIEF3YWs= 24568\nLi4i 24569\nIDEyNQ== 24570\nIHJvb3RlZA== 24571\nIGNhdXRpb3Vz 24572\nY29uc3Q= 24573\nIG9yY2hlc3RyYQ== 24574\nINCy0L3Rg9GC 24575\nIHF1ZWxxdQ== 24576\nINC+0YLQstC10YI= 24577\nIE1ldGhvZA== 24578\n7Lmc 24579\nIM68zrHPgg== 24580\nbMO8 24581\nIOyVhOq5jA== 24582\nIG5hbWluZw== 24583\nQ2hhcg== 24584\nIFNpY2hlcg== 24585\nIHByaXZpbGVnZWQ= 24586\nIEZseQ== 24587\n4bqtdA== 24588\nIGFkdmFuY2Vz 24589\nIFplbGRh 24590\nIGFuZHJh 24591\nIGdyaW5kaW5n 24592\nIEVkaXRpb24= 24593\ncGY= 24594\nIHdhcnJpb3Jz 24595\nIGhlZGdl 24596\nIHVuc2VyZW4= 24597\nINGB0Y7QtNCw 24598\nZWxpbmVzcw== 24599\nIHBlcnNvbmFsaXRpZXM= 24600\nIGbDtg== 24601\nJ00= 24602\nINGC0L7Rh9C90L4= 24603\nIHNoaXBwZWQ= 24604\nIG1ldGVvcg== 24605\nIHN1cnJvdW5kaW5ncw== 24606\nIEZpbGw= 24607\ndWVzdGE= 24608\nIFBlcnNvbmFs 24609\nIEFsbGU= 24610\nT1JU 24611\nIFNjaGU= 24612\nVkk= 24613\nIGNvbXBhcmFibGU= 24614\nZGFtbg== 24615\nIGRpdGNo 24616\nWUFO 24617\naXNtdXM= 24618\nIHBpY2t1cA== 24619\nIGRhaw== 24620\nIEVQ 24621\nYmVzdA== 24622\nIFN1ZQ== 24623\nw6RsbHQ= 24624\nIHBvcGNvcm4= 24625\nIGZvbGRpbmc= 24626\naG9tZQ== 24627\n0LjQstCw0LXRgg== 24628\nIGFubm90 24629\nY2h1Y2s= 24630\nIGZpZXJjZQ== 24631\nIGRhbWFnaW5n 24632\nIGZsb3A= 24633\nIHBhc2Fy 24634\nIHJlZWY= 24635\nINGB0LLQvtC10Lk= 24636\nIHpvbw== 24637\nb3ZlcnM= 24638\namV0cw== 24639\nIHByw6hz 24640\nIFNpbGljb24= 24641\ndGVvaw== 24642\nIFNldGg= 24643\nYXRhbWVudGU= 24644\nIHRyYW5zbWl0dGVk 24645\nIHJlcGxpY2F0ZQ== 24646\nIHNsaW0= 24647\nIENyZWFt 24648\nIHNpZGV3YWxr 24649\n7IiY6w== 24650\nINC20LjQt9C90Yw= 24651\nIE1vbmljYQ== 24652\nIGNvcGllZA== 24653\nIFRlcnJh 24654\naXN0ZW50 24655\nINC+0L3Qvg== 24656\nIHdoYWxl 24657\nIFdJVEg= 24658\n0LvRg9GI 24659\nIEVlbg== 24660\nINGB0LLQvtC4 24661\nIG9yZGlu 24662\nIHBsdXJhbA== 24663\nIHNwb2tlcw== 24664\nIGRpc3B1dGU= 24665\nIHNlbnNpYmxl 24666\nIHByZWFjaGluZw== 24667\nIGt0w7Nyenk= 24668\ncHRlZA== 24669\nYXZpZXI= 24670\nIHBpc3RvbA== 24671\nIFRhcGk= 24672\nIMWC 24673\nZmZmZg== 24674\nIGFjcnlsaWM= 24675\nIGlnbm9yYW5jZQ== 24676\nIFppZWw= 24677\ncmFucw== 24678\nIHdlbGRpbmc= 24679\nbWlk 24680\nINC30LDQvdC40Lw= 24681\nIGxhbmVz 24682\nIG1pbmVz 24683\nIG1vbXM= 24684\n15XXlw== 24685\nIENoYW1iZXI= 24686\ndGllcg== 24687\nIG1vZGVzdA== 24688\nIOyXrOq4sOyEnA== 24689\nIHVuYXM= 24690\nIHdyZW5jaA== 24691\naGFuZGVk 24692\nIHNhdHVyYXRlZA== 24693\nIEZhbmc= 24694\nIENvbW1pc3Npb25lcg== 24695\n4KSw 24696\nINeW 24697\nIExvdWlzaWFuYQ== 24698\nIE1hc2s= 24699\nIGN1YmVz 24700\n7JSo 24701\nIHZpZMOpb3M= 24702\nIG7DpWdvbg== 24703\nIHJpZGVy 24704\nIOy2nA== 24705\nIHPDs24= 24706\nIExhdGlubw== 24707\nYmFuaw== 24708\n7ZW07KO8 24709\nIEJyZW5k 24710\nIHNleHVhbGl0eQ== 24711\nLi4uLA== 24712\nIGZvcmdldHRpbmc= 24713\nINuM 24714\nIEF2ZW5nZXJz 24715\nIEJvbmpvdXI= 24716\nY2Vzc29y 24717\n0LrRgNCw0Zc= 24718\nY2VuY2U= 24719\nIGdlb2dyYXBo 24720\nY3Vsbw== 24721\n0L7RgdGC0Yw= 24722\nIHN3ZWF0aW5n 24723\n7YOA 24724\nIHN5bW1ldHJ5 24725\ndHPDpQ== 24726\nIGphbg== 24727\nIEZlcnI= 24728\nIGFtYmFzc2Fkb3I= 24729\nemnEmWs= 24730\nIG11c3Vu 24731\nINGD0YI= 24732\nIExH 24733\naXNzZW50 24734\nY29tbXVu 24735\nIGNvdXJz 24736\nIGRldmVsb3Bz 24737\nIGJyb256ZQ== 24738\nIHN1YnN0YW5jZXM= 24739\nZHJpdmVu 24740\n7KO87IS47JqU 24741\nIGFvcw== 24742\nIFBST0ZFU1M= 24743\naGFsZg== 24744\nIHNvcnRlZA== 24745\nIEJvbWI= 24746\n0LvQsNCz 24747\nIE1hbGF5c2lh 24748\nIENocmlzdGluYQ== 24749\nIHRlYW1tYXRl 24750\nRlQ= 24751\nIGvEsQ== 24752\naGVhcnRlZA== 24753\nKys= 24754\nb2dlbmlj 24755\nIGJlbGxz 24756\nIE91YWlz 24757\nIHNwZWNpYWxpc3Rz 24758\n0LHRiw== 24759\nZGVwdGg= 24760\nbGFzc2Vz 24761\nZ2llcw== 24762\nIENvZmZlZQ== 24763\nIG1hcmtpbmc= 24764\nIGZvbGw= 24765\ndWxp 24766\nIGFkaGVzaXZl 24767\nIEJvdA== 24768\nIFB1bmt0 24769\nZXll 24770\nIEJ1Yg== 24771\nZWxvbmc= 24772\nINC/0YDQuNC6 24773\nIGRvbm9y 24774\nODQ= 24775\nIGVuZm9y 24776\nIGNhdGNoZXM= 24777\nIGJyaWNrcw== 24778\nIGtuaXR0aW5n 24779\nIEtub3dpbmc= 24780\nb2tz 24781\nSFk= 24782\ncmlkZQ== 24783\nIEZhbnRhc3k= 24784\naW1hbg== 24785\nIHBzZQ== 24786\nIOyYqA== 24787\nINCy0LQ= 24788\nIHJlc3RyYQ== 24789\nIGV2YWx1YXRlZA== 24790\n0YDQtdCy 24791\nIGZvcnR1bmF0ZWx5 24792\nIGNoZWdhcg== 24793\n2LHYqA== 24794\nIGRvbWFpbnM= 24795\naWJp 24796\nYXJyeQ== 24797\nIHNodXR0ZXI= 24798\nIGZpY291 24799\nTWlrZQ== 24800\nIGluY2x1 24801\nIGRvbm9ycw== 24802\nIGFwbA== 24803\nIExvd2Vy 24804\nIGltcG9ydGVk 24805\nIGFjYWRlbXk= 24806\nIGZpbmFscw== 24807\nIGRpc2FwcGVhcnM= 24808\n2YrYpw== 24809\nIGFkbWluaXN0cmF0b3I= 24810\nanM= 24811\nIGN1dHRlcg== 24812\nIHJhbmdpbmc= 24813\nw7ZycGVy 24814\nIGNvbnN0cmFpbnQ= 24815\nIFRhYmxl 24816\nIFNoYW4= 24817\ndmlj 24818\nIEZpeA== 24819\nIFN3aWZ0 24820\nb3VuY2Vz 24821\nIFdhcnVt 24822\nIGxldHR1Y2U= 24823\nYXBwZWxsZQ== 24824\nIHNoYXZl 24825\nIGLDoXM= 24826\nIDc3 24827\nIE9vbw== 24828\nYW8= 24829\nIE1jTQ== 24830\nIERyZXc= 24831\nIGx1bXA= 24832\nIGxhc2hlcw== 24833\nc2NoZWlubGljaA== 24834\nUmVw 24835\naW5pcw== 24836\nIENldHRl 24837\nIGNvbXBvc2l0ZQ== 24838\nZW1ldGVyeQ== 24839\nIHNvcnRl 24840\nIEZpbmFuY2lhbA== 24841\n0L7QvdC1 24842\ncm9uZXM= 24843\nIFZveQ== 24844\nIHTDqWM= 24845\noLk= 24846\nIE5pbmph 24847\nIENvcmlu 24848\n0LXQvdC90Y8= 24849\n7J207JeI 24850\nIG5pY2g= 24851\nIGRldGVjdGl2ZQ== 24852\n4oCmIg== 24853\nz4POtQ== 24854\nnbzrj4Q= 24855\nIOuzgA== 24856\nIOu4lOs= 24857\nIHByb3Bl 24858\nIFdyaWdodA== 24859\nINeU16o= 24860\nIFNoaQ== 24861\nIGludmVzdGlnYXRpb25z 24862\nIFBvd2VyUG9pbnQ= 24863\nIENodQ== 24864\nIOyYpO0= 24865\nIOyZhOyghA== 24866\nIEZyYWdlbg== 24867\ndW5uaW5n 24868\nIHBvdXJyYWl0 24869\nIHRleHRib29r 24870\n0LzRiw== 24871\nIGZhaHJlbg== 24872\nINGC0L7RgA== 24873\nIGxha2Vz 24874\nw7xuZGU= 24875\nSW50 24876\nIE1ldHJv 24877\nIG1hbnNpb24= 24878\nINCw0LE= 24879\nIFpob3U= 24880\nIGNvcnJpZG9y 24881\nIGVzY29s 24882\nIGluZGljYXRpbmc= 24883\naWHFgmE= 24884\nIG1vbW15 24885\nIGFyY2hpdmVz 24886\nIGZvdW5kZXJz 24887\nZW5naW5l 24888\nIERpZXU= 24889\nIHNpY2tuZXNz 24890\nIOuztOuLiOq5jA== 24891\nIGFyYg== 24892\nIG5lZA== 24893\nIENob3A= 24894\nIGNvdmlk 24895\nIHNsYW0= 24896\nIHB1YmxpY2F0aW9ucw== 24897\nREM= 24898\nIHNwZW5kcw== 24899\n5r4= 24900\nIHJlZnVnZWU= 24901\nIGRpbGU= 24902\nINeQ15Y= 24903\naWZpY2Fy 24904\nIFNhY2g= 24905\nR3U= 24906\nIHJlbG9hZA== 24907\nPz8/Pw== 24908\nIGplxZtsaQ== 24909\nINGB0L7RgdGC0L4= 24910\nIHNpbXBsaWNpdHk= 24911\nIGJ1bGx5aW5n 24912\nINC80L7Quw== 24913\nIHJlYWxpZGFk 24914\nIHVuY2xlYXI= 24915\nYXBwYQ== 24916\nbGV2YW50 24917\nIElTSVM= 24918\nIFdhdHNvbg== 24919\nIGRlaW4= 24920\nIE1pY3Jv 24921\n7ZWc6w== 24922\nw7xn 24923\nIGRldmFt 24924\nIHR3ZWV0ZWQ= 24925\nIHVuZGVyc3RhbmRhYmxl 24926\nYXRhbg== 24927\nIHZlcnNh 24928\nIHByZWNh 24929\nIHbhu4E= 24930\nIENvcHk= 24931\nIE9yYWNsZQ== 24932\nIG1pbmRmdWxuZXNz 24933\nIGRpc2NyZXQ= 24934\nZXJuZW4= 24935\nIFBsZQ== 24936\nSGF2ZQ== 24937\nIGlzb2xhdGU= 24938\nIGRldQ== 24939\nIHNldmVudHk= 24940\nIEhpbGxz 24941\nIGFyY2FkZQ== 24942\nINGB0L/QtdGG0Lg= 24943\nIHNpZ3VpZW50ZQ== 24944\nIELDnE5ETklT 24945\nbGlnYQ== 24946\nINCy0YHRgtGA0LXRhw== 24947\nw7Rt 24948\nIHR3ZWV0cw== 24949\nIHNjaGF1ZW4= 24950\nIGNyaXRpcXVl 24951\nIPCfjrU= 24952\nIHN0YXR0 24953\nINGB0LDQvNC+0LU= 24954\nw6JuY2lh 24955\nIHN1cGVybmF0dXJhbA== 24956\nIHBsdWdnZWQ= 24957\nRmw= 24958\neW7EsQ== 24959\nIFRhbWJpw6lu 24960\nIGVuY291cmFnZW1lbnQ= 24961\nIFNlcnZlcg== 24962\n64Kc 24963\ndXBh 24964\nIGFzdG9u 24965\nIGhlYXJz 24966\n0YDQsNGF 24967\nIHNjaGU= 24968\nIHJhdHM= 24969\nIHJlY3VwZXI= 24970\nIHVudGVu 24971\nIEZpZ2h0aW5n 24972\nIGFjYWRlbWljcw== 24973\nIFPDvA== 24974\n0YHQutC40YU= 24975\nIHBhaXJlZA== 24976\ngOydhA== 24977\nIMOhcmVh 24978\nIHN3ZWV0bmVzcw== 24979\nIGRlZmVy 24980\nIG11aXRhcw== 24981\nIEF1ZGlv 24982\nIGxvY2tlcg== 24983\n2YrYrw== 24984\nINGB0YLQsNCy 24985\nIGJ1ZW5h 24986\nQU5T 24987\nIGRldGVjdG9y 24988\nYXZv 24989\nYmVr 24990\nIM6xzr0= 24991\n7Y64 24992\nIGRyYWdnZWQ= 24993\nINC00L7Qu9C20LXQvQ== 24994\nw5Y= 24995\n2LHYqQ== 24996\n7J207KeA 24997\nIGNlbGxl 24998\nY2tpbmc= 24999\nINin2YTYrA== 25000\nIENhbnZhcw== 25001\nIGVzcGHDsQ== 25002\nIGdsaW1w 25003\nIHNwcmVhZHM= 25004\nb25nbw== 25005\nIE1hc29u 25006\nIEluZw== 25007\nIOqwgOuKpQ== 25008\nz4TOuc66 25009\nIHNlY3VsYXI= 25010\nIGJhdGVy 25011\nIGlucXVpcnk= 25012\nIGVuZXJnaWVz 25013\nIG1hbnVmYWN0dXJlZA== 25014\nIHZlZ2V0YXJpYW4= 25015\nIHBpbmVhcHBsZQ== 25016\n0Y/RgtCw 25017\nIHByYWN0aXRpb25lcnM= 25018\nMjAwMA== 25019\nIO2VtOyalA== 25020\nIOyXrOufrOu2hOuTpA== 25021\nIOu2iOs= 25022\nIEplZmZlcnNvbg== 25023\nIEpvYW4= 25024\nIHRyYW0= 25025\nY2htYWw= 25026\nIEhhaXQ= 25027\n4bmH 25028\nIHVucmVhbA== 25029\nIHN5bWJvbGlj 25030\nIHN0ZWFsdGg= 25031\nIHNwbGFzaA== 25032\nIEVudGVydGFpbm1lbnQ= 25033\nIG1ldGFsbGlj 25034\nPyIu 25035\nYXJvdW5k 25036\nIGRlc3BhaXI= 25037\nIE5ldmFkYQ== 25038\nIEZpbmFuY2U= 25039\nIGtyaWU= 25040\nIEx1eA== 25041\nIFNtYXNo 25042\na2VlcGluZw== 25043\nINC30LDQsw== 25044\nIG5hcmNpc3M= 25045\nIGR6aXNpYWo= 25046\nIHRvbGVyYXRl 25047\nb2FyZA== 25048\nIGxpbmtpbmc= 25049\nIEVjb25vbWlj 25050\nIOy8 25051\nIG1vcnBo 25052\nIE5haw== 25053\nIEJha2Vy 25054\nYXRvbg== 25055\ncmluZ3M= 25056\nIFBlbmc= 25057\nIEFpcnBvcnQ= 25058\n7ZWY64uk 25059\np4E= 25060\ncHJpbnRz 25061\nIGhhZGk= 25062\nIGVtcGly 25063\nIExpdmVz 25064\nYW5uZXJz 25065\nINC90LjQvA== 25066\nIFBST0ZFU1NPUg== 25067\nIHBvc2l0aXZlbHk= 25068\nYW50b20= 25069\nIGJhZGdl 25070\na2VsdA== 25071\nIGludGVyZmVy 25072\nIGZ1bGZpbGxpbmc= 25073\nIHZpc3VhbGl6YXRpb24= 25074\nIFByaWNl 25075\n77+977+9 25076\nIHNjZW5lcnk= 25077\nIHByb25l 25078\nIHdpemFyZA== 25079\nIGJhbnlhaw== 25080\ndmVyYg== 25081\nc2t5 25082\nIHdpc2hlZA== 25083\nIHJhaWx3YXk= 25084\nIMO8emVy 25085\nIGFsZ3VpZW4= 25086\nIEFX 25087\nINC60L7Qu9C40YfQtQ== 25088\nIHJlYWN0aW5n 25089\nIEJ1Y2g= 25090\n4Li2 25091\nIGFudGg= 25092\nIHNpaA== 25093\nIGh1c3Q= 25094\nIFNjcmVlbg== 25095\naWxhbnQ= 25096\nYWhv 25097\nIGZyYWdyYW5jZQ== 25098\nIGVsZXZhdGlvbg== 25099\nIE1lZGl0ZXI= 25100\nIOu/ 25101\nIMOpcXU= 25102\nIHdyYXBz 25103\nIGluZXJ0 25104\nIHJlY3JlYXRl 25105\n0LvQsNGC 25106\nIGJvbGVo 25107\nIGhhcmFzc21lbnQ= 25108\ndW5reQ== 25109\nIGdsaW1wc2U= 25110\ncmVnaWVydW5n 25111\nIGZ1dHVy 25112\nIHJlcG9zaXRvcnk= 25113\nIGVuZ3Jh 25114\nIHRyYWZmaWNraW5n 25115\nYXNzaXM= 25116\nIFRyZWs= 25117\nIOuyjA== 25118\nIOuniOs= 25119\nIEthYg== 25120\nYW5pdQ== 25121\nZ2l2ZQ== 25122\nIGRpbm9zYXVycw== 25123\nIGZlYXRoZXI= 25124\nIGF0dGl0dWRlcw== 25125\nIHBsdW0= 25126\nIFJT 25127\nIEFuZmFuZw== 25128\naWxsZXJ5 25129\nIOyKpA== 25130\nTVk= 25131\nIHRyemViYQ== 25132\nIHNraWVz 25133\nIEFq 25134\ndXJhYmxl 25135\nQ1U= 25136\nIFNoYW5l 25137\nIGRlcGFydHVyZQ== 25138\nIFRPTg== 25139\naWV0ZW4= 25140\ncmF0cw== 25141\naXN1 25142\nIGJvcmQ= 25143\nIGludGVyZXN0aW5nbHk= 25144\nb3VnaGluZw== 25145\nIHJ1c2hpbmc= 25146\nIHZvbGF0aWxpdHk= 25147\nIHB5dA== 25148\nIGZvcm1hdHM= 25149\nINC30LDRgg== 25150\nIOq8rQ== 25151\nIHdoYXRub3Q= 25152\nIGNvbXBvcnQ= 25153\nc3c= 25154\nb3JlYW4= 25155\nIFJlbGF4 25156\nIGNsYW4= 25157\nIEFI 25158\nIHBldw== 25159\nIGRpY3Rpb25hcnk= 25160\nVGFrZQ== 25161\nc2hpcnRz 25162\nIEh1Z2g= 25163\nINi52YTZig== 25164\nIFBpYw== 25165\nIGVucm9sbGVk 25166\nIGplZG5haw== 25167\nIG9mZmVyaW5ncw== 25168\nIGNvcmF6 25169\nTGlmZQ== 25170\nICEhIQ== 25171\nIGNsZXI= 25172\nIFZpZGVvcw== 25173\nIFJvZHJpZw== 25174\nIElkZW50 25175\nIFBvcw== 25176\nIFN0YWdl 25177\nIFJhY2U= 25178\nIGVuYWN0 25179\nIEd5 25180\nIEhpc3Bhbg== 25181\nIGRlZmVuY2U= 25182\nIENhbXBiZWxs 25183\nbWF0aWM= 25184\nIHJlbGV2 25185\nIHBlYWNo 25186\nhLjsmpQ= 25187\nIHBhcmFkaXNl 25188\nIGNlcmVtb24= 25189\nIGFubm95ZWQ= 25190\nbGF4 25191\nIGV4cGxvaXQ= 25192\nIGNsYXVzZQ== 25193\nZWtlcg== 25194\nIEJsb29t 25195\nbmFudA== 25196\nYXRldXJz 25197\nIGhlaWdodHM= 25198\nRXZlbg== 25199\n0YHQvtC9 25200\nIG91dHJhZ2U= 25201\nIFZpZXRuYW1lc2U= 25202\nVFI= 25203\nIGVlcg== 25204\nIGNhbm5vbg== 25205\nIENvbWI= 25206\nkOunjA== 25207\nIOqyg+uPhA== 25208\nIGFjY29tcGxpc2htZW50cw== 25209\nIEFuYWx5dGljcw== 25210\nIHNoYXBpbmc= 25211\ncmVpYmVu 25212\nIGJhY2hlbG9y 25213\nIGZpbmdlcnQ= 25214\nYWNrZWQ= 25215\nIHB5cmFtaWQ= 25216\nIFN0ZXdhcnQ= 25217\nw6FzdA== 25218\nIHN1cnZpdm9y 25219\nIGR1Y3Q= 25220\nIGRlYWxlcnM= 25221\n2LnZhQ== 25222\n0LvQuNC9 25223\nIGVkZQ== 25224\n15XXog== 25225\nINmD2KfZhg== 25226\nIM+Ezrk= 25227\nIGNob29zZXM= 25228\nIE93bg== 25229\n0LPQvtGC0L7Qsg== 25230\naGlyZQ== 25231\n0LDQu9GM0L3Ri9C1 25232\nINCb0Y4= 25233\nINC+0YHRgtCw0LI= 25234\ndGVjaA== 25235\nIGRyb2l0 25236\nIHN1YmplY3RpdmU= 25237\nZW5lcw== 25238\nIGRpdmlz 25239\nYXZleg== 25240\nIG1hbmV1dmVy 25241\n4LmE4LiU 25242\nYWRlY2U= 25243\nIEVucw== 25244\nYWNpYWw= 25245\nIFByb3RlY3Rpb24= 25246\nlrQ= 25247\nIGZvcm1hbGx5 25248\nIHd5ZA== 25249\naW5ndcOpbQ== 25250\nIHppZW0= 25251\nIHJlY3J1aXRpbmc= 25252\n15nXmg== 25253\nbmVt 25254\nIGZvcmJpZGRlbg== 25255\nIEJhcHQ= 25256\n15DXoNeZ 25257\nIHN1YnNldA== 25258\nIE1hZ2F6 25259\nbmVtZW50 25260\nIGFxdWVsYQ== 25261\ncmFnb24= 25262\nIGNvbW1pdHRlZXM= 25263\nIMOpdGFpZW50 25264\ndWRp 25265\nIERhd24= 25266\nIGJvcmU= 25267\nIGNvbXBvc2Vy 25268\nIHdpxJljZWo= 25269\nYW5nYQ== 25270\nIGRpc2xpa2U= 25271\nIERheXM= 25272\nIHBhcmFs 25273\nIG1pZW50cmFz 25274\nIGhlYXZlbnM= 25275\naGVpZA== 25276\nIHRyYWRlcnM= 25277\nb25jZQ== 25278\nIG1hc2NhcmE= 25279\nIM+Az4HOvw== 25280\nIHdoaXNwZXI= 25281\nIE11c2s= 25282\nIEZhbWlsaWU= 25283\nQWxsYWg= 25284\nIE9saXZpYQ== 25285\nIFByb3M= 25286\nIG9saWth 25287\naWxpbQ== 25288\nIHLDqXBvbmQ= 25289\nIFBldGVycw== 25290\nIGJpdGVz 25291\nIHZpYw== 25292\nIE5Z 25293\nZW1wdGlvbg== 25294\nIDQ1MA== 25295\nIHZpc3VhbHM= 25296\nIGxpZXU= 25297\nw7xja2Vu 25298\nIFN0ZWVs 25299\nIEdQ 25300\nd2FpdA== 25301\nIG5vdGljZWFibGU= 25302\ndWNoYQ== 25303\nIHJlaGFiaWw= 25304\nIHJlamVjdGlvbg== 25305\nINGB0LvQtdC00YPRjtGJ 25306\nIHNsaWRlcg== 25307\nIHJlZ2FyZGVk 25308\nIGdyYXZpdA== 25309\nIFJlc2VydmU= 25310\nY291bnQ= 25311\nIGJyZWVkaW5n 25312\nIGxvbmdl 25313\nYWxlYg== 25314\nIGtuaWdodA== 25315\nINCy0L7QuQ== 25316\nIHByw6lzZW50 25317\ngpjsmpQ= 25318\nIFNwZWNpZmljYWxseQ== 25319\nIHBvc2Vz 25320\nIHZldXJl 25321\nb2theQ== 25322\nZW1hcw== 25323\nIG1hasSF 25324\nIHdlYmluYXJz 25325\nIGNhbm5hYmlz 25326\nIGRhbWFscw== 25327\nIE5vcnRod2VzdA== 25328\nIHBhZGE= 25329\nIGNyb3dkcw== 25330\nIGZ1dHVyZXM= 25331\nIMOkbg== 25332\nIGNpdmlsaWFucw== 25333\nIFNhY2hlbg== 25334\n5o0= 25335\nIHRyYWNlcw== 25336\nIOuoueqzoA== 25337\nUVU= 25338\nIElG 25339\nYW7EsW4= 25340\n7IK0 25341\nIGJpYmxpY2Fs 25342\nIFZlZA== 25343\nIHN0b3Jpbmc= 25344\n0YDQsNCy0LvRjw== 25345\nIG5hc3Q= 25346\nIGTDtg== 25347\n0YDQvtC/ 25348\nZWxpYQ== 25349\nIHNpZGV3YXlz 25350\nIFVuZGVyc3RhbmQ= 25351\nIFF1cg== 25352\nIHBlcnBlbmQ= 25353\nIE1pbGxpb25lbg== 25354\nIHdhdGVybWVsb24= 25355\nIERpdmluZQ== 25356\ndWx0dXI= 25357\nYWJvcmQ= 25358\nIHN1Y2Nlc3Nlcw== 25359\nIGhvbWJyZQ== 25360\nIGNhcnA= 25361\nIHN1c2NlcHQ= 25362\ndW5na2lu 25363\nIGtpag== 25364\ndWx1cw== 25365\n2KfYrA== 25366\nIG5vdGNo 25367\nIHBvbHlub21pYWw= 25368\n5ak= 25369\nIMO6bmljbw== 25370\nIHRlbGVzY29wZQ== 25371\nIHBvbGl0aXF1ZQ== 25372\na2llbQ== 25373\nIM6tzr3OsQ== 25374\nIGFnZ3JlZ2F0ZQ== 25375\nIEdlb2Zm 25376\nIHRyaWw= 25377\nIEdSQQ== 25378\nIHN1YnNjcmliZXI= 25379\naW1ldA== 25380\nINC00L7Qu9C70LDRgA== 25381\nb3Bpbmc= 25382\nIHRoZXJhcGV1dA== 25383\nIENhbmNlcg== 25384\nIHBhcmFkZQ== 25385\nIGlycmln 25386\n4pmq4pmq 25387\nIGNsZWFyZXI= 25388\nIGJvZw== 25389\nIE1hdXI= 25390\n4Liy4LiH 25391\nIFNoYW5naGFp 25392\nYWNodGU= 25393\nIEtvbA== 25394\nZWx1amFo 25395\nIGhhdg== 25396\nIENyaW1l 25397\nc2Vr 25398\nIOuhnA== 25399\naWVubmE= 25400\nIEdvcg== 25401\n6Js= 25402\nINC/0L7RgtGA 25403\nINC60LDQttC10YLRgdGP 25404\nIExpZnQ= 25405\nIFNvcnQ= 25406\nIFBzYWw= 25407\nIHBpbmc= 25408\nk50= 25409\ncGhpcw== 25410\nIEZVQ0s= 25411\nIFN5bg== 25412\nIGJhbWJvbw== 25413\nrOyYgQ== 25414\nY3V0cw== 25415\nIG1tbQ== 25416\nIGZ1bmt0aW9uaWVydA== 25417\nIF8= 25418\nw61jaW8= 25419\nU3RvcA== 25420\nIGltYWdpbmFyeQ== 25421\nIG5vdGFtbWVudA== 25422\nIEluaXRpYXRpdmU= 25423\nIEt1cnQ= 25424\nIGxvb3Nlbg== 25425\nIGJ1c2Nhcg== 25426\nIHplbGY= 25427\nIHByb3Bz 25428\nIG1vZXRlbg== 25429\nIG1pbGxp 25430\nIGhhbGxz 25431\nIE1hdGNo 25432\nIGJyYWNrZXRz 25433\nIENvdQ== 25434\nINCc0LDRgA== 25435\nSVNB 25436\nIGNpZ2FyZXR0ZQ== 25437\nIGNvbXBldGl0aW9ucw== 25438\nIE1JTg== 25439\nIGJlaMO2 25440\ndm9vcg== 25441\nIHVzdA== 25442\nIFpp 25443\nIE9jYw== 25444\ndWxhdGVz 25445\nIGJhbGxvb25z 25446\nIHByb250bw== 25447\nIE1peQ== 25448\nIEZpbGU= 25449\nINC60LvQsNGB0YE= 25450\n0L3Rg9C7 25451\nIGNlcmVhbA== 25452\nIGluY3JlbWVudA== 25453\nIHJlZmluZWQ= 25454\ncHJpc2luZw== 25455\nIFJG 25456\nIHJlc3BlY3RmdWw= 25457\nIGxvb3Q= 25458\nYXNrZXQ= 25459\nIGRlaXhh 25460\naW5nbGU= 25461\nIGZ1bmNpb25h 25462\nIFJldmVs 25463\nIHNvYmVy 25464\nIHBlcmZvcm1z 25465\nIEdlbnRsZQ== 25466\nIHJlY2lwaWVudA== 25467\nIEhhdXNl 25468\nIOuD 25469\nRnJvbQ== 25470\nIG1pbmlzdGVycw== 25471\nIHBhcmFkb3g= 25472\nIHRhc3Rpbmc= 25473\nINeU15c= 25474\nIHJldXNl 25475\nIExhbmU= 25476\nINGB0L7QstC10YDRiA== 25477\nIHJlbWVtYmVycw== 25478\nIGZlbWluaXN0 25479\nIGNvbW1pdG1lbnRz 25480\nIHByb2plY3RlZA== 25481\nIGdheg== 25482\naXlvcnV6 25483\nIG9ibGlnYXRpb25z 25484\nUm8= 25485\nemFy 25486\nIGNodw== 25487\nIEpBTQ== 25488\nIGLEmWTEhQ== 25489\nYXNwYmVycnk= 25490\nINC80LXRgdGC0L4= 25491\n67KV 25492\nIHJlZ3VsYXRlZA== 25493\nIHdpY2h0 25494\nIFRyZXZvcg== 25495\nIHNlY29uZGx5 25496\nIElocmU= 25497\nZWxzaA== 25498\nIHJlcG9ydGVycw== 25499\n0YLQvtGA0LA= 25500\nb3lv 25501\nR0k= 25502\nIGludGVyY29ubmVjdA== 25503\nT1NI 25504\nIGJyYXNz 25505\nIGlnbm9yaW5n 25506\naW5mZWN0 25507\nIHByb2pla3Q= 25508\nb3JldA== 25509\nz4TOsc69 25510\nINGC0LjQvw== 25511\nIG11dHRh 25512\nIHVuYm94aW5n 25513\nhLA= 25514\nIGFkdmlzZWQ= 25515\nIERlbnZlcg== 25516\nIHNldmVyZWx5 25517\nIE1obQ== 25518\nIGZsaXBwZWQ= 25519\nIHBpZW4= 25520\nIGtvbW11bg== 25521\nIEZSRQ== 25522\nIOCuh+CusA== 25523\nYWludGVk 25524\nIGtuaXZlcw== 25525\nIGhhYmw= 25526\nIGdld29yZGVu 25527\nYXJldHRlcw== 25528\nQ1M= 25529\nINC80LDQu9C10L3RjA== 25530\nIGdhbGF4 25531\nIG5pbmV0ZQ== 25532\n6rGw64KY 25533\nIHNpcw== 25534\nIGFkdmlzb3J5 25535\nIGRyaWxsaW5n 25536\nIFdvdWxkbg== 25537\nw7xuZg== 25538\nZ2VzdGVsbHQ= 25539\nIEhlbGVu 25540\nINee15A= 25541\nYXBvbGlz 25542\nIHJ6ZWN6eQ== 25543\nIHRlcnJh 25544\nIGhlcA== 25545\nIGFsZ8O6bg== 25546\naWtr 25547\nIGFzdHJvbm9t 25548\nIFN0YXJidWNrcw== 25549\na8SF 25550\nIHBhdHJvbA== 25551\nIOy9lA== 25552\nIGdvbg== 25553\nIOOAkA== 25554\nIHNvbnN0 25555\nIGVuY291bnRlcnM= 25556\nIHJldHJvdQ== 25557\nIHNoYXJrcw== 25558\nIGRvcg== 25559\nIFJldmVy 25560\nIGV2YXBvcg== 25561\nIHJlc2Vydm9pcg== 25562\nIGFsbGVnZWQ= 25563\ndWxlcg== 25564\nIHZlcm0= 25565\nIGNvbW1lcmNl 25566\nIGZpdHRlZA== 25567\nZ2Vt 25568\nIHRhY3RpY2Fs 25569\nIGxpdGg= 25570\naGFk 25571\nIGNhcmJvaHlk 25572\nIGxlbmd0aHM= 25573\nzrnOvw== 25574\nIGRlbW9ncmFwaGlj 25575\nUm9i 25576\nIFNraW4= 25577\nY2NvbGk= 25578\nIHNpbXBsaWZpZWQ= 25579\nIHJlYWRpbHk= 25580\nIEN1bQ== 25581\nYWRlc2g= 25582\nIETDpQ== 25583\ndXNzdA== 25584\naWduZQ== 25585\nZXRvbg== 25586\nIG1lbm9y 25587\ncWk= 25588\nT09N 25589\n4Lit4LiZ 25590\nIHBzeWNoaWF0 25591\nIGVpZ2h0eQ== 25592\nINC80LjQu9C70Lg= 25593\nIFRvYg== 25594\nZWRv 25595\nIMSR4bq/bg== 25596\nIGNpcmN1aXRz 25597\nIExBVUdI 25598\naWNpc20= 25599\nZW1vcg== 25600\nIHJlZ2VuZXI= 25601\nZWdyZWU= 25602\nIGJ1cmVhdWM= 25603\nIEFsYmVy 25604\nIFdvcg== 25605\nIHJlc2lu 25606\nIGJ5xYJ5 25607\nIElH 25608\n4K+NLA== 25609\nIDc4 25610\nIHdlZWRz 25611\nIE15dGg= 25612\nOTM= 25613\n5r8= 25614\nIOuCmOyZlA== 25615\nw6l2 25616\n4b0= 25617\nw7ZyZW4= 25618\nw6dhcg== 25619\nIFBBVUw= 25620\nIGRpc2FkdmFudA== 25621\nIHBvc2l0aW9uaW5n 25622\nIGNvY2t0YWls 25623\nIGFncmVlcw== 25624\nbm4= 25625\nIFNhbGx5 25626\nTXM= 25627\nIGluaGVyZW50 25628\nIG1vbmV0YXJ5 25629\nIG5hdHVy 25630\nIE5o 25631\nIEltcG9ydA== 25632\nIGxlYmVu 25633\nIHdp 25634\ndXNzeQ== 25635\nIG9iZXM= 25636\nIHdhbmRlcmluZw== 25637\nIOyLoOs= 25638\nxIVkYQ== 25639\nZXRjaHVw 25640\nIGRpc3Bvc2Fs 25641\nIEpB 25642\nIENlcg== 25643\nemlsbGE= 25644\nIHZpcmdpbg== 25645\nIFNsaWRl 25646\nYW5kZWw= 25647\nIHJpZ2h0ZW91c25lc3M= 25648\nIM6j 25649\nIGlkZWlh 25650\n0LjRgNC+0LLQsNGC0Yw= 25651\n16jXkA== 25652\nQ29tbWVudA== 25653\nIHByZWxpbQ== 25654\nIFZhbGU= 25655\nIOyngOuCnA== 25656\nIFZhbmM= 25657\nT01BTg== 25658\nINC/0ZbQtA== 25659\nIHl1bQ== 25660\nc3RyZQ== 25661\nY2Vt 25662\nIHBvY3o= 25663\nIGZyYWdtZW50 25664\nINGB0LvRg9GH0LDQtQ== 25665\nIHVuZGVyZ28= 25666\nIEhhbms= 25667\nY2Vrcw== 25668\nIEZQUw== 25669\nIG9jdXI= 25670\nIGRldGVyaW9y 25671\nIGVtcHJlc2Fz 25672\nUGF1bA== 25673\nICkpKQ== 25674\nINCy0YDQtdC80LXQvdC4 25675\nIHNjb2xk 25676\n15nXog== 25677\nIHN1c3BlY3RlZA== 25678\nIGFjY2Vzc2luZw== 25679\nIHN1YnN0aXQ= 25680\nIGhpc3RvcmlhbnM= 25681\nINC00LXQu9C+ 25682\nIHNvY2llZA== 25683\ncm9uZQ== 25684\nIHJlZGVu 25685\nIGV4dGVuZHM= 25686\nZXBoZXJk 25687\nIGJhbGNvbg== 25688\nIFNvbG8= 25689\nIHBvbGl0aWNpYW4= 25690\n0L7Qu9GM0L3Qvg== 25691\nIGlyZ2VuZHc= 25692\nIHRyYXVtYXRpYw== 25693\nIHJhcHBlcg== 25694\nIFJPQkVSVA== 25695\nUmVhbGx5 25696\nIGxpbmV1cA== 25697\nQVNF 25698\nIGNvbnRyYWN0b3I= 25699\nIENvcnBvcmF0aW9u 25700\nZ29y 25701\nIFRvZG8= 25702\n0YHRgtGA0L7QuQ== 25703\nRkJF 25704\nIG5ld3NsZXR0ZXI= 25705\nIGtvxYQ= 25706\nYWx0aWVz 25707\nINC/0YDQuNGH 25708\nIEhlYXZ5 25709\nIHN3b3Jkcw== 25710\nIG1hbmlwdWxhdGlvbg== 25711\nIGZ1bms= 25712\nIHbDpXI= 25713\nIFRhbGliYW4= 25714\nIOuwpQ== 25715\nIGFjbmU= 25716\nw7xyw7w= 25717\nIGRlc3dlZ2Vu 25718\nIER1c3Q= 25719\nIHNpbGlj 25720\nIGhvb2tz 25721\nIGJsaWo= 25722\nIHBldGl0cw== 25723\nIGZpbG1l 25724\nIEJlcmVpY2g= 25725\nIFNhaWQ= 25726\nIGltcG9zZWQ= 25727\nIGRpYXJ5 25728\nINCz0L7RgA== 25729\nIEdhdGVz 25730\nIGFsdGE= 25731\nIGNoY2lh 25732\ncGxlYXNhbnQ= 25733\nIOuwnQ== 25734\nIG1vxbxlbXk= 25735\nIEF1c3RyaWE= 25736\nIGJyb2tlcg== 25737\nIHN1Y2tlZA== 25738\nIGNvbXBhcnRtZW50 25739\nIGNsb25l 25740\nINeU16I= 25741\nIERhbmtl 25742\nIG5vY2htYWw= 25743\n0LXQt9C0 25744\nIGFkcmVuYWw= 25745\nIGtsZWluZW4= 25746\nIHN1YnNlcXVlbnRseQ== 25747\nIGRlY2VudHJhbA== 25748\nIGdlbmV0aWNz 25749\nIOq0kQ== 25750\nIG1vbml0b3Jz 25751\nIEFwcGxpYw== 25752\nIFJlcG9ydGVy 25753\nd2VydA== 25754\nIHdpZW0= 25755\nIE1vdmVtZW50 25756\nIGludGVydmlld2luZw== 25757\nIGhhaXJz 25758\nIHB1w7I= 25759\nIENoZWxzZWE= 25760\nIGNvaGVy 25761\nIGNvdA== 25762\nIHphcw== 25763\nIHBhdGNoZXM= 25764\nIGxhaA== 25765\n0YPQvdC6 25766\nIFJlYWdhbg== 25767\nIE1hcmNv 25768\nY2l0eQ== 25769\nIGRlZmVuZGVy 25770\nIGRlY29yYXRpb24= 25771\naWpp 25772\nIGxpdHRlcg== 25773\n0Kg= 25774\nIGplZ28= 25775\nUkVX 25776\nIFBpaw== 25777\nIEhlZQ== 25778\nIEl2 25779\nINC40LTQtQ== 25780\nIFRoZWF0ZXI= 25781\nINGH0LDRgdGC0L4= 25782\nIHN3ZWF0ZXI= 25783\nIGhpZ2hsaWdodGluZw== 25784\nIGFpbnNp 25785\nIGRpcGxvbWF0aWM= 25786\nIE5ldmVydGhlbGVzcw== 25787\n5bM= 25788\nQVNPTg== 25789\nIHDDumJsaWNv 25790\nIGZlcm0= 25791\ncmVhdGVk 25792\nY29k 25793\nIOusvOs= 25794\nIG1pc3Rlcg== 25795\nIFZhbmNvdXZlcg== 25796\nIHJlY29nbml6ZXM= 25797\nZWNk 25798\nIGNvbXBsaWNhdGlvbnM= 25799\nZW5jaWFs 25800\nIOqwgOyngA== 25801\nIFVsdGltYXRl 25802\nIHZhaWc= 25803\nIE1lcnJ5 25804\n15XXkg== 25805\nIE1hcmN1cw== 25806\nb3dlZ28= 25807\nIG1lbnRl 25808\nU20= 25809\nIGFqYQ== 25810\nIFRhbw== 25811\nIGp1ZGljaWFs 25812\nIGVudHJlcHJlbmV1cnNoaXA= 25813\nINC90LXQvNC90L7Qs9C+ 25814\nIHBpcw== 25815\nIGVyZw== 25816\nIGNocmlzdA== 25817\nIEN1cnQ= 25818\nINGA0LDRgdC/ 25819\nzrvOtQ== 25820\nZW5zY2g= 25821\nw61yZQ== 25822\nIGZvY2Fs 25823\nIERpYW1vbmQ= 25824\nYXbDrWE= 25825\nIGhhbm5v 25826\nIFNxdWFk 25827\nIGFzc29jaWF0aW9ucw== 25828\nIENyZWF0aXZl 25829\nIG1lc3Nlbmdlcg== 25830\nIGJlZ2dpbmc= 25831\nIGRlY2ltYWw= 25832\nIGTEscWf 25833\nIG1ldGFkYXRh 25834\nc2Vscw== 25835\nIMSwxZ8= 25836\n4buvYQ== 25837\nIGRpZmZpY2lsZQ== 25838\nZMSx 25839\nIHNsYXVnaHRlcg== 25840\nIFZlcmc= 25841\nINeS150= 25842\nIFRlYQ== 25843\nYXNzZXM= 25844\nT2s= 25845\nIHN5bnRoZXM= 25846\nb3RpYXRpb24= 25847\nIHBhaW50ZXI= 25848\nIGVsYm93cw== 25849\nIGFyY2hpdGVjdHVyYWw= 25850\nINGA0LDQtA== 25851\nIGdsb3I= 25852\naW1hZ2U= 25853\nYW1wYQ== 25854\nY3VsaWFy 25855\noKg= 25856\nIHRldmU= 25857\nIFN0ZWxsZQ== 25858\nIEJhbQ== 25859\nIOy0iA== 25860\nYXNpcw== 25861\naXBlZGlh 25862\nIEdJ 25863\nIEFjdGl2ZQ== 25864\nYXpp 25865\nIEx1Y2t5 25866\n7ZWp 25867\nINC/0YDQuNGF0L7QtA== 25868\nIHJ1bndheQ== 25869\nIGF1dGhlbnRpY2F0aW9u 25870\nIHBvc2libGU= 25871\nIHN1cHBsZW1lbnRz 25872\nIHN1cmdpY2Fs 25873\nR2Vu 25874\nIGZlYXNpYmxl 25875\nRE8= 25876\nIG91dGxvb2s= 25877\nIGludGVydmFscw== 25878\nIGFuZWNk 25879\nw6BuZw== 25880\nIHN0cmFwcw== 25881\nIFNodQ== 25882\ndWRk 25883\naXNzZW5zY2hhZnQ= 25884\nIHBvcnRl 25885\nIGNvbW1pdHRpbmc= 25886\nIGFsbGV5 25887\nIGNvdmVuYW50 25888\nIFBlZHJv 25889\nbGVzc25lc3M= 25890\nIFNvbGlk 25891\nIE1vbGx5 25892\nINC90LXQutC+0YLQvtGA 25893\nIGNvb3BlcmF0ZQ== 25894\nb2xsZW4= 25895\nIHR1bmE= 25896\nIGtpbmRlcmdhcnRlbg== 25897\nIFNpeg== 25898\nIGR1xbxv 25899\nIE1CQQ== 25900\nIEdFT1JHRQ== 25901\nIEZpc2hlcg== 25902\nIENhZXNhcg== 25903\nINC60YDQsNGB0LjQsg== 25904\nIERlbGhp 25905\nenlt 25906\nIGV4cGxpY2Fy 25907\n6rCA7KeA 25908\ndW5z 25909\nZ3Jvdw== 25910\nINC/0YDQuNGB 25911\nIDg2 25912\nIHN0YXRpbmc= 25913\nIG1hc3Nh 25914\nY2h0ZXI= 25915\nIOy7rOufrA== 25916\nIGRlcHV0eQ== 25917\nU00= 25918\nbm9j 25919\nIGdlb2dyYXBoeQ== 25920\nIEVudGVycHJpc2U= 25921\nIENhbnQ= 25922\nw7Z6 25923\nIHVucGFjaw== 25924\nIO2ZlOs= 25925\nIHNlYXJjaGVz 25926\nIHByZXNpZGVuY3k= 25927\nIHRyaXZpYWw= 25928\nIHBpZ2U= 25929\nb3VidA== 25930\n7LyA7J20 25931\nIGJ1ZGdldHM= 25932\nIHVi 25933\nIHBuZQ== 25934\nIFlhbGU= 25935\nIMWfw7Z5bGU= 25936\ncmVndWxhcg== 25937\nIGltcGVyZmVjdA== 25938\nQVJB 25939\nIGZhbcOtbGlh 25940\ndXJt 25941\nIEFkdmVudHVyZQ== 25942\nY2lz 25943\nZW1hcms= 25944\nIG5lZ28= 25945\nIGluYXBwcm9wcmlhdGU= 25946\nINC/0YDQuNC3 25947\nINGA0L7Quw== 25948\nIGRyZWFtZWQ= 25949\nQnJ5 25950\nIHNodXR0bGU= 25951\nIHBpbGxhcnM= 25952\nIGJpaw== 25953\naW51bQ== 25954\nINGD0YE= 25955\nIE5lYnI= 25956\nIHBlcnBlbmRpY3VsYXI= 25957\nIGJvb2tlZA== 25958\nYmVyeQ== 25959\nIHZpa3Q= 25960\nYmVhcg== 25961\nZXN1cw== 25962\nINCy0L7Qt9C80L7QttC90L4= 25963\nqLk= 25964\nIHByZXN1bWFibHk= 25965\nIE1lbXBoaXM= 25966\nIGFtYnVsYW5jZQ== 25967\n15XXnteo 25968\nIHRodW1ibmFpbA== 25969\nIG1vZGlmaWNhdGlvbg== 25970\nIGludGVycHJldGVk 25971\nIHByb21v 25972\nIM66zqw= 25973\nIM61z4A= 25974\nIGFjb3VzdGlj 25975\nIERC 25976\nIG5vbmV0aGVsZXNz 25977\nb3VsZQ== 25978\nIHBlcXU= 25979\nIGtub2I= 25980\nIOuPjOyVhA== 25981\nIHB1cmNoYXNlcw== 25982\nIMOHw7xua8O8 25983\nIGRpdmlkaW5n 25984\ncGVyZm9ybQ== 25985\ncmFjdGlvbg== 25986\naGVhbHRoeQ== 25987\nIFRpdGxl 25988\nIHVr 25989\nIGNlcmNh 25990\nIGFyZ3VhYmx5 25991\nIGZhbGU= 25992\n67O1 25993\nIGdhbWVycw== 25994\nIHV0aWxpemluZw== 25995\nIG9mZmVuZGVk 25996\nIHRhdmE= 25997\nYWzEsQ== 25998\nIG1lZGlhbg== 25999\nIGluZmVjdGlvdXM= 26000\nIEFubmll 26001\nIHNtYXJ0cGhvbmVz 26002\nIHBhcm9sZQ== 26003\nIEVwaWM= 26004\nenph 26005\nIHVuaWZpZWQ= 26006\nIOq3uOuVjA== 26007\nIGN1cnRhaW4= 26008\nIMSD 26009\nIHNleHVhbGx5 26010\nIHVuc2VyZW0= 26011\nIENvbnZlbnRpb24= 26012\nIGFsbGVnZWRseQ== 26013\nWWE= 26014\nIEhvbw== 26015\nZW5tZW50 26016\n7ZuE 26017\nIGdpZ2FudGlj 26018\nIG5vdGluZw== 26019\nIHJlYm8= 26020\nIEphbWE= 26021\nIEFseg== 26022\nIGJvcnJvd2Vk 26023\n7Lmo 26024\nIHBlcmlwaGVy 26025\n0L7RgtCw 26026\nIEdC 26027\nIEdlYXI= 26028\nIGVjb25vbWljYWxseQ== 26029\nIHRlbGVmb24= 26030\nIHF1ZXJlbW9z 26031\nINC00LDQu9GM0YjQtQ== 26032\nIHJhcw== 26033\nIFRlYWNo 26034\naWNpb3M= 26035\nYXRvcw== 26036\nIHBsZWRnZQ== 26037\nYmF1 26038\nIEhpbXNlbGY= 26039\nTGluaw== 26040\nIGVzcGVybw== 26041\nIGNocm9tb3M= 26042\nIFBFUg== 26043\nIGVybGU= 26044\nIHBvZGl1bQ== 26045\nw6dvcw== 26046\nIG5pZXU= 26047\nIGZlbg== 26048\nIEdPRA== 26049\nIENob2NvbGF0ZQ== 26050\nd2Vyaw== 26051\nIHThu6s= 26052\nIHN1cHByZXNz 26053\nzrvOtw== 26054\nIDI0MA== 26055\nIHNpdMOk 26056\nIGhvbmVzdHk= 26057\nIEJpbw== 26058\nIEJhcmQ= 26059\nINC+0LHRidC10Lw= 26060\nINC80YPQtw== 26061\nIG1hcmJsZQ== 26062\nINGG0LXQvdGC 26063\nIHByb2N1cmU= 26064\nIHJvdG9y 26065\nYmVybg== 26066\nIHR1aA== 26067\nIGhlYWRzZXQ= 26068\nYXRlbQ== 26069\nIHdhcnJhbnR5 26070\n4K60 26071\nIGZpbGluZw== 26072\nzrnOrA== 26073\nIGNvbXByZW5kcmU= 26074\nIGltcHVsc2U= 26075\nIHNhbHY= 26076\nd3JpdHRlbg== 26077\nIGluc3RpdHV0ZQ== 26078\nS2lt 26079\nIExHQlRR 26080\nZmljaWVudGU= 26081\nSGlz 26082\nIM6xz4XPhM+M 26083\nIHRlZW5hZ2U= 26084\nb3J1cw== 26085\nINGA0LDQt9Cx 26086\nU2Vl 26087\nIENvbnNlcnY= 26088\n4buBbg== 26089\nZnVsbmVzcw== 26090\nIHN0cmF3YmVycmllcw== 26091\nIEFidQ== 26092\n0LjQvtC9 26093\nIG9sbGE= 26094\nTk9JU0U= 26095\nIEVtcGxveQ== 26096\nIHdpcGVk 26097\ndXJnZXI= 26098\nIG1vZGlmaWNhdGlvbnM= 26099\nIO2VmOyngA== 26100\nIGZvb3RzdGVwcw== 26101\nIGhvbm9ycw== 26102\nIGFkdWw= 26103\nIGZsaXBwaW5n 26104\nIEhV 26105\nWlk= 26106\nIGludGVncmF0aW5n 26107\n2KjYsQ== 26108\ndWxsYQ== 26109\nIG5hdHV1cmxpams= 26110\nIO2XiA== 26111\nIEV0aGVyZXVt 26112\n2YrZhA== 26113\nd2Vk 26114\nIHBlYWtz 26115\nIEtlcw== 26116\nIGJsb29t 26117\nIGNyYXNoaW5n 26118\nIDkxMQ== 26119\nINC+0YLQu9C40Yc= 26120\nIGNvbnRyb2xsZXJz 26121\nIERvZA== 26122\nINCy0LzQtdGB0YLQtQ== 26123\nIHNvcnRpcg== 26124\nIFN0cmFpZ2h0 26125\nIEdyYWNpYXM= 26126\nIGdyb292ZQ== 26127\nIHRvZ2c= 26128\nIOyLtuydgA== 26129\nw6lybw== 26130\nIG91dHdhcmQ= 26131\nIFdB 26132\nIFJvY2t5 26133\nIHNjYW0= 26134\nIGhheWF0 26135\naWdudHk= 26136\n4oQ= 26137\ncGxpbmdz 26138\nIGFudGliaW90aWNz 26139\nIG5ldmVydGhlbGVzcw== 26140\namFuZw== 26141\nY29tbWVyY2U= 26142\nIHNwb2lsZXI= 26143\nIGdsb3Zl 26144\nIGNoYXR0ZXI= 26145\nIEJZ 26146\nfj8= 26147\nIO2YuA== 26148\nIGRlbW9s 26149\nd2VjaHNlbA== 26150\naW1pcg== 26151\nIHJhaWQ= 26152\n0LXRgNGF 26153\n7J6Q6riw 26154\nZW5m 26155\nIGNvbW1lbnRlZA== 26156\nIG9wdGltaXplZA== 26157\nIGNvbnZpY3RlZA== 26158\nIGJhdHM= 26159\nIFNC 26160\nIEF1cg== 26161\nIFRvbmc= 26162\nIGltcGxpY2l0 26163\nIEphbmV0 26164\nIHJlYWc= 26165\nIEFkdmFuY2Vk 26166\nIGltcG9zZQ== 26167\n16nXlA== 26168\nIHNjaGVtZXM= 26169\nb3VnaGVy 26170\nYWJvbGlj 26171\nIOqxsOyjoA== 26172\nIHNsb3dpbmc= 26173\nIHd0ZWR5 26174\nIGRlc3RydWN0aXZl 26175\nINC+0L/RgNC10LQ= 26176\nIGxhbmRtYXJr 26177\nIOuPiA== 26178\nIFdhbGtpbmc= 26179\n4bq5 26180\nIHRpamQ= 26181\nIEtO 26182\nIFF1YW50 26183\n7Jik6w== 26184\nINC60YDRgw== 26185\nIHBlcmRlcg== 26186\nIG5vdmU= 26187\nw6RuZGU= 26188\nYmlh 26189\nIGN1c3RvZHk= 26190\nIGJpb2Q= 26191\nIGRpcmVjdGluZw== 26192\nLi4u4oCL 26193\nIHJlbG9j 26194\nIGRlbWFuZGU= 26195\nIG/En2x1bQ== 26196\nINC+0LTQvdCw 26197\nIE1pbGs= 26198\nIEtyYQ== 26199\nIEhvbmRh 26200\nIHB1ZQ== 26201\nIGVsZWt0 26202\nIGJlZ2lubmVycw== 26203\nIHNwZWFy 26204\nw61uaA== 26205\nIEx1ZnQ= 26206\nIG5pZw== 26207\nIFNjaG9vbHM= 26208\nIGZvcnVtcw== 26209\nIFFpbg== 26210\ncHBv 26211\nIHphZw== 26212\nINCu 26213\nIHRvb3RocA== 26214\nIFN0eWxl 26215\n7LSI 26216\nIHB1bmN0 26217\nIHJlcHM= 26218\nIEFseQ== 26219\nIGFtZW5kbWVudHM= 26220\nIMO2eg== 26221\nIGRpZ2l0cw== 26222\ndXJhaQ== 26223\nIGNoYW90aWM= 26224\nIE1hc3RlcnM= 26225\nZW9u 26226\nIENhc2g= 26227\nIEN1eg== 26228\nIGJlZGV1dGV0 26229\nIHNjYW5uaW5n 26230\nINC20LQ= 26231\n0L3QtdGC 26232\nIGNlcnRhaW50eQ== 26233\namVr 26234\nIGRpam8= 26235\nIENsaW1hdGU= 26236\nIHJpbnNl 26237\nIGtyaWo= 26238\ndmVsYW5k 26239\nIHNvdW5kdHJhY2s= 26240\nIFNhZmU= 26241\nIE5vdmE= 26242\nOTQ= 26243\nIGF0aGU= 26244\nIFZlcmI= 26245\nb2xlcg== 26246\n7J207KOg 26247\nIHZpbg== 26248\nIHJlc3BpcmF0b3J5 26249\nIFN0dWR5 26250\nIENBTQ== 26251\nIGF2b2NhZG8= 26252\nIFpoZW4= 26253\nIGxhdGVuY3k= 26254\nIGZlYXRoZXJz 26255\nIGNvbnRhcg== 26256\nINCy0LXRiQ== 26257\nIGZhcms= 26258\nIGJsZW5kZWQ= 26259\nIGV4cGxvZGVk 26260\nIFhY 26261\nIEJlbmlt 26262\nIGFsZ3XDqW0= 26263\naXN0b2lyZQ== 26264\nIGNvbmZpZGVudGlhbA== 26265\nIG1hc3Q= 26266\nIOy/ 26267\nZ2Vo 26268\nIGRpc3Jlc3BlY3Q= 26269\nIFN5c3RlbXM= 26270\nxrBh 26271\nRWQ= 26272\nIHd5cw== 26273\nIGV4b3RpYw== 26274\nIGdsb3dpbmc= 26275\nw7luZw== 26276\nb3VuZ2U= 26277\n6IQ= 26278\n0LDQvdC40Lc= 26279\nIHBhbGF2 26280\nIFN3b3Jk 26281\nIGdpbQ== 26282\nIENyb3c= 26283\nIHBvdGVudA== 26284\nYmlzaA== 26285\nIGFidXNlZA== 26286\nIEplZA== 26287\nIGdhbWJsaW5n 26288\nIFNwZWN0 26289\nIGludmVzdGlnYXRvcnM= 26290\nIHJhdHQ= 26291\nIGRvYg== 26292\nIERFUw== 26293\naG9n 26294\nINC+0YLQutGA0Ys= 26295\n7YyF 26296\nINC00LXQvdGM0LPQuA== 26297\nIO2YuQ== 26298\nIOuouOumrA== 26299\nIHNhdHVyYXRpb24= 26300\nIGluaGVyaXRlZA== 26301\nIElubm92YXRpb24= 26302\n7JeI642Y 26303\nIHRhbmdpYmxl 26304\nIGRlcHJp 26305\naGVk 26306\nINC/0L7QvNC+0LM= 26307\nIHNsaWNlZA== 26308\n4KWN 26309\nIHRo4bq/ 26310\nxaU= 26311\nNjg= 26312\nIGNvcm9uYQ== 26313\nIGdpZnRlZA== 26314\nIHNvaXI= 26315\nIGh1bWlsaXR5 26316\nIOydtOqxuA== 26317\nIGZsYXdz 26318\nINC/0YDQsNC60YLQuA== 26319\nIGthbGQ= 26320\nd2HFvA== 26321\neXc= 26322\naXJ0ZWVu 26323\nIGNyb2NoZXRz 26324\npqzqsIA= 26325\nIOyghOyXkA== 26326\nIGRlc2U= 26327\nINC80LDQsw== 26328\nIGR6aWHFgg== 26329\nIGzDqWc= 26330\nY2hhbmdpbmc= 26331\nIGxsZXY= 26332\nxYRzaw== 26333\nIDE5ODQ= 26334\nb3Jucw== 26335\nIFdlbHNo 26336\nIHBoYXJtYWNldXRpY2Fs 26337\nIHB1bXBpbmc= 26338\nIFNoYXc= 26339\ncHVuaw== 26340\nIHZhdWx0 26341\nIGtpbmV0aWM= 26342\nIGh1cnJpY2FuZQ== 26343\nIEluY2x1ZGluZw== 26344\n4bupYw== 26345\nIEdyYW5kcGE= 26346\nYW5zaGlw 26347\nINCy0YvRhdC+0LQ= 26348\n0L3QvtC2 26349\nnKA= 26350\ndXR0YQ== 26351\nIOqygeuLiOuLpA== 26352\nIGJheg== 26353\nINC/0L7RiA== 26354\nIHBlY3VsaWFy 26355\nennEhw== 26356\nIEVsbGll 26357\nIGxlYXJucw== 26358\nIEtyaXNobmE= 26359\nIGNvbnNlY3V0 26360\nIGVtcGF0aA== 26361\nIERpbg== 26362\nIHRyYWRlZA== 26363\nIEJvcmlz 26364\ndWdnYWdl 26365\nb2xsYQ== 26366\nINC90LDQt9Cy 26367\nIGV0ZXJuaXR5 26368\nINCy0L8= 26369\nw6htZXM= 26370\nIGdyYXBw 26371\nYsOp 26372\nINC/0YDQtdC00YHRgtCw0LI= 26373\nIEZD 26374\njeuLiOuLpA== 26375\nZXZlbg== 26376\nIE5lYnJhc2th 26377\nb3J0dW5l 26378\nIGthcmVuYQ== 26379\nIEFnZW50 26380\nIHN0aW5n 26381\nIFBJ 26382\nIG11bmljaXBhbA== 26383\ncG93ZXJlZA== 26384\nIGNvbnNlZ3Vl 26385\nIE1hbmNoZXN0ZXI= 26386\nIHJhaW55 26387\nIGJsaQ== 26388\nIGtvc3Q= 26389\nIGhhbHRlbg== 26390\nIEFoaGg= 26391\naW5zdWxh 26392\nZXJ0aW5n 26393\nINin2YTZgQ== 26394\nIHJlbGFjaW9u 26395\nIGtvbWVu 26396\nIGRvbWU= 26397\nIHByaWVzdHM= 26398\nIEludHJvZHU= 26399\ncm9waGU= 26400\nc2hvcmU= 26401\ndmVsdA== 26402\nY2xpcHNl 26403\nINGA0YPRgQ== 26404\n15nXoQ== 26405\nIHNhYmVtb3M= 26406\nIEhvbGxhbmQ= 26407\nb2dp 26408\nYW5raQ== 26409\nIE1hdHM= 26410\nIHNtb2tlZA== 26411\ndWxsaWU= 26412\nIGV1cm9wZQ== 26413\nINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+ 26414\nIGJhcmR6aWVq 26415\nIHRyYW5zZm9ybWluZw== 26416\nIEV6 26417\nb3BhdGg= 26418\nIOyWuOuLiA== 26419\nINGB0YLQsNC9 26420\n4bqxbmc= 26421\n4Lix4LmJ 26422\nIE91Y2g= 26423\nIGNsZWFyYW5jZQ== 26424\ndXN0YWlu 26425\nIHNvbGlkYXJpdHk= 26426\nIHByb3Zpbmc= 26427\nINCY0L0= 26428\nINGB0Yo= 26429\nIHByb2xvbmc= 26430\n0LDQtNC90L4= 26431\nIHNvcw== 26432\nIERlYWw= 26433\nIDE3MA== 26434\nbW9ucw== 26435\nINC30LXQvA== 26436\nIGxvZ2dlZA== 26437\nIGxpZmVsb25n 26438\nIHNlbnNvcnk= 26439\nIGJlaG9sZA== 26440\nIEZBUg== 26441\nw6h0ZW1lbnQ= 26442\nIEZlZGVyYXRpb24= 26443\nIGRvZGdl 26444\nIFNoaXI= 26445\nIGRyYWdvbnM= 26446\nIEFyY3RpYw== 26447\nxIXFvA== 26448\nxY0= 26449\nwro= 26450\nIGRlbmtl 26451\nIHBvZHLDrWE= 26452\nY29sZQ== 26453\n0YPQu9GM0YLQsNGC 26454\nIHN5c3RlbWF0aWM= 26455\n0LDQvNCw 26456\nY2hvcw== 26457\nIGNsaW5pY3M= 26458\nIEJT 26459\nIHRhbGVz 26460\ndXNpb25z 26461\nIO2IrA== 26462\nIHByZXNlcnZhdGlvbg== 26463\nIGxvcmU= 26464\nIFByb3Rlc3Q= 26465\n4bub 26466\nIGFja25vd2xlZGdlZA== 26467\nIElzYWlhaA== 26468\nIOuVjOuKlA== 26469\nINeY 26470\nIGNvbXBldGl0b3I= 26471\nIGFkdmFuY2luZw== 26472\nemlw 26473\nIHRlbnRo 26474\nIExhdXJl 26475\nIGhpbnRz 26476\nIGV4ZXJjaXNpbmc= 26477\nnpzr 26478\nIEludGVsbGlnZW5jZQ== 26479\ndWF0ZWQ= 26480\nT1VU 26481\nb3BlZA== 26482\nIGF1dG9ub215 26483\nIGJyYW5kaW5n 26484\nIE1lZGl0ZXJyYW5lYW4= 26485\n0ZbQug== 26486\nIHNjcmV3ZHJpdmVy 26487\nIHN1cHJl 26488\nIHN0YXA= 26489\nIGp1cmlzZGljdGlvbg== 26490\nIFNldHRpbmdz 26491\nIGZvcmVmcm9udA== 26492\nIEZlbWFsZQ== 26493\nY29tZm9ydA== 26494\nIG11bHRpcGxpY2F0aW9u 26495\nIE11cnJheQ== 26496\nIGJvYg== 26497\nIFRhcw== 26498\nIHRhaHU= 26499\nIG9udW4= 26500\nZXR0ZXI= 26501\nIHByb3BoZXRz 26502\nbGFn 26503\nIHJldmVudWVz 26504\nIHByw6E= 26505\nIHVwbG9hZGluZw== 26506\nIG1hY2hpbmVyeQ== 26507\nYXNjYWw= 26508\nIEVzdMOh 26509\nIEdvdGg= 26510\nIEJhbGQ= 26511\nIFNhdw== 26512\nIHN0cmlwZXM= 26513\n7KCR 26514\nIHBvd2lu 26515\nIGhvc3RpbGU= 26516\nIGRhcnVt 26517\nIHByZXZlbnRlZA== 26518\n0L7QttCw0LvRg9C50YHRgtCw 26519\nIGFsZ3VuYXM= 26520\nIGhvcGVsZXNz 26521\nIHpuYWo= 26522\nIHJlYWRpbmdz 26523\nIGNyYXZpbmc= 26524\ndGF0 26525\nIFBpZw== 26526\nIGxpYXI= 26527\nIG11bHRpcGxheWVy 26528\nIGRhbGU= 26529\nIENvdXJzZQ== 26530\n7YG8 26531\nIEtpdGE= 26532\nIGN1c3RvbXM= 26533\nIHJlc3BvbmRz 26534\nZW5kcmE= 26535\nIG1ldHJv 26536\n0YHQvtC7 26537\nIG1pdGlnYXRl 26538\nIG9wcHJlc3Npb24= 26539\ncXVpbmhv 26540\nIGFtbW8= 26541\nIGVuZmVy 26542\nIHBvbnk= 26543\nIG91bmNlcw== 26544\nsJQ= 26545\nIOyImOqwgA== 26546\nIGRpY2hv 26547\nIERlYg== 26548\nIHdvbmRlcnM= 26549\nIFJvb3Nl 26550\nIHByaXplcw== 26551\nIEFMRVg= 26552\nIHRoYW5rZnVsbHk= 26553\nIHRpc3N1ZXM= 26554\nINGA0LDQstC90L4= 26555\nIEx1bmE= 26556\naW50ZWxsaWdpYmxl 26557\nIOyZuA== 26558\n6rCR 26559\nIEhlYXQ= 26560\nINGB0LjQtA== 26561\nIFF1aQ== 26562\nIGlvbnM= 26563\nIGFjY29tbW9kYXRpb24= 26564\nIEthcnQ= 26565\naWVuc3Q= 26566\nIHRhcmRl 26567\nIHNvYWtlZA== 26568\nIENhc2V5 26569\nIOy0nQ== 26570\nINGA0YPQsQ== 26571\nIGRpZmZlcmVudGk= 26572\nIGxlZnRvdmVy 26573\nIGV4Y2hhbmdlcw== 26574\nc2Vjb25k 26575\nIGZpcnN0bHk= 26576\nIGJ1aWxkZXI= 26577\ncmllbg== 26578\nIGR3 26579\nIGJvdW5jaW5n 26580\nPzwv 26581\nIOuMgO2VtOyEnA== 26582\nINGB0LU= 26583\nIE1pbGVz 26584\naWVuaWU= 26585\nINC/0L7QtNC/0LjRgQ== 26586\nIOustA== 26587\nIGFyaXNlcw== 26588\nIHN1YmNvbnNjaW91cw== 26589\nIFNhbmR5 26590\nIGxvdHRlcnk= 26591\n4oCR 26592\nYW1pbGlhcg== 26593\nIGNvb3JkaW5hdG9y 26594\n6Iw= 26595\nIGV4dHJhb3JkaW4= 26596\nIFJvbmFsZA== 26597\nIE1PTg== 26598\nZ3JlZW4= 26599\nIG1hbnVmYWN0dXJl 26600\nIFJlY29yZA== 26601\nIE1hcmtldGluZw== 26602\n0LjRhg== 26603\nIGNyZWRlbnRpYWxz 26604\nIHVwcmlnaHQ= 26605\nIEhlcml0YWdl 26606\nIGfDtnJk 26607\nZXhwZW5zaXZl 26608\n4bqtbg== 26609\nIOyxhA== 26610\nIG91dGxpbmVk 26611\nIE9vb2g= 26612\nb3JpZW50ZWQ= 26613\nIHdpcmVk 26614\nIG91dGxldHM= 26615\nIGh1Z2VseQ== 26616\nIO2WiOuKlOuNsA== 26617\n0LDRgNGC 26618\nIGxvZ2lzdGljcw== 26619\nIHNlYXNvbmFs 26620\nIGRlYmU= 26621\nIHRoZW9y 26622\nIHBpcmF0ZQ== 26623\nYXBweQ== 26624\nIGtub3Rz 26625\nIGZlbW1l 26626\nIFNvZnR3YXJl 26627\nZ2VuZGU= 26628\n0YLQsNC60Lg= 26629\nIHRlbXBsZXM= 26630\nIGxpbWl0YXRpb24= 26631\nIGFtcGxpdHVkZQ== 26632\nIGhhY2Vu 26633\nIGF1ZGk= 26634\nIOuWqA== 26635\nIFdhaGw= 26636\nIG5paA== 26637\nIGFtcGxpZmllcg== 26638\nYXJpdXM= 26639\naXphZG8= 26640\nYWNoYQ== 26641\nIGt1bGxhbg== 26642\nIFR3aW4= 26643\nIEZvcmNlcw== 26644\nIGFicmly 26645\nIEVQQQ== 26646\nIEFoYQ== 26647\nIOq3uOuemOuPhA== 26648\nIGJpb20= 26649\nINCi0LDQvA== 26650\nIHNhaWxpbmc= 26651\nIEpva2Vy 26652\nRmlyc3Q= 26653\nfl0= 26654\nb3JzY2g= 26655\nIHbDpnJl 26656\nIGJlZXRqZQ== 26657\nIFNwYcOf 26658\ncG9saXQ= 26659\nIHR1cmJ1bA== 26660\nIOyggO2drOqwgA== 26661\nIGNpYw== 26662\nIERyYWtl 26663\nIEJSSQ== 26664\naXphw6fDo28= 26665\nIOyeiOuLpA== 26666\nIEx5bm4= 26667\nIHRyYW5zZ2VuZGVy 26668\nIHJlc2lnbg== 26669\nIGNoYXJ0ZXI= 26670\nIEpI 26671\nIEhvbG1lcw== 26672\nIExpcA== 26673\nZGFz 26674\nIHBlZGlhdHJpYw== 26675\nIG1lbW9yaXpl 26676\nIGV2YWx1YXRpbmc= 26677\nIPCfkA== 26678\nY2Fr 26679\nIGNvbmp1bmN0aW9u 26680\nIHJlc2VydmVz 26681\nIHNoYW1wb28= 26682\nIGp1ZGdlZA== 26683\nIHdpZHo= 26684\nVklO 26685\nIGFib2FyZA== 26686\nYXJpcw== 26687\nIFJvaA== 26688\nIGNvb2xlZA== 26689\n0YHRgtC1 26690\nY2Vw 26691\ncm9zdA== 26692\naG90cw== 26693\nIE1lbGJvdXJuZQ== 26694\n0L7Rh9GM 26695\nIHZlbnRpbA== 26696\n0LjQvdC+0LI= 26697\nIG1vdGlvbnM= 26698\n7JeI64qU642w 26699\n0LzQtdGA0LjQug== 26700\nIENoYXQ= 26701\nIGdvdXZlcm5lbWVudA== 26702\nIEtpdm9s 26703\nIEtpdm9sb3dpdHo= 26704\nIG7Ds2k= 26705\nINC60YPQtNCw 26706\nIGh5ZHJhdWw= 26707\nIEJlcmc= 26708\neWx1bQ== 26709\nIFByw6RzaWRlbnQ= 26710\ncm9weQ== 26711\nIHNlbWlj 26712\n0Y/QtdGC 26713\nIENhcGU= 26714\nIGNhbmU= 26715\nIGJyaW5nZW4= 26716\nIHdpcmluZw== 26717\ndW55YQ== 26718\nIHJlcGF5 26719\nqqk= 26720\nIHdvbnQ= 26721\nw6FudA== 26722\nIGdvdmVy 26723\nIExpYmVydHk= 26724\nIGVsZWN0cm9tYWdu 26725\nIFNpbmdo 26726\nINCz0YDRg9C/ 26727\n0LPQvtCy 26728\niOustOs= 26729\nIFJ1bGU= 26730\nIHVuZGVyd2F5 26731\nIEZyZWRlcg== 26732\nIHR1cmJpbmU= 26733\naXNoaQ== 26734\nIGbDrXM= 26735\nIEN1bHR1cmU= 26736\nYWNyZQ== 26737\nIHdhbmRlcg== 26738\nIGd1ZXJyYQ== 26739\nIHPDtnk= 26740\nIEp1cg== 26741\nYXdheXM= 26742\nIHNjaHdpZXI= 26743\nZ3VhcmQ= 26744\nIEFiZA== 26745\ndWN0aW9u 26746\nIGFya2FkYcWfbGFy 26747\nIEhhbWI= 26748\nPy4= 26749\nc2l6ZQ== 26750\nIE9ydGg= 26751\nIHN3YXk= 26752\nIM6U 26753\nIGFic29ycHRpb24= 26754\naW5lZXM= 26755\nIHBhdHJvbnM= 26756\nIGJlYWNoZXM= 26757\nR0c= 26758\nIGNvbnRhbWlu 26759\naW50ZW5kZW50 26760\nINC90YDQsNCy 26761\nINC00LXRgNC2 26762\nIHF1aWx0 26763\nIGV2b2x1dGlvbmFyeQ== 26764\n7J206528 26765\nYXppb25p 26766\nIGVya2w= 26767\nIEJ1dGxlcg== 26768\nIGRvbw== 26769\nIG5lZ290aWF0aW9u 26770\nZW5kdW0= 26771\nIHRlcm1pbm9sb2d5 26772\nIGt1bA== 26773\nIFVudGVybmVobWVu 26774\nw6lyaWM= 26775\neGk= 26776\nYmFk 26777\nINC00L7Qu9C20L3Riw== 26778\nIE1pdGNoZWxs 26779\ndGhyZWU= 26780\nIHN1YnN0cmF0ZQ== 26781\nIEluaGFsZQ== 26782\nIEFncmlj 26783\ndW5nZQ== 26784\nINC30YA= 26785\nIGFkdmVyc2U= 26786\nIOyggOuPhA== 26787\nIHBpbGxhcg== 26788\nIE1pbnV0ZW4= 26789\nIE1hdGU= 26790\nIFBsYXR6 26791\nIGhlbHBsZXNz 26792\nIGFsYXI= 26793\nIGZyZW5jaA== 26794\nIGFsbG9jYXRpb24= 26795\nIHN0ZW1z 26796\nIG1hcmF0aG9u 26797\nIEhBUkY= 26798\naXphY2nDs24= 26799\nSmVzcw== 26800\nINC30L3QsNGH 26801\nIGRlY2xhcmF0aW9u 26802\nRUVSSU5H 26803\nc3RlcmRhbQ== 26804\nYXNzaXVt 26805\nIHNlaXo= 26806\nIHByZXNpZGVudHM= 26807\ndGFrZQ== 26808\nIHdpbGRlcm5lc3M= 26809\nIGNvc21pYw== 26810\nIOuqqOuRkA== 26811\nc3Rybw== 26812\nIHBvd2llZHo= 26813\nIE1hZ2F6aW5l 26814\nIFZJ 26815\nINC00LXRgA== 26816\nIHfDvHJkZW4= 26817\nIHRhYmxldHM= 26818\nIHBpZXJ3cw== 26819\nIG1vcnRhbA== 26820\nIHN1cHBsaWVk 26821\nIE7Ds3M= 26822\nIFByb3Blcg== 26823\nINC60LDQttC00YvQuQ== 26824\nb2zDs2c= 26825\n67Cp 26826\nIG1pc2Nvbg== 26827\nIHByb3hpbWl0eQ== 26828\nIEFsbGVz 26829\nINCz0LvQsNC3 26830\nIGxhbWU= 26831\nIHZpYmVz 26832\nIGRlZW1lZA== 26833\nIHVyaW5l 26834\nIHJlbWluZGluZw== 26835\nIGNpcmN1bXN0YW5jZQ== 26836\n65Ok7J20 26837\nIGxhcHRvcHM= 26838\nwrI= 26839\n7ZW07JW8 26840\nIE9tZWdh 26841\nTlk= 26842\nIHB1bXBz 26843\nIHJhaWxz 26844\nIHN1cnBhc3M= 26845\nIEJyb3M= 26846\nIG5hdGlvbmFsbHk= 26847\nIGdld2VzZW4= 26848\ns7Tri6Q= 26849\nb3NoaW5n 26850\n6rCI 26851\nIGNyaWFu 26852\nIOyCrOuejOydtA== 26853\nY2F1c3Q= 26854\n0YbQuNC/ 26855\nIE9iZXI= 26856\nIERBWQ== 26857\nIENhbm9u 26858\nenVuZw== 26859\nIOqwlg== 26860\nINCw0LLRgtC+0Lw= 26861\nIGRpdm9yY2Vk 26862\n15nXpA== 26863\nz4HOtQ== 26864\nY2VsYW5k 26865\nY2llcg== 26866\n0YDQtdC3 26867\nVG9kYXk= 26868\nIG9yYml0YWw= 26869\nIHN0cmV0 26870\nIHNhdHU= 26871\nIO2BrOs= 26872\nem9z 26873\nIFNjbw== 26874\nzrzOrQ== 26875\nIEd1YXJkaWFu 26876\naW50ZXJlc3Q= 26877\nIFZFUg== 26878\nw7xuZGVu 26879\nINGF0L7RgtC10Ls= 26880\ndGl0 26881\nQnk= 26882\nIGFubGF0 26883\nU2hvdw== 26884\nIG9pbHk= 26885\nIGxlZ2VuZHM= 26886\nIHNwZWN1bGF0aW9u 26887\nIFdpc2g= 26888\nIG1vbms= 26889\nR0FO 26890\nIGjhu40= 26891\nIGRhbmdlcnM= 26892\nIEJlbmU= 26893\naXF1ZW1lbnQ= 26894\nIOuCmOyZgA== 26895\nINCw0LQ= 26896\nIGRpc2NyZXRl 26897\nw4c= 26898\nIGNvbmRpdGlvbmFs 26899\nIEdpbGw= 26900\ndWF0ZXM= 26901\nINGB0L7QstGB0LXQvA== 26902\nIHNjcmVlbnNob3Q= 26903\nY2Fkbw== 26904\nIOuqqOuToA== 26905\nIGZpbmdlcnRpcHM= 26906\nIE1BQw== 26907\nIGR1ZGVz 26908\nY29zdA== 26909\nIGJ1bXBz 26910\nb25kbw== 26911\nIGRhdG9z 26912\nIGJlZXBz 26913\nIFByb24= 26914\nIEtoYWw= 26915\nemVnbw== 26916\nIEFiYnk= 26917\nVWg= 26918\nWW8= 26919\nIFRlbA== 26920\nIM68zq0= 26921\nS0k= 26922\nIHN0cmVzc2Vz 26923\nIHNwcmVhZHNoZWV0 26924\nIE5PVw== 26925\nREI= 26926\nIGxpYmVyYXRpb24= 26927\nIHByZWRpY3RhYmxl 26928\nIFF1ZXN0aW9ucw== 26929\nIHNwYWNpbmc= 26930\nIGluaGFiaXRhbnRz 26931\nIHp3acSFeg== 26932\nIFNBUA== 26933\nIGx1Z2dhZ2U= 26934\nIGhpcHA= 26935\n6JY= 26936\nIHRhbmdlbnQ= 26937\nIHbDpQ== 26938\n0LDQu9GM0L3QvtC5 26939\nc2VoZW4= 26940\nIHByb2Nlc3NvcnM= 26941\nIGZpbmRldA== 26942\nIGNhcnRyaWRnZQ== 26943\nIGFkbWluaXN0cmF0b3Jz 26944\nIOyWtOya 26945\nIHN1cHJlbWU= 26946\nIEFudGk= 26947\nIO2UhOuhnA== 26948\nIGluZm9ybWF0aXZl 26949\nIGtvbXQ= 26950\n15nXmA== 26951\nQXNzaXN0YW50 26952\nIGxpc3Rh 26953\nw7ZsbA== 26954\nIGRpc3RpbmN0aXZl 26955\nIEh1ZA== 26956\nIHNhbG9u 26957\nbcOqbWU= 26958\nIE1vdGlvbg== 26959\nIHNldWxlbWVudA== 26960\nIE1lbnNjaA== 26961\nIHB1bXBlZA== 26962\nw7xoZXI= 26963\naWJv 26964\nIHdhxbw= 26965\nIHF1YW50aXRhdGl2ZQ== 26966\n2b4= 26967\nIOuqqOyKtQ== 26968\nIHBvdWNo 26969\nIFRoZWF0cmU= 26970\nYWhp 26971\nIHNwaW5hY2g= 26972\nIHJlYWxpdGllcw== 26973\nIGxleQ== 26974\nIE1hcnRoYQ== 26975\nIHJlY2hlcg== 26976\nZWNoZXM= 26977\nIHBlcmlvZGlj 26978\nb2NpZGU= 26979\nIEluY3JlZA== 26980\nIHRo4bqleQ== 26981\nb3Rvbg== 26982\nIEVzbw== 26983\nIGfDqW7DqXJhbA== 26984\naWxpZ2h0 26985\nIGltYWdpbmluZw== 26986\naGVh 26987\nZXRpY2Fs 26988\n4but 26989\nIERlbW9rcmF0 26990\nIGVuam8= 26991\nIGFkanVzdGFibGU= 26992\nIHJhaW5z 26993\naWV3YcW8 26994\nIGp1c3RlbWVudA== 26995\nIGp1c3RpZmllZA== 26996\nIFNoYWtl 26997\ndml2 26998\n7IKs66W8 26999\nIG1ldHQ= 27000\nIEVudmlyb25tZW50YWw= 27001\nIHNvbGFtZW50ZQ== 27002\nIGludGVyc2VjdA== 27003\nIDE5ODg= 27004\nIHNpbXVsYXRl 27005\nSkE= 27006\nINC30LDRgQ== 27007\nIGNvbnRpbmc= 27008\nIFRlaw== 27009\nIHRvcmNo 27010\nINC00YDRg9Cz0L7QuQ== 27011\nIGluc2NyZQ== 27012\nIG1vZGVsbw== 27013\nIEdlZw== 27014\nIERlbW9jcmF0 27015\n0LrQsg== 27016\nIEJ1ZGR5 27017\nIHJlZHVuZA== 27018\nIGNyYWZ0cw== 27019\nIEhpag== 27020\nIGp1ZQ== 27021\nIEtpcms= 27022\nIGthYg== 27023\n4buj 27024\nIGFlc3RoZXQ= 27025\nIEpPTg== 27026\nIHN1cGVyY29t 27027\nINGB0LjRgtGD 27028\nIM+Mz4TOuQ== 27029\n2YXZhg== 27030\nIEVWRVI= 27031\n7JWY7Ja0 27032\nb2l0 27033\nIENsZXZlbGFuZA== 27034\nIHNpeHRlZW4= 27035\nIHdhdGVyZmFsbA== 27036\n77g= 27037\naW5mbA== 27038\nIGNvdW5zZWxvcg== 27039\nIFB1bms= 27040\nIHNwcmVjaGVu 27041\nZXhj 27042\nIFNraWxscw== 27043\ncm96 27044\nYWRhbWVudGU= 27045\nIHBhbmNha2Vz 27046\n6riw66Gc 27047\nIHBsYW5r 27048\nIHNvdmVyZWlnbnR5 27049\nIGZ1aQ== 27050\nINC90LXQvtCx 27051\nIFdpaQ== 27052\nIFNjaG9s 27053\n4oCO 27054\nIFNwZWFr 27055\nY2lsaWF0aW9u 27056\nIHRoaWdo 27057\nIOqxsOydmA== 27058\nIGpvdA== 27059\nIOy0rOyYgQ== 27060\nINmF24zaug== 27061\nIENDUA== 27062\nINC/0L7RgdGC 27063\nIG9ic2VydmVy 27064\nw6Fi 27065\nIHN0aWdtYQ== 27066\nIHByb3ByaWV0 27067\nIGNpZGFkZQ== 27068\nIGJhxZ9rYQ== 27069\n2LnYqQ== 27070\na3Jl 27071\nIHBvd2llZHppZcSH 27072\nIGNlYXNl 27073\nIHNraW5z 27074\nIHZlZ2dpZXM= 27075\nIG9wcG9zaW5n 27076\nb3BvbHk= 27077\nIEp1Zw== 27078\nIFlvb24= 27079\nIFVuaXQ= 27080\nIDE5ODY= 27081\nIGtvbnM= 27082\nIGRpYWdub3N0aWM= 27083\nIGVtcG93ZXJlZA== 27084\nIHRobw== 27085\nIGNlbg== 27086\nw6lyYXRpb24= 27087\nINGX 27088\nIHBoeXNpYw== 27089\nIFByYWN0aWNl 27090\nIFNvdXRoZWFzdA== 27091\nIEVzcGE= 27092\nIEdlb3I= 27093\ncm9wb3J0aW9u 27094\nIHNwZWNz 27095\nIGFkYXB0aXZl 27096\nIFVuaXR5 27097\nIFdvcmtz 27098\ndWdlbg== 27099\nIE1vbnRhbmE= 27100\nVGhhbmtz 27101\nIHdoaXBwZWQ= 27102\nIGR1bmdlb24= 27103\nIHZpdGFtaW5z 27104\nU1A= 27105\nIHNjYW5kYWw= 27106\nIGRpbmVybw== 27107\nb3Zh 27108\nIGVtYnJv 27109\nIEVhZ2xl 27110\nIHRoZW9sb2d5 27111\nIFZhbmVzc2E= 27112\nIEFJRFM= 27113\n65Cc 27114\nIGZyZWVs 27115\nIEFsemhlaW1lcg== 27116\nIMWa 27117\nSGVy 27118\nIHRvcm5hZG8= 27119\nYWdlbnM= 27120\nIOyeiOyWtOyEnA== 27121\nIFRyYW5zZm9ybQ== 27122\nIHByb2Nlc3Nv 27123\nIG1pbGxpc2U= 27124\nIHByb2Zlc3Npb25hbGx5 27125\nIG1lbWI= 27126\nb2NhdGlvbg== 27127\nIHN0eWxpbmc= 27128\nINC+0LHRj9C3 27129\nIE9wZXJhdGlvbg== 27130\nIHd5Z2w= 27131\nIFJhbg== 27132\nIEtpbg== 27133\n4buxYw== 27134\nIEJBUg== 27135\nIHBhcGVyd29yaw== 27136\nIHR1bGU= 27137\nIHF1ZXJpYQ== 27138\nIGNvbXBseQ== 27139\nIEhhaXI= 27140\n15nXmw== 27141\nINC/0YDQvtGB0YI= 27142\nIG11dGF0aW9u 27143\nIHJlcHLDqXM= 27144\nIG9jdG9wdXM= 27145\nIGltcG9ydGFudGVz 27146\nIGRlc2VydmVk 27147\nZXRy 27148\nIGRpc2FzdGVycw== 27149\nbMSxbmRh 27150\naXF1w6k= 27151\nIERlc2hhbGI= 27152\nc29v 27153\nb3NzaXA= 27154\nIHJlbGlldmVk 27155\nIENvbGxpbnM= 27156\nIHdhdGVycHJvb2Y= 27157\nIFl1aw== 27158\nIGNvcHlpbmc= 27159\nIGLDvHTDvG4= 27160\nIEhldXRl 27161\nIEVudHJl 27162\nIHJlc2lkdWFs 27163\nIGNvbG9uaWVz 27164\nIMOpbm9ybQ== 27165\nIEVyaW4= 27166\nIHN0YW4= 27167\nIHRyZW1lbmRvdXNseQ== 27168\nIGNhcHR1cmVz 27169\nIFNhaQ== 27170\nw6JjZQ== 27171\nIG1pYcWC 27172\nIDg3 27173\nIGxvZ2dpbmc= 27174\nIGluc2VydGVk 27175\nIGluaGVyZW50bHk= 27176\n7J2R 27177\nbGF2ZQ== 27178\n0L3QuNGH 27179\nIGZlbW1lcw== 27180\nIGTDqXA= 27181\ndWtz 27182\nYWNpYQ== 27183\nIFdhZGU= 27184\nIGppag== 27185\nIFZpbmNlbnQ= 27186\nIEljZWxhbmQ= 27187\naGVt 27188\nIGFwb2xvZ3k= 27189\nIFBlZw== 27190\nIGdsdWVk 27191\nIGNvbXBhbmlvbnM= 27192\nIExpdmVy 27193\nIGNyaXRpY2l6ZWQ= 27194\nbGVhZGluZw== 27195\nIHPDpGdh 27196\nIHNxdWlk 27197\nIG5hcnJhdGl2ZXM= 27198\nIHRha2E= 27199\nbmV6 27200\nd2VpdA== 27201\nIHRyaXBvZA== 27202\nIGV4cGxpYw== 27203\nIHNwaW5hbA== 27204\nIGFwcHJveGltYXRpb24= 27205\nIHBhZ2Fy 27206\nIENhbHZpbg== 27207\nINCy0LXQtNGM 27208\nIGxhYw== 27209\nIHByb2FjdGl2ZQ== 27210\nIFRyYWlu 27211\nb3Jm 27212\nIHN0ZW4= 27213\nIGdyYXBlcw== 27214\nIG1ldXM= 27215\nIGF1dG9tYXQ= 27216\nIGJpYXNlZA== 27217\nIGNoYcOubmU= 27218\nY29hbA== 27219\nIHJlbmNvbnQ= 27220\nIEt1bQ== 27221\nIGZlc3RpdmFscw== 27222\nIHN0YXJ0dXBz 27223\nIGFrYQ== 27224\nIGN5bGluZA== 27225\nc25h 27226\nQ1JJ 27227\nIHJlc3VsdGFkbw== 27228\nIG1pbGVzdG9uZQ== 27229\nIM+F 27230\nIHRlbGVwb3J0 27231\nenljaA== 27232\nNjI= 27233\nIEZlYXI= 27234\nIG51Y2xldXM= 27235\nIHNoaW5lcw== 27236\naG92 27237\nIFBhcnRuZXJz 27238\nIEthcw== 27239\nIG5hZGll 27240\nIGFsZXJ0cw== 27241\nIEJJTEw= 27242\nc3Ryb25n 27243\nIE5hdGU= 27244\nIERlbm1hcms= 27245\nIENhdg== 27246\nT1NU 27247\naMOkbHQ= 27248\nIOyVhOuLjA== 27249\nYW55b24= 27250\nIGVuY291cmFnZXM= 27251\nINC/0L7RgdGC0LDQsg== 27252\nIEh1YW5n 27253\nU1RB 27254\nIHBhaW50cw== 27255\nIHNjaGVkdWxlcw== 27256\nIGNoZWF0ZWQ= 27257\nIGFwcHJveA== 27258\nIO+3 27259\nIMK7Lg== 27260\nIHNtaWxlcw== 27261\naXN1cmU= 27262\nIG5lcmVk 27263\nYXJkZW4= 27264\nIGN1cnQ= 27265\nIOuM 27266\nIFJvdGg= 27267\nIHB1aXNxdWU= 27268\nIEdFVA== 27269\nIFZlZ2V0 27270\nIHByb2R1eg== 27271\nIEJlbGdpdW0= 27272\nIENhbXB1cw== 27273\n16jXmded 27274\naWN1dA== 27275\nINGB0L3QuNC8 27276\nIHLDqXVzcw== 27277\nIHNsaXBwZXJ5 27278\nIEV3 27279\nxbM= 27280\nIExlZ2VuZHM= 27281\nIFRpZmZhbnk= 27282\n0LDQu9C40Lc= 27283\nINC/0LXRgNC10LI= 27284\nINC+0LPRgNC+0Lw= 27285\nIGNyb3M= 27286\nIENF 27287\nQnU= 27288\nIGVuc3VyZXM= 27289\nIGdyYW5kY2hpbGRyZW4= 27290\nIGFjdWVyZG8= 27291\nIHByaXNvbmVy 27292\nIHRoaXJzdHk= 27293\nYmFuZQ== 27294\nIOu5oA== 27295\nIMO6bHRpbWE= 27296\nIExhdW5jaA== 27297\nbml0eQ== 27298\nIGNvbWJ1c3Rpb24= 27299\nIHVuaWNvcm4= 27300\nIGZhbWlsbGU= 27301\nIGxvd2VyaW5n 27302\nIFlpbmc= 27303\nYnVpbGRpbmc= 27304\nIGR1bw== 27305\nIE3DqXhpY28= 27306\nYXN0aWFu 27307\nIOuoueydhA== 27308\nIFJhbHBo 27309\nIHJld3JpdGU= 27310\nIGdsYW0= 27311\naWZpcXVl 27312\nRXI= 27313\nIFJ1bm5pbmc= 27314\n0L7QvdC+0LI= 27315\nIG1lYW5pbmdz 27316\nIGNoZXd5 27317\nIExlc2xpZQ== 27318\nIGZpbmVzdA== 27319\nIGhhaGFoYQ== 27320\nIFNURVA= 27321\nIGxvbmVsaW5lc3M= 27322\ncmlhbnM= 27323\nIHF1ZXN0aW9uZWQ= 27324\nIGVzcXVl 27325\nIHNpbmtpbmc= 27326\nIHBlc28= 27327\nIFdyb25n 27328\nYXNtaW5l 27329\nIGRlZmluaXRpdmU= 27330\nIGJ1eXM= 27331\nIGNydWM= 27332\nY29vbA== 27333\nIOugiA== 27334\nIHDDsw== 27335\nIHV0aWxpemVk 27336\nIHdvcnRod2hpbGU= 27337\nIER5bGFu 27338\nRVNF 27339\nIHZlcnRleA== 27340\ndMSx 27341\nIEZpcg== 27342\nIHphdw== 27343\nIEdlZA== 27344\nINCd0LDQvw== 27345\nZHo= 27346\nIGN1cnNvcg== 27347\nIHN3aXBl 27348\nIGluZXZpdGFibHk= 27349\nIHBvc3RlcnM= 27350\nIGluY2xpbmVk 27351\nIGdyZWV0aW5n 27352\nIGRpc2FwcG9pbnRtZW50 27353\nIHJlbGHDp8Ojbw== 27354\nVFQ= 27355\nIHJhYmI= 27356\nIE1haW5l 27357\nIGFuYWx5emVk 27358\nRkU= 27359\nINCf0L7Quw== 27360\nIFNhbmRyYQ== 27361\nIHBsYWd1ZQ== 27362\nQVJF 27363\nIHbDpHI= 27364\nIFZpdg== 27365\ndW1lZA== 27366\naGFuZG8= 27367\naG91ZXR0ZQ== 27368\nIEJhaWxleQ== 27369\neXNvbg== 27370\nIHNlbXVh 27371\nIGhhcmRjb3Jl 27372\n4oKs 27373\n0ZbQvA== 27374\nw6lyYQ== 27375\nT1RI 27376\nIGZvcmVpZ25lcnM= 27377\nIFBhbGVzdGluaWFu 27378\nIHByb3ByaW8= 27379\n0LDQvdC40Lk= 27380\nIG15dGhz 27381\nV0g= 27382\nIG5pbnRo 27383\nIENyZWF0b3I= 27384\n0LvQvtC8 27385\nIEZsaXA= 27386\nIGVtYW4= 27387\nIGtpxZ8= 27388\nemllaA== 27389\nIEVhcm5lc3Q= 27390\nc3lzdGVt 27391\nluyXkA== 27392\nIGFybWllcw== 27393\nIE91dHNpZGU= 27394\nIGhhcnVz 27395\n0L7QtNCw0YA= 27396\nIHZpc2l0b3I= 27397\nIHN0cmVuZ3RoZW5pbmc= 27398\nIDky 27399\ndmlv 27400\nIOumrA== 27401\nIGdyZWVkeQ== 27402\nIHBvcXVpdG8= 27403\ndWRlcg== 27404\nIEtvcGY= 27405\nIOuLpOydjOyXkA== 27406\nIHNlaXM= 27407\nw6F0aWNv 27408\nIHRydXN0aW5n 27409\nw61w 27410\nIEVtbQ== 27411\nbGVlbg== 27412\nINin2YTZhg== 27413\nIHJlY3J1aXRtZW50 27414\nIEZpbGlw 27415\nINmD2YQ= 27416\nQ2xpbnQ= 27417\nINCy0LXRgQ== 27418\nYXVmdA== 27419\nIGRvbWluYXRl 27420\nIHJlc3Rv 27421\nIGtyYQ== 27422\nw6Fp 27423\nIENhaXQ= 27424\ncm93cw== 27425\nIGNvdW50cnlzaWRl 27426\nIDE5NDU= 27427\n0LDRhtC40Y4= 27428\nINC00Lg= 27429\nIGtlcm5lbA== 27430\nbG92 27431\nIGNhbGN1bGF0aW5n 27432\n2K/Ypw== 27433\nIFdhbHQ= 27434\nIGVtcG93ZXJpbmc= 27435\nIGNoYXNzaXM= 27436\nbGluZWFy 27437\n0LPRgw== 27438\nIG5vdmE= 27439\nIHV5 27440\nIDY5 27441\nIGVuY29tcGFzcw== 27442\ndHJs 27443\nIGNvbXB1dGF0aW9uYWw= 27444\nIHdvcm1z 27445\nIG5oaeG7gXU= 27446\nIGFzdHJvbmF1dHM= 27447\nIHZlcw== 27448\nIHN5dHU= 27449\nIGRlbWFuZGVk 27450\nIGNz 27451\nIE1vbA== 27452\nIGA= 27453\nIGNoYW50 27454\nIHRoZXJlYnk= 27455\nIHBlbmlz 27456\nIGVtb2M= 27457\nd3lu 27458\n0YPQttC1 27459\nIHRyZWFk 27460\nw7NsZQ== 27461\nIGRlZXBlc3Q= 27462\nIG1hY2hl 27463\nIFZlbnQ= 27464\nIEFtc3RlcmRhbQ== 27465\nIHJlYmVs 27466\nIDYx 27467\nINCy0LrRg9GB 27468\ndWZmcw== 27469\nIGRvxJ9ydQ== 27470\nIE5hcG9sZQ== 27471\nzq7Pgw== 27472\nIHdvcmtvdXRz 27473\nIEdsYWQ= 27474\n0L3QtdGB 27475\nIHRlbnNpb25z 27476\nIFNoaWZ0 27477\nIEd1ZXI= 27478\n7YyQ 27479\nIOy5nOq1rA== 27480\n0JY= 27481\nIGltcGxhbnQ= 27482\nw6p1 27483\n6riA 27484\nIGF1dGhvcml6ZWQ= 27485\nQ0VS 27486\nIFJW 27487\nIGhpbA== 27488\nbGV2 27489\nY2ltZW50bw== 27490\nIFVGTw== 27491\n7IOI 27492\nd29y 27493\nIGRhbmNlcw== 27494\nIFBpeGVs 27495\nIHRyb3R6ZGVt 27496\nIG9idGVu 27497\nIEFsZnJlZA== 27498\nIGNvc3RseQ== 27499\nIFN0YW5sZXk= 27500\nIHRlcnJvcmlzdHM= 27501\nIFdpZA== 27502\nheuLiOuLpA== 27503\nIGxlaWNodA== 27504\n7J207Iqk 27505\nIGRvYnJ6ZQ== 27506\nIGhlc2l0 27507\nIGVyesOkaA== 27508\nIGVpbmlnZQ== 27509\nIGhlYnQ= 27510\n0YHQtQ== 27511\nIHVucHJlZGljdA== 27512\nQ8OzbW8= 27513\ncmVtb3M= 27514\nIFRoYW5rZnVsbHk= 27515\nIHB1cnNl 27516\nY2hz 27517\nYW5jZXI= 27518\ndWxvcw== 27519\nc3R1ZA== 27520\nIG5ldXJvbG9n 27521\nIEFuY2llbnQ= 27522\nT3V0 27523\nYXdzemU= 27524\nIG9wcG9zZQ== 27525\nIGFudGlib2RpZXM= 27526\nIFNvbWVob3c= 27527\ncm9wb2xpdGFu 27528\na3Rvcg== 27529\nINGB0YLQvtGA0L7QvdGL 27530\nIHJvY2tldHM= 27531\nIGRpc2FibGU= 27532\nIGNhdGFzdHJvcGg= 27533\ntOye 27534\nIGN5bg== 27535\nINC00YDRg9C30YzRjw== 27536\nIGluc3RydWN0b3Jz 27537\nZW1hYWw= 27538\nIGV0d2E= 27539\nIHl1YW4= 27540\nIEdyb3VuZA== 27541\nIHByZW1pZXJl 27542\n0YfQuNCy 27543\nIHNhaW50 27544\neWJh 27545\nIGtvaw== 27546\nIGNvbnRyYWN0b3Jz 27547\nIOqwgQ== 27548\nINeQ15w= 27549\nIGhlYWRsaW5l 27550\nIGNvbXBsZXRhbWVudGU= 27551\nIGluZXhwZW5zaXZl 27552\nIHZpdQ== 27553\nIEdyYW5kZQ== 27554\nIGJsZWVk 27555\n66y8 27556\nIDcz 27557\nIHRvZGF2w61h 27558\nIFJ1c2g= 27559\nIEVsZGVy 27560\n6rCA64qU 27561\nIFJvdQ== 27562\nINC20LXQvdGJ 27563\nIE1pcmE= 27564\nIGRlaW5l 27565\nIGthcm1h 27566\nIHVtbQ== 27567\nIGVudHNjaGU= 27568\nIEhvbG9jYXVzdA== 27569\nIGRpc2NvdmVyaWVz 27570\nYW1lbnRz 27571\nIHJhaXNvbg== 27572\nIGJ1cmdlcnM= 27573\nQmFjaw== 27574\nIGdkeQ== 27575\nIEFH 27576\nIERhdw== 27577\n7JWg 27578\naGVhZGVk 27579\nIENsYXI= 27580\nSW5zdA== 27581\nIExpZXV0ZW5hbnQ= 27582\nIEFmRA== 27583\nIENlcw== 27584\nIHBlcnNvbmFsaXplZA== 27585\nIGludGVyZmFjZXM= 27586\n4LiI4Liw 27587\nINGA0LXQtg== 27588\nIHN1aWM= 27589\nIHN0YXJ2aW5n 27590\nIG94aWRl 27591\nIGRlY29yYXRlZA== 27592\nIERV 27593\nIOyYiOyBmA== 27594\nIHF1bw== 27595\nIGRpc3RvcnRpb24= 27596\nIOuoueyWtOs= 27597\nIHN0YWtlcw== 27598\nIHN5bnRheA== 27599\nIGJp4bq/dA== 27600\ndGh5 27601\naWNpZQ== 27602\nIGJyYXNpbGU= 27603\naXNpcw== 27604\nUkM= 27605\nIHNob29r 27606\nIGRlcHRocw== 27607\nIENvc3Rh 27608\nIHZvY2Fscw== 27609\nIGNvYXN0ZXI= 27610\nIGZhbG91 27611\nZXR0bGU= 27612\nIGtlbm5lbg== 27613\nIGRlcml2ZQ== 27614\nIGFpZHM= 27615\nINCd0LjQug== 27616\nIGVudHdpYw== 27617\nIHZlcnRpY2FsbHk= 27618\nIM0= 27619\nIFNVVg== 27620\nIGZpcmV3b3Jrcw== 27621\nIHNwZWNpZmljcw== 27622\nIGluc2lzdGVk 27623\nIGRlc2hhbGI= 27624\nIEdvbno= 27625\nbG92ZQ== 27626\nIE1pbGl0YXJ5 27627\nIFBpZXJyZQ== 27628\nIOKI 27629\nIFdob3Nl 27630\nIHBlcmZ1bWU= 27631\nIM+AzrU= 27632\nIGxvd2VyZWQ= 27633\nIGNyb3NzZXM= 27634\nIHRyYW5zbGF0ZXM= 27635\nIGFycmliYQ== 27636\nw61kbw== 27637\nIExldg== 27638\nIENpYW8= 27639\nIHNjaG9sYXJzaGlwcw== 27640\nIGdlc3R1cmVz 27641\nINGA0LXQt9GD0LvRjNGC0LDRgg== 27642\nIHF1ZXN0w6Nv 27643\nIENvbG9uZWw= 27644\nIEJvdHQ= 27645\n2LHZgQ== 27646\nTklORw== 27647\nIFdhdGNoaW5n 27648\nIFB1cnBsZQ== 27649\n0YHRgtGA0LDQvQ== 27650\nIGV4ZWN1dGl2ZXM= 27651\nIEtyaXM= 27652\nb3JuZXlz 27653\n0LXQvdC90YvQuQ== 27654\nIGNvYXRlZA== 27655\nxKk= 27656\nIHBhcmtlZA== 27657\nINGB0LLQtdGC 27658\nISEhISE= 27659\nIEZsb3lk 27660\nxLFzxLE= 27661\nemnEhw== 27662\nIG1vdGl2YXRl 27663\nIEVsb24= 27664\nbGVhbg== 27665\nhpM= 27666\nIGlw 27667\nIG5pxbw= 27668\nIEV4cGVyaWVuY2U= 27669\nIFRpbmE= 27670\nIEtvbGxlZ2U= 27671\nIEFtYmFzc2Fkb3I= 27672\naW55YQ== 27673\nIHRoZWZ0 27674\nIGhldXJlcw== 27675\nIE15c3Q= 27676\nIG1haXNvbg== 27677\nbGVi 27678\nIGJvd2xz 27679\nIELDvHJnZXI= 27680\nIFJvb3NldmVsdA== 27681\nUlA= 27682\n6rCA7JqU 27683\nIERlbGljaW91cw== 27684\nZXJkaW5ncw== 27685\nIEFzc29jaWF0ZQ== 27686\nb3Vzc2U= 27687\nIENvcnQ= 27688\nIFJlcGVhdA== 27689\nIEdsb3J5 27690\nIGNvbnRhZw== 27691\n4LmA4Lil 27692\nIFBhcmFk 27693\nIEtlcnJ5 27694\nIOq/ 27695\nIFdhdmU= 27696\nIGdhdGV3YXk= 27697\nIeOAjQ== 27698\nIHRyYW5zY2VuZA== 27699\nIGRhbWFnZXM= 27700\nIHRhaWxz 27701\nIGdyYXZpdGF0aW9uYWw= 27702\nIFNoaWVsZA== 27703\nIHByaW1pdGl2ZQ== 27704\nIGNhcnJpZXJz 27705\nIEh1YXdlaQ== 27706\n2YLYrw== 27707\nIGZlbGl6 27708\nIE1pYQ== 27709\nINC/0YDRj9C80L4= 27710\nINC/0YDQvtC40YHRhdC+0LTQuNGC 27711\nIE11cnBoeQ== 27712\nIEFjdGl2 27713\nIGRpc2NvbWZvcnQ= 27714\n15HXlA== 27715\nIEtlbGw= 27716\nIENlbnR1cnk= 27717\nIHNwYWdoZXR0aQ== 27718\nIER1cmNo 27719\nIGNpZXJ0bw== 27720\nIEVtcHJlc3M= 27721\nIGd1dHM= 27722\nbmVn 27723\nINC00L7RgdGC0LDRgtC+0YfQvdC+ 27724\nIHZvbHVudGFyeQ== 27725\nIHNxdWlycmVs 27726\nIE1heg== 27727\ntOyLrA== 27728\nINCy0Lg= 27729\nINGC0LDQutC40YU= 27730\nIFNoYXJvbg== 27731\nIGVudGh1c2lhc3RpYw== 27732\naXJlbWVudA== 27733\nIO2emOuTpA== 27734\nIHBvdHJ6ZQ== 27735\nIGluaXRpYXRlZA== 27736\nIMWbcm9k 27737\nIOydtOumhA== 27738\nIHJlbWFrZQ== 27739\nIGN1bG1pbg== 27740\nIGNvbmZ1c2U= 27741\nbWl5b3I= 27742\ndXJhcg== 27743\nQ1RPUg== 27744\nIGJ1bm55 27745\nZWxw 27746\nIHZhbXBpcmU= 27747\nIGlsbHVtaW4= 27748\nIEhlbmQ= 27749\nINC60LDRh9C1 27750\nIFNhbHY= 27751\nINC60LDQvdCw0Ls= 27752\nIHBvcnRh 27753\nIGFzc2hvbGU= 27754\nIHN1cHBvcnRlcg== 27755\nIHNrZXB0aWNhbA== 27756\nIGtuZWFk 27757\nIOyYrA== 27758\nZXph 27759\nIHF1w6o= 27760\nIERI 27761\nIHJvZHo= 27762\nb3duZXJz 27763\nIHBsb3Rz 27764\nIGRlbGF5cw== 27765\nIGJlbG9uZ2Vk 27766\nIGFoaA== 27767\nIGNhcnZlZA== 27768\nIHJpc2Vu 27769\nIG9yZGVu 27770\ncGhvbnk= 27771\naXNzeQ== 27772\nISEhISEhISE= 27773\nIG9sZHXEn3VudQ== 27774\nIHJvc2Vz 27775\nIGludHJpbnM= 27776\nIEFuZ3N0 27777\nIGZpbmFsZW1lbnQ= 27778\n7Ked 27779\nU09VTkQ= 27780\nIGluZHVs 27781\nsIw= 27782\nINeV15Q= 27783\nY2h5 27784\n0LDQutGB0LjQvA== 27785\nIG5nZ2Fr 27786\nIGxpeg== 27787\nIGVsZWN0b3JhbA== 27788\nIFNoYXdu 27789\ncmljaWE= 27790\nIGFyc2Vu 27791\nIFBlcA== 27792\nIDIwMzA= 27793\nIHRyb3BoeQ== 27794\nIHNtb290aGVy 27795\nIGVycmU= 27796\nIGNyYXNoZXM= 27797\nIHNjaG5l 27798\nIGFzaQ== 27799\nIE1hw58= 27800\n0YPQu9C4 27801\n0YfQtdGB0LrQuA== 27802\naWV2ZXM= 27803\nUkVBTQ== 27804\nIHN0aXJyaW5n 27805\ndXN0YQ== 27806\nIGludmVy 27807\nc2lnaHQ= 27808\nb3JkdQ== 27809\nb29y 27810\nIMSDbg== 27811\nIHBlcm1pdHRlZA== 27812\n0YDRjA== 27813\nIGNoYWxr 27814\nIHRhdHRvb3M= 27815\nIFJlbGF0aW9ucw== 27816\nIEhveQ== 27817\na3NhbQ== 27818\nIGRlbnRpc3Q= 27819\nIOuvuOq1rQ== 27820\nIHNvZmE= 27821\nINGU 27822\nIGZvcm1l 27823\n2YLYqQ== 27824\nIOuyoA== 27825\nIGVtYnJhY2Vk 27826\nbWls 27827\nIHN1bmdsYXNzZXM= 27828\nIOqwlA== 27829\nIHNlYW1sZXNz 27830\nIGJlZXA= 27831\nw6RjaHN0 27832\nIHN3ZWV0cw== 27833\nIHNlbWFpbmU= 27834\nIGlycmVsZXZhbnQ= 27835\nIGRlc2Vudm9s 27836\nz4HPiQ== 27837\nINC/0YDQvtC40LfQstC+0LQ= 27838\nYW5ncw== 27839\nIGFyb21h 27840\nIHBvb2xz 27841\nIGdp4bud 27842\nIFVn 27843\nIGNsaW1iZWQ= 27844\nIHRyZW5kaW5n 27845\nIHNlcGVydGk= 27846\nIEJhcnI= 27847\nIHDFgg== 27848\nIE9yaWdpbmFsbHk= 27849\nINqv 27850\ndXR0bw== 27851\nirjr 27852\nINC60L7RgtC+0YDRi9GF 27853\nINC30LDRhQ== 27854\nIGVpZ2VuZW4= 27855\nIG11cmRlcmVy 27856\nZXJuYW1l 27857\nxZ4= 27858\nIGFubm91bmNpbmc= 27859\nIFBsYXRmb3Jt 27860\nIGV4cGxhbmF0aW9ucw== 27861\nIHByZXNlbnRl 27862\nIE5hc8SxbA== 27863\nIG9ycGhhbg== 27864\nIEZvcnRuaXRl 27865\ncm9zcGVjdA== 27866\nZXJlZGl0aA== 27867\nIOyXhuyWtA== 27868\nIE5JSA== 27869\nd2FnZW4= 27870\nIHJlbWVk 27871\np4Dr 27872\nbW9udA== 27873\nIEplZmZyZXk= 27874\ncHJvbQ== 27875\nIGbDvG5m 27876\nINC90LDQt9Cw0LQ= 27877\nIGN1Y3VtYmVy 27878\nIFN1bW1pdA== 27879\np6Q= 27880\n0J3QkNCv 27881\nIEpldA== 27882\nIGNhbWJpbw== 27883\n0YPQudGC0LU= 27884\nIGN1Ymlj 27885\nIGRpc3Byb3BvcnRpb24= 27886\nZXJleg== 27887\nIG1hZG5lc3M= 27888\nIHRpbnQ= 27889\nIGZ1ZXJvbg== 27890\nIGt5 27891\nIGJpcGFydA== 27892\nU2Ft 27893\nIOu9 27894\nIHJpdg== 27895\nIFRhbms= 27896\nIOuGkw== 27897\nIHJlbmRlcmVk 27898\nxZtsxJk= 27899\nY29uZHM= 27900\nIGRpc3J1cHRpb24= 27901\nIGluY29udmVu 27902\nIHF1aXNlcg== 27903\nIGRlbmlhbA== 27904\nIGdhbGF4aWVz 27905\nIHNvdmVyZWlnbg== 27906\nIHBvbHNr 27907\nz4HPjg== 27908\nIG1leA== 27909\nIGNhcmFjdGVy 27910\nIExlZ28= 27911\nYW5kZW4= 27912\nLici 27913\nIO2UjOs= 27914\nIGNvbXByZXNzb3I= 27915\nIE1vdmll 27916\nIGFwcGxpY2FudHM= 27917\nemllaGVu 27918\nIHZlZ2V0YXRpb24= 27919\nIGJlbGxl 27920\nIEdPT0Q= 27921\nIEJhdQ== 27922\nIHJlc2VudA== 27923\nc2V4 27924\nYW1lbnRvcw== 27925\nINeU15bXlA== 27926\nIG92ZXJsb2Fk 27927\nIHNpbGljb25l 27928\n0LXRgdGC0L3Qvg== 27929\nIGRlbmtlbg== 27930\nIGRlZmluaXQ= 27931\nIFdhc24= 27932\nIGFsdGVyZWQ= 27933\nIFNvbw== 27934\nIFdpbmc= 27935\naW5kcmU= 27936\nIE5QQw== 27937\nz4HOrQ== 27938\nIFR3ZW50eQ== 27939\nIExpZWJl 27940\nIGhvbWVsZXNzbmVzcw== 27941\nb3VsZGVy 27942\nINCY0YLQsNC6 27943\n0YHQutCw0Y8= 27944\nIGN1YXRybw== 27945\nIEhhcnZleQ== 27946\nIHBoaWxhbg== 27947\nIEJlZXQ= 27948\nIHBvbGljaW5n 27949\nIEFsZXhhbmQ= 27950\nINC80L7Qu9C+0LQ= 27951\nIG3DvHM= 27952\nIGhpem8= 27953\n67O064uk 27954\nINC/0L7Qt9Cy0L7Quw== 27955\nINC/0YvRgg== 27956\n0L7Rh9C10LzRgw== 27957\nIO2DnA== 27958\nIGNyeXB0b2N1cnJlbmN5 27959\nIGxvcm8= 27960\nIHN1bW1hdGlvbg== 27961\nIGJha2FsxLFt 27962\nIG5ldXJvcw== 27963\n2KU= 27964\nINC80L7QttC10Lw= 27965\nIMO8c3Q= 27966\nIHByZWxpbWluYXJ5 27967\nIGhvcm5z 27968\nIFRJ 27969\n2YPZhA== 27970\nWU8= 27971\nIGhpbmdl 27972\nIHJlcGFpcnM= 27973\nIGJvbmRpbmc= 27974\nIGJpemU= 27975\nINGI0YI= 27976\nIG1vdGl2ZQ== 27977\nIE5pZ2VyaWE= 27978\nMTIw 27979\nYmxvY2s= 27980\nIGF2aWF0aW9u 27981\nIEtvbW11bg== 27982\nINC+0LrQsNC3 27983\nIHRlbmhh 27984\nIGVkdWNhdGluZw== 27985\nIHN0YWF0 27986\nINGB0LrQvtC70YzQutC+ 27987\nIGZyaWdodGVuZWQ= 27988\nIHNlZWtz 27989\n0YDRg9GI 27990\ncXVlbnQ= 27991\nIE5vdQ== 27992\nIHByYXQ= 27993\nIFNob3Q= 27994\nV29yaw== 27995\na2FyYW5n 27996\nIExpZ2h0bmluZw== 27997\nbm9sZHM= 27998\ncm9sbGVk 27999\nZ2xhc3M= 28000\nIGNyZWRpYmlsaXR5 28001\nSVRZ 28002\nIGF0bW9zcGhlcmlj 28003\nIGhhdmlh 28004\nw6RuZGVybg== 28005\nY2hlZXJz 28006\nVGhlc2U= 28007\nIENlbGw= 28008\nIG1hZ25lcw== 28009\nIEJyYXZv 28010\nc2Vhc29u 28011\nIMWfZXlsZXI= 28012\n8J+O 28013\nd2hpdGU= 28014\nIE1C 28015\nIHN0YWNrZWQ= 28016\nIDc0 28017\nINC00LDQstCw0Lk= 28018\nIHBhdmU= 28019\nINC+0YU= 28020\nIGRhdGFzZXQ= 28021\nIHJldG91cg== 28022\nIG1hdHVyaXR5 28023\nIHF1YXNl 28024\nIDkz 28025\nIFN5bQ== 28026\nIGJyaWVmaW5n 28027\nIGN1bHR1cmFsbHk= 28028\nIOy3qA== 28029\naW5oYXM= 28030\nIG1hZGFt 28031\nIGFqdWRhcg== 28032\nIFRpYmV0 28033\nIGxlYWtz 28034\nY2lsZQ== 28035\nIHRoZWF0ZXJz 28036\n7Jio 28037\nNzI= 28038\nIFdhc2g= 28039\nIFF1YWxpdHk= 28040\nIEl2YW4= 28041\nIEJlbnQ= 28042\naWdhdG9y 28043\nIEdlc2NoaWNodGU= 28044\nIHJlYWN0aXZl 28045\nIDE5MDA= 28046\nIGNvbnRyYWRpY3Q= 28047\nIHppZW1saWNo 28048\nIGNvaG9ydA== 28049\n4bun 28050\nIHBlc3RpYw== 28051\nIG9yYXo= 28052\nIHRlbGxlbWVudA== 28053\n6b4= 28054\nIE5vd2FkYXlz 28055\nY3Jldw== 28056\nU3RldmU= 28057\nIGZpY3Rpb25hbA== 28058\nIGlsaw== 28059\nIGdhc29saW5l 28060\nemFt 28061\nIHBhbmNha2U= 28062\nw6huY2lh 28063\nIG11aXRvcw== 28064\nIGJ1cnk= 28065\nIGtvcA== 28066\nIElR 28067\nIHJlc2VydmF0aW9u 28068\nIFVwZGF0ZQ== 28069\nIGplag== 28070\nIEV5ZXM= 28071\nIHZpdmU= 28072\nIGNoY2U= 28073\nIEluaQ== 28074\ncmVzcG9ucw== 28075\nIHJlZmxlY3RpdmU= 28076\nIFdhbg== 28077\n0ZbQtw== 28078\nIGVuY2E= 28079\nIGVtYm9k 28080\nIEJ1cmdlcg== 28081\nIGFjYWRlbWlh 28082\nIENpcmM= 28083\nINC/0YDQtdC6 28084\nIGFubGFt 28085\nIHBoaWxhbnRocm9w 28086\nIEJhxZ8= 28087\nIEF1ZGk= 28088\nIHZvc3Q= 28089\nIHJlcGVy 28090\nUGV0ZXI= 28091\nIGNvbnNvbGVz 28092\nIHNjcnV0 28093\nIFR1cm5lcg== 28094\nINCx0YvQsg== 28095\nSUlJ 28096\nIEZsaWdodA== 28097\n4LiW 28098\nIFJhdmVu 28099\nIGNvcnJvcw== 28100\nZmVybg== 28101\nIHByb3Zh 28102\nIFNldg== 28103\nIHJlY2lwcm8= 28104\nIDE5ODU= 28105\nIG51ZXZh 28106\nIGRhYg== 28107\n44CB44CM 28108\nIG1leg== 28109\nIFN0YXJr 28110\ncHBpbmdz 28111\n0L7RgdGC0Lg= 28112\n7Kad 28113\nIGZyYW1pbmc= 28114\nINCg0LDQtw== 28115\nIHBvc3Rw 28116\nIFNoYW5ub24= 28117\nINC60YPRgA== 28118\nIGpha2J5 28119\naWVubmVudA== 28120\nIE1hcHM= 28121\nIFJldmVsYXRpb24= 28122\nINGB0YLQsNC7 28123\n7Jq0642w 28124\nIGRldmFudA== 28125\nIEdpdmluZw== 28126\nIFdBUw== 28127\nINC60L7Qs9C+ 28128\nIHJlbWE= 28129\nIFJD 28130\nbsOt 28131\nIHNsaXBwZWQ= 28132\nIFJhbXM= 28133\nIHdlZXQ= 28134\nIG1hc2N1bGluZQ== 28135\nIEVj 28136\nIHJlb3A= 28137\nIFBsYW50 28138\nIE1BWQ== 28139\nIHNwaWtlcw== 28140\nIG5venpsZQ== 28141\nIFdpa2lwZWRpYQ== 28142\nIENvaA== 28143\nSVNTQQ== 28144\nY2hsb3NzZW4= 28145\n7KeA66W8 28146\nIOuvuOs= 28147\nIE5lZGVy 28148\nSm9zaA== 28149\nINCg0L7RgdGB0LjQuA== 28150\nIDE5ODc= 28151\nIFRoZW9yeQ== 28152\nZWtr 28153\nIHV0YW4= 28154\nINC00L7QvNCw 28155\nY2h1 28156\nINGB0LE= 28157\nIGFwcm92ZQ== 28158\nVkVO 28159\ndWVwcmludA== 28160\nIDg0 28161\nQ29y 28162\nIHJpY2hlcg== 28163\nIHNhbmR3aWNoZXM= 28164\nYXRzdQ== 28165\n0YjQuNGF 28166\nIGxhdHQ= 28167\nfn5+fg== 28168\nZnJpZW5kcw== 28169\nIGRlcm5pw6hyZQ== 28170\nIHN0ZXJlbw== 28171\nINGN0LrRgdC/ 28172\nIHByb3RlY3Rpb25z 28173\nIGhhdXQ= 28174\nRXZlcnlvbmU= 28175\nIGVudGVycHJpc2Vz 28176\nIE1vc3RseQ== 28177\nIFNwb3RpZnk= 28178\nIFNleA== 28179\nIHVuZw== 28180\njOulvA== 28181\nIGFjdGl2aXNt 28182\nY3RpY2E= 28183\nb3JpZ2luYWw= 28184\nINC/0YDQvtCz0YDQsNC8 28185\nIGJyb2Njb2xp 28186\n4KY= 28187\n0L7Qs9GA0LDRhA== 28188\nIHNla2FyYW5n 28189\nIGNyYWZ0aW5n 28190\nINCx0LDQvQ== 28191\nIFJheg== 28192\nIG5haXZl 28193\nIHNjcm9sbGluZw== 28194\nIG51bWVyaWNhbA== 28195\nIHNjaGVkdWxpbmc= 28196\nIGFwYXJ0bWVudHM= 28197\n540= 28198\nIHN0cmV0Y2hlcw== 28199\nYWNleQ== 28200\nIEhFUg== 28201\nIHppbmM= 28202\nIGRhcm4= 28203\nIGPDqWw= 28204\nIHdhcmRyb2Jl 28205\nIHJlZGlyZWN0 28206\nIGp1bQ== 28207\nIFN0cmFuZ2U= 28208\nIG7DoG8= 28209\nIGV4cGVyaW1lbnRpbmc= 28210\nw6lyw6k= 28211\nIHZvdWxleg== 28212\nIGdlYmU= 28213\nIEthbm4= 28214\nIMSR4buZ 28215\nIE1heGlt 28216\nIEvDtm4= 28217\nIEdsYXM= 28218\nIHBvbGlzaGVk 28219\nIG51bWE= 28220\nSWNo 28221\nIHJpdHVhbHM= 28222\nIFNJ 28223\n0LjRgtC10LvQuA== 28224\nIGluZmlsdA== 28225\nIHNjYXJm 28226\nb3BoeQ== 28227\nIHlpbmU= 28228\nIGNpdmlj 28229\nIE1lbmc= 28230\nw6RuZ2U= 28231\n1aU= 28232\naGlzdG9pcmU= 28233\nIE9rZQ== 28234\nIOyYhg== 28235\nIHNvbGx0ZW4= 28236\nIDgy 28237\nIHByZXNjcmliZWQ= 28238\nIER1YmFp 28239\nIEVsdGVybg== 28240\nIG5hdGlvbndpZGU= 28241\nIHNrYXRpbmc= 28242\naWFyeQ== 28243\nIHJld2FyZGVk 28244\nIG1vcmFsaXR5 28245\nIE1hZ2dpZQ== 28246\nIE9oaGg= 28247\nIEZhaHJlbg== 28248\nb2x2ZWQ= 28249\nIGRldXhpw6htZQ== 28250\ndGVjaG4= 28251\ncm9sZQ== 28252\nIGxlaWRlcg== 28253\nIEpBWQ== 28254\nINC40L3RhNC+0YDQvA== 28255\nIGNhZmZl 28256\ncmVpY2hlbg== 28257\nIGthcnQ= 28258\nIEN1dGU= 28259\nZmZlY3RpdmU= 28260\nIGJ1bGx5 28261\nYWdhcg== 28262\nIGNvbW1vZGl0eQ== 28263\nIG9icmln 28264\nT1VS 28265\nIHVucGxlYXNhbnQ= 28266\nbm94 28267\nSnVs 28268\nb2xpdGg= 28269\n0YLQvtGP0Yk= 28270\nIEJlbGxh 28271\nIGRvbGxz 28272\nIEhvZmY= 28273\nIGFkdmlzb3Jz 28274\nIHRyYW5zZmVycw== 28275\nIEdva3U= 28276\nIDEyMDA= 28277\naW5ob3M= 28278\nUGFs 28279\nIOuYkQ== 28280\nIHJlcHQ= 28281\nIGFjY29tcGxpc2htZW50 28282\nIHdlYXZl 28283\nIG92ZXJzaWdodA== 28284\nIHVuaGVhbHRoeQ== 28285\nIGZpbHQ= 28286\nIHB1ZGRpbmc= 28287\nIE1pZ3VlbA== 28288\nIGNodWNrbGVz 28289\ndmVyc2lvbg== 28290\nIGNvbmZlc3Npb24= 28291\ndmFsdWU= 28292\nIHRyaXVtcGg= 28293\nIHNhaXI= 28294\nIOuFuA== 28295\nIGFydGU= 28296\nIE1hdGVyaWFs 28297\ndXRp 28298\nIGxpcXVvcg== 28299\nIEJheWVybg== 28300\nIE1haWw= 28301\nIO2WpQ== 28302\n0YHQutC+0Lw= 28303\nIGNoZWFwZXN0 28304\nINGH0LDRgdGC0Lg= 28305\nIEpvYnM= 28306\nIENhbnlvbg== 28307\naGFybWE= 28308\nYWxleQ== 28309\nYW5kcm8= 28310\nIGFwcGVhcmFuY2Vz 28311\ncHJvZg== 28312\nINC+0Lc= 28313\nbGFnZW4= 28314\nIC8v 28315\nINC70LjRiNGM 28316\nIHJlY292ZXJpbmc= 28317\n0LTQtg== 28318\ncHN5 28319\nIHN3aWZ0 28320\nIFNwaW4= 28321\nIHNlaW5lbQ== 28322\nIGRvbHBo 28323\nZsO8aHI= 28324\nw6J0 28325\nIGFsdGlqZA== 28326\nIE1hcnR5 28327\nIEhvY2g= 28328\nIHByZWRhdG9ycw== 28329\nIHZvcmhlcg== 28330\nINCU0LDQstCw0Lk= 28331\nIGZyYWdtZW50cw== 28332\nIHBhc3RyeQ== 28333\nIGNvbW1lbg== 28334\nIFNhbmE= 28335\nIOqxtOuNsA== 28336\ndXNzZW4= 28337\nIHRlbGE= 28338\nIE5pbmE= 28339\nbGVr 28340\nIGNyaWVz 28341\nIHRoaWdocw== 28342\nIEZsZXg= 28343\nIEJ1eno= 28344\n44Q= 28345\nVXM= 28346\nIHBhc28= 28347\nIGRlY2xpbmVk 28348\nIE55 28349\nYmFsYW5jZQ== 28350\nIG1hc2E= 28351\nIGpvcw== 28352\nINCh0L/QsNGB0LjQsdC+ 28353\nYWNodQ== 28354\nbG91ZA== 28355\nIHBlbmE= 28356\nIFdhbGQ= 28357\nIGVsaW1pbmF0aW9u 28358\nINCy0LXRgdGM 28359\nb3JhZ2U= 28360\nIG1pc3VuZGVyc3RhbmRpbmc= 28361\nIGVuZG9yc2U= 28362\nIG9nw7NsZQ== 28363\nIGdyZWVk 28364\nIGtsZWlu 28365\n15zXlA== 28366\nUkVZ 28367\nIEVhdGluZw== 28368\nIHNlbWluYXI= 28369\nIEJpcnRoZGF5 28370\nIHF1ZWxsZQ== 28371\nIE11bHRp 28372\nIHRpcmFy 28373\nIHBlcmNo 28374\nIGxhdm9y 28375\nIEppYQ== 28376\nIG11dGF0aW9ucw== 28377\nIGNpZ2FyZXR0ZXM= 28378\n2YjYrA== 28379\nIGNvdXNpbnM= 28380\nIGNhcHN1bGU= 28381\nIGhvcnJpZmlj 28382\nIHN0dXI= 28383\nIHplaWd0 28384\nbnV0cw== 28385\nIG1lYW53aGlsZQ== 28386\nIENvbGlu 28387\nIGdvYmllcm5v 28388\nIGd3 28389\nIHVoaA== 28390\nIEpFUg== 28391\nc3BlY2lmaWM= 28392\nIGFsbGVnYXRpb25z 28393\nIOupiw== 28394\nIEVsbGE= 28395\nb29rZWQ= 28396\nIEZpdA== 28397\nYWZmbGU= 28398\nIEFwcsOocw== 28399\nIER1Y2s= 28400\nIGNlbGx1bGFy 28401\nY8Ozdw== 28402\nINGH0YPQstGB0YLQsg== 28403\nZ2Vub21tZW4= 28404\n7Iqk7Yq4 28405\nIGxhaW4= 28406\naXNvbA== 28407\nIGhvbGRlcnM= 28408\nIGJvb3N0ZXI= 28409\nIFNhc2hh 28410\n0YvQstCw0LXRgg== 28411\ngbw= 28412\nIHNlcGFyYXRpbmc= 28413\nIHJlaW5mb3JjZW1lbnQ= 28414\nINC+0LTQvdC+0Lk= 28415\n7JeG 28416\nSURF 28417\nIE9wdGlvbg== 28418\ncGhvbg== 28419\nIHBsYWlz 28420\nIENhbWI= 28421\nIO2ZmA== 28422\nIHVuY29tbW9u 28423\nIjo= 28424\nbWl5b3J1bQ== 28425\nbW9p 28426\nYWNqZQ== 28427\n0LDQttGD 28428\n1bY= 28429\nIGdlbXM= 28430\nw7xsZXI= 28431\nb29scw== 28432\nIGVuenltZXM= 28433\nIGtpZG5hcHBlZA== 28434\nIGtldGNodXA= 28435\ndGFsaw== 28436\nIHphY2g= 28437\nIHdhc2hlcg== 28438\n44CC44CC 28439\nIEFyY2hpdGVjdA== 28440\ndmVudWU= 28441\nIFBsYW5uaW5n 28442\nIFNhdmlvcg== 28443\nINCz0YDRg9C/0L8= 28444\n7Yq8 28445\nYXJ5YQ== 28446\nIHByb2Nlc28= 28447\nIGxpbWJz 28448\nIHJlYWxpemVz 28449\naWFuZGVy 28450\nRlM= 28451\nYWpp 28452\nIHVuaXRl 28453\nIOydmOs= 28454\nIHBvc3PDrXZlbA== 28455\ncmFpdHM= 28456\nIEFncmU= 28457\n24zaqQ== 28458\n7ISc64+E 28459\nINCy0LXQuw== 28460\nINC80LXRgdGP 28461\nYW5vcg== 28462\nUGF0 28463\nIGRlcm5pZXI= 28464\nz4PPhM61 28465\nINC60LDQutCw0Y8= 28466\nIGzDpHNzdA== 28467\nIE1laA== 28468\nIG5naA== 28469\nIGFtYXRldXI= 28470\nRmU= 28471\nIOq2gQ== 28472\nIHNpdHVhY2nDs24= 28473\nIHNlZGFu 28474\nIGNsZWFuc2luZw== 28475\nbGFzdGluZw== 28476\nIGNvbW11bmlzdA== 28477\nQU5F 28478\nIGlycmVndWxhcg== 28479\nIHNvdXQ= 28480\nIENhcm5leQ== 28481\nIGFsbGVtYWFs 28482\nIG11Y2jDrXM= 28483\nIGxpYnJv 28484\n0K3RgtC+ 28485\nINCw0L8= 28486\nIGNvbnRpbnVhdGlvbg== 28487\nIExvcg== 28488\nPyIs 28489\ncXVpbg== 28490\nIGNoYXJhY3Rlcml6ZWQ= 28491\nYWplcw== 28492\nIHNpZ2h0cw== 28493\nINGP0LfRiw== 28494\nIFVoaA== 28495\nYmlydGg= 28496\nZG9uZw== 28497\nIGhhYmxhbmRv 28498\nIHN5bXB0b20= 28499\nIGNhcGFjaXRvcg== 28500\nIHRyYW5zcG9ydGVk 28501\nIGlnbm9yYW50 28502\nINC90LjQutC+0LPQtNCw 28503\nIGRyaXA= 28504\nIEV2YQ== 28505\nIGFkamVjdA== 28506\nIG1hc3NpdmVseQ== 28507\nIEV0aGk= 28508\nIENpcmNsZQ== 28509\nIHJhaW5mYWxs 28510\nIE1vdXNl 28511\nIHJlZnVuZA== 28512\nIFp3 28513\nYXNzZW1i 28514\nIDIyMA== 28515\nIE9yZA== 28516\nIHZlaW5z 28517\nIEdpYW50 28518\nIG3Do2U= 28519\nIHZhcA== 28520\nIG1pc3Nlcw== 28521\nzr/Phc+C 28522\nTW8= 28523\nIEVudHdpY2s= 28524\nSU5U 28525\n2YbYqg== 28526\nIHRoZW9yZXRpY2FsbHk= 28527\nIHRlYXJpbmc= 28528\nIHRyb3VibGVk 28529\ncHJlbQ== 28530\nIHJlcGV0aXRpdmU= 28531\nIOKW 28532\nIGhlYXZlbmx5 28533\nIEFtYmVy 28534\nINC/0L7Qu9C+0LY= 28535\nIO2VtOyk 28536\nIHZvd2Vs 28537\nYW5raW5n 28538\nIFdpcnRzY2hhZnQ= 28539\nIGlycg== 28540\nIGNvenk= 28541\nIHVuZmFtaWxpYXI= 28542\nIFBvcnM= 28543\nIOunnuyVhA== 28544\nIFRpbW90aHk= 28545\n0YHQvtC70Y7Rgg== 28546\ncGV4 28547\nIFZJUw== 28548\nKSg= 28549\nIHN1cGVyc3Q= 28550\nIGltcHJvdg== 28551\nIEJlbmc= 28552\nIGRpc2Nvbm5lY3RlZA== 28553\nIGFwdA== 28554\n0YDQtdC9 28555\nIEV4dHJh 28556\nINCx0LXQuw== 28557\nc2hvcA== 28558\nZGluZ3M= 28559\nIENvbm5lY3RpY3V0 28560\n7LCs 28561\nIEdD 28562\nYmVo 28563\nSmVyZW15 28564\nIEJhdHQ= 28565\nYXRoYQ== 28566\nIFp1c2FtbWVu 28567\nc2NyZWFtcw== 28568\nIGdyYXM= 28569\nYWZmdA== 28570\nIEluaXRpYWxseQ== 28571\nIEJyZXR0 28572\nIHNwZWNpZmljYXRpb25z 28573\nIHNlYXdlZWQ= 28574\nIG9hdGg= 28575\nIGZvdW50YWlu 28576\nINC60L7RgtC+0YDQvtC5 28577\nIFN0ZWlu 28578\nIENvcmludGg= 28579\nIGNvbmp1Zw== 28580\nIGNvbXBlbnNhdGU= 28581\nIOuKkOuCjOydtA== 28582\nIG9uemU= 28583\nIHNraW5jYXJl 28584\nQnJpYW4= 28585\nIHNlcnZpcg== 28586\nfX0= 28587\nIFZpaw== 28588\nIHVuaW50 28589\nIHN1cHBsaWVycw== 28590\nIGJhbGNvbnk= 28591\nIGVuZXJnaWE= 28592\nb21ldHJpYw== 28593\n0LfRjw== 28594\nIHNpZ2g= 28595\nIFRPTQ== 28596\nIFB1cmU= 28597\neXR0 28598\n0YvRgQ== 28599\nIFJhaW5ib3c= 28600\nIFBpdHRz 28601\n15nXng== 28602\nIHN0YXR1ZXM= 28603\naGVhZHM= 28604\nIGNvdXBsZWQ= 28605\nIGhlcmQ= 28606\nIGV4Y2x1ZGVk 28607\nIGdpbHQ= 28608\nINGO 28609\nIHN3b2pl 28610\nIFN2ZXI= 28611\nNjM= 28612\naXNzYW50 28613\nIGTDvHJmZW4= 28614\noIjr 28615\nIGtpc3Npbmc= 28616\nb29m 28617\nIGN1cnNlZA== 28618\nIHNob3dlcnM= 28619\nIHN3aW5naW5n 28620\nIHJlcHJvZHVjZQ== 28621\nIHPDpHR0 28622\nZWxjb21l 28623\nIGZ1bmRhbWVudGFscw== 28624\nIGFsbW9uZA== 28625\nIHDDqQ== 28626\nIHdlbGxiZWluZw== 28627\nIGh1bnRlcnM= 28628\nU2Vj 28629\nk5zrprQ= 28630\nIGVtaXNzaW9u 28631\nIHBzeWNob2xvZ2lzdA== 28632\nIGJldHJheWVk 28633\nIFJleW5vbGRz 28634\nTEVT 28635\nIHBvbGxpbmc= 28636\nIG5lZ2F0aXZlbHk= 28637\nIGNvbWJpbmVz 28638\n15zXkA== 28639\n0LDRgNCw 28640\nzrvOu86s 28641\nIFR1cm5z 28642\nT1RU 28643\nINeU15k= 28644\nYWlzb24= 28645\nIGFpcmxpbmU= 28646\nIHJlc3RyaWN0aW9u 28647\nd2Fs 28648\nIGF1cmFpdA== 28649\nIExlYmFub24= 28650\nIE1PUg== 28651\nIG1vbmtleXM= 28652\nw6luZXI= 28653\n0ZbRlw== 28654\nIG1vdGhlcmY= 28655\nINmH2LDZhw== 28656\nIGZldQ== 28657\nw7xocmVu 28658\nIGh5Z2llbmU= 28659\nZW50ZWVu 28660\nRGVz 28661\nIGRpc3NpcA== 28662\nRXN0 28663\nIHNhaW50cw== 28664\nIHBvdGFzc2l1bQ== 28665\nIHJlY2tvbg== 28666\nQ2xpbnR1cw== 28667\nIG1hbmlmZXN0YXRpb24= 28668\nIEFwcHJv 28669\nIEluc3BlY3Q= 28670\nIHZlbnRpbGF0aW9u 28671\nIGhlbG0= 28672\nIGthcmE= 28673\n4Liy4LiZ 28674\nIGZhdm9yYWJsZQ== 28675\nIOyViuyVmA== 28676\nIEhpc3Bhbmlj 28677\n4Lic 28678\nINeU15s= 28679\nIHZhbGlkYXRl 28680\nIFJlc2lkZW50 28681\nIGNvbWVueg== 28682\nYmVpdGVy 28683\nZXJlcg== 28684\nIGRhZG8= 28685\nYXRjaGluZw== 28686\nbWV0cm9z 28687\nIEhpbg== 28688\nIER1bQ== 28689\nIGhhesSxcg== 28690\nIE5hdGFsaWU= 28691\nIGVuY3J5cHRpb24= 28692\n0L7Rh9C60LA= 28693\nbW1h 28694\naG91c2Vz 28695\nIGFuYWx5dGljYWw= 28696\nIERhbmc= 28697\nZmlyc3Q= 28698\nIEVuYw== 28699\nY2FuZG8= 28700\nIGx1ZHpp 28701\nd2FydA== 28702\nIHN0YXRpc3RpYw== 28703\nIOyCsA== 28704\nIGNvbW1lbnRpbmc= 28705\nIGNvb3JkaW5hdGVk 28706\nIEh5cGVy 28707\n5Zo= 28708\nIEJlcnQ= 28709\nIEhpcA== 28710\na2Vt 28711\nw7xuw7w= 28712\nIHphbA== 28713\nIO2VmOuKlOuNsA== 28714\nIFJvYm90 28715\ncmF3bg== 28716\nIHJoZXRvcmlj 28717\ndWxsYWg= 28718\nIERpZXQ= 28719\nIHRha2ljaA== 28720\nIHBvc3Nlc3NlZA== 28721\nk5zripQ= 28722\nIHdha2Vz 28723\nIFJhZg== 28724\nTWFydA== 28725\nIGVjYw== 28726\nIEZN 28727\nIGRpZmlj 28728\nIEFsbGV6 28729\nIGN1cmVk 28730\nIFF1YWQ= 28731\nIGJlbGU= 28732\nIGpvdXJuYWxz 28733\nIHRhZA== 28734\nIHNvY2lhbGVz 28735\nIHdoYXRz 28736\nIEJhc3M= 28737\nIGplc3RlbQ== 28738\nIFNhZGx5 28739\nIFNvdXJjZQ== 28740\nIMO8w6c= 28741\nYWx0dW5n 28742\naWVydGVu 28743\nIGp1bGxpZQ== 28744\naWZh 28745\nINCa0L7RgA== 28746\nIERvb3I= 28747\nINCd0LDQtA== 28748\nINC30LTQvtGA0L7Qsg== 28749\nIHJ1bW9y 28750\nIHBpZXM= 28751\nINC/0LXRgNC1 28752\nINC+0YLQsg== 28753\n0LXQvdC90YvQtQ== 28754\nSG9zdA== 28755\nIFNvcGhpZQ== 28756\nYW50ZW4= 28757\nQW55 28758\nIEF1Zmc= 28759\nIEhEUg== 28760\nIFJvY2tldA== 28761\ncmVzc28= 28762\nIHZlcmRl 28763\nIHByw6lzaWRlbnQ= 28764\nIGluZG9vcnM= 28765\nIHN0YWdnZXI= 28766\nIHN0YXRv 28767\nIERpYWw= 28768\nIGJ1enppbmc= 28769\nZW1lcg== 28770\nINCS0YHRkQ== 28771\nINC00LXRgNC10LI= 28772\nIHBvdXY= 28773\nIHN0cmFuZHM= 28774\nIOqyg+ydtA== 28775\nIFBhcmw= 28776\n0L7QutC+0Lk= 28777\nIHNpcA== 28778\nICgq 28779\nw6RuZ3Q= 28780\nIGRlYmVy 28781\nIEFpbg== 28782\nIGRyYXN0aWNhbGx5 28783\nIFNsb3dseQ== 28784\nIEJyaWc= 28785\nIFRvcmFo 28786\nIGFjaGU= 28787\nID8/Pw== 28788\nIERvYg== 28789\na2FubnQ= 28790\nTWFyeQ== 28791\nIHN0YW0= 28792\nIERlbW9u 28793\ncGxh 28794\nIEZyZXVuZA== 28795\nIEJlbm4= 28796\nIGhpZ2hz 28797\nINqp2LE= 28798\nIFByZXBhcmU= 28799\nIHByb3h5 28800\nIGNhbXBv 28801\nIEF1Z2Vu 28802\no6jr 28803\nIENobG9l 28804\naWN1bGFybHk= 28805\neW91bmc= 28806\nqZTr 28807\nIHNjcmF0Y2hpbmc= 28808\nIGdsYWM= 28809\nIGdlbWVpbnNhbQ== 28810\nYW5hbA== 28811\nYWNha3PEsW4= 28812\nIEZvcnVt 28813\nZW5uaWFs 28814\nIFJlc291cmNlcw== 28815\nIG1laXN0ZW4= 28816\nIEZlbGw= 28817\nIHVuYW5pbQ== 28818\nIFRC 28819\nIFNlbGJzdA== 28820\n5oY= 28821\nIGludGltaWRhdGluZw== 28822\nIEdlZsO8aGw= 28823\nIOy9lOuhnA== 28824\naWRvcg== 28825\naWNpb25lcw== 28826\nYXJzYQ== 28827\nXS4u 28828\nYXpv 28829\nIGtlbmRp 28830\nIFRhZ2U= 28831\ndGVybWlu 28832\nIFByb3plbnQ= 28833\nTWF5YmU= 28834\nbMOp 28835\nIHF1ZXN0aQ== 28836\nIG1lbWVz 28837\nIGNvcnJl 28838\nIFZJUA== 28839\nIEdhbGxlcnk= 28840\nIHVyZ2VuY3k= 28841\nIG5vY2hl 28842\nIGtpbmRseQ== 28843\nIE1lcmVkaXRo 28844\nIHbhuq15 28845\nINin2YTYqA== 28846\nIEVzdGFkbw== 28847\nenVn 28848\nb3F1ZQ== 28849\nIG9iZXNpdHk= 28850\nT2Zm 28851\nIEV1cm9wZWFucw== 28852\nw7Zk 28853\n7Lm06w== 28854\nIGhvb3A= 28855\nIGVuam95cw== 28856\nIENoaXA= 28857\ncGF0aWVudA== 28858\nIG1pY3Jvc2NvcGU= 28859\nIGxlZ2l0aW0= 28860\nINGP0LLQu9GP0LXRgtGB0Y8= 28861\nz4POuQ== 28862\nYXJnZW50 28863\nIHNoYW0= 28864\nIGxpY2Vuc2luZw== 28865\nb2xpYQ== 28866\nU29ycnk= 28867\ncmFtYQ== 28868\nIGFjY2VsZXJhdGVk 28869\nIHd5bQ== 28870\nIGZhaXJuZXNz 28871\nIFJlYWRpbmc= 28872\nIHNsYWNr 28873\nIERvaw== 28874\nemnEmWt1asSZ 28875\nIHJ1YmJpbmc= 28876\n0LDRgtGD 28877\nIGFsbG9jYXRlZA== 28878\nanVuZw== 28879\nIHBhaW5z 28880\nIHdpbmRpbmc= 28881\nIGdlbGl5b3I= 28882\nIENV 28883\nbW90 28884\nY29jaw== 28885\nIFBvc2l0aW9u 28886\nYnJvcw== 28887\nIGxpdmVzdHJlYW0= 28888\nIEJyYWlu 28889\n7LCp 28890\nIHByemVr 28891\nIEVp 28892\nIENvY28= 28893\n0LHQsA== 28894\nIHNob3ZlbA== 28895\nZWE= 28896\nIGNob2NvbA== 28897\nIHJlYmVsbGlvbg== 28898\nIHNob3dj 28899\nIEhhbG8= 28900\nIGRpdmlkZW5k 28901\nbWlzc2lvbg== 28902\nIHVzYW5kbw== 28903\nIFsi 28904\nIGZhbGVp 28905\nQmxhY2s= 28906\nIFN1cmVseQ== 28907\nIMW7 28908\nIHBoaWxvc29waGVy 28909\nIG92ZXJoZQ== 28910\nIEJvcm4= 28911\nIG9iamV0aXZv 28912\nIDEyOA== 28913\nc2NoZWlk 28914\nIE5hemlz 28915\nIHNvbGNoZQ== 28916\nbGlmdA== 28917\nY2VkZQ== 28918\nYWRvcnM= 28919\nIG1hcnNobQ== 28920\nIExPUkQ= 28921\nlOydtO2BrA== 28922\nIG93bmluZw== 28923\nQ29udA== 28924\nIGxhbmRzY2FwZXM= 28925\nIGxlbmRpbmc= 28926\nIEF1dGhvcml0eQ== 28927\n0L7QstC+0Lk= 28928\nb3F1 28929\nIFNlcw== 28930\nIEZlcnJhcmk= 28931\nIHJlc3BvbnNhYmls 28932\nIHbDoXJpb3M= 28933\nIGRlbGlj 28934\nIGVtYmFyaw== 28935\nIGVtYnJvaWRlcg== 28936\nIGZyYW1ld29ya3M= 28937\nIHNpbW1lcg== 28938\nIG5hY2lvbmFs 28939\nIHJlbWFpbmRlcg== 28940\nIFZpZWxsZWljaHQ= 28941\nIHF1aWVyZXM= 28942\n7JeU 28943\nIHRlc3Rvc3Rlcg== 28944\naWhlbg== 28945\nIE96 28946\nw6hsZQ== 28947\nIHBvcnRyYXllZA== 28948\nzrrOtQ== 28949\nIFBvbGl0aWs= 28950\nIGFwZXJ0dXJl 28951\nIGJsYW5k 28952\naW5kdXN0 28953\nINC+0LHRgNCw0YI= 28954\nIFRob3Vz 28955\nQmF5 28956\nIGRhbmRv 28957\nIHNoZXI= 28958\nIGFkbWlzc2lvbnM= 28959\nIENyZXc= 28960\nINGW0L0= 28961\nU0lOR0lORw== 28962\nIG91bmNl 28963\nIGl5 28964\nIGJhc2ls 28965\nIG92ZXJ0aW1l 28966\nIHRocmVhdGVu 28967\nIHBhcnRuZXJlZA== 28968\nIENhbm4= 28969\nYXZhbmE= 28970\nINC30L3QsNC10YLQtQ== 28971\nINC+0YLRgQ== 28972\nIFR1ZG8= 28973\n7L2U 28974\nIOuGgOs= 28975\nZmVs 28976\nIHJlYXJy 28977\nIGlud2FyZA== 28978\nIFJvZ2Vycw== 28979\n4LmD4Lir 28980\nIHR3ZWFr 28981\nIGRyeWVy 28982\nY2Vzc2lvbg== 28983\nIHJpZ29yb3Vz 28984\nIERhYXI= 28985\nb21pY3M= 28986\nIGZhdHM= 28987\ndmFk 28988\nIHppcHBlcg== 28989\nYWNjZXB0YWJsZQ== 28990\nIGRlbW9uc3RyYXRpbmc= 28991\nIFl1bQ== 28992\nIGJlYXU= 28993\nIHJvc3Rlcg== 28994\nIHByZWRvbWluYW50bHk= 28995\n0LXRgNGD 28996\nbmluZ2Fy 28997\nIHRyaWFuZ2xlcw== 28998\nIHRleHRpbmc= 28999\nIGJlcnJpZXM= 29000\nIOyCrOynhA== 29001\nYWRkZXI= 29002\nIGZhaXRlcw== 29003\nIEltYWdl 29004\nbGVyZQ== 29005\nIGJvdW5kcw== 29006\nIExhdXI= 29007\nIOyVhOustOs= 29008\nIG1pbw== 29009\nIHVzYQ== 29010\nINiw 29011\nIHRvZW4= 29012\nIEphbmc= 29013\nxb5l 29014\nY2hvZA== 29015\nYW5hbg== 29016\nINC+0LHRgNCw0LfQvtC8 29017\nIHBlcnNldmVy 29018\nIFN3ZQ== 29019\nIGF1Z21lbnQ= 29020\ndWdnbGluZw== 29021\nacOocmVtZW50 29022\naXN0bGVz 29023\nYWNqxJk= 29024\nOTE= 29025\nIG1haA== 29026\nIEtJUg== 29027\nRGll 29028\nIGRvd25oaWxs 29029\nIDE5Njg= 29030\n0L7RgNC+0YjQvg== 29031\nb2dyYXBoaWNz 29032\nIHTDpHNzw6Q= 29033\n6rKg7KOg 29034\nINC70LjRhw== 29035\nQVVESU8= 29036\nINC/0LvQvtGF 29037\nIHByb3Bvc2luZw== 29038\nIHRlbXB0ZWQ= 29039\nIGNvbnZlcnRpbmc= 29040\nIExlaHI= 29041\nIHBlcnNvbmU= 29042\nIEZlZWxpbmc= 29043\n7Ja07KO8 29044\nb21icmVz 29045\nINec15k= 29046\nIGd1cnU= 29047\nIGRlbWVudA== 29048\n0L3QuNC3 29049\n0LjRgtC10LvQtdC5 29050\nIGNvbXBhw7E= 29051\nIHJlZG8= 29052\nIGNvbmR1Y3Rvcg== 29053\nbWlh 29054\nIGlkb2xz 29055\nIE11bA== 29056\nIGluZXg= 29057\nIHTDpG3DpA== 29058\nIGltcGFjdGluZw== 29059\nIGRheWxpZ2h0 29060\nZ2ls 29061\nIGhlbGZlbg== 29062\nIGVudHNwcmVjaA== 29063\nIHdpxJlrcw== 29064\nIHNjcmlwdHVyZXM= 29065\nIGRpc21pc3NlZA== 29066\nIFBvZGNhc3Q= 29067\n2YXYsQ== 29068\nIGFubnVhbGx5 29069\nIHVzYWJsZQ== 29070\nIGxpYnJl 29071\n0L7Qt9C8 29072\nIHJ1YmJpc2g= 29073\nIGNvbnRpbnVhcg== 29074\nIGh1bWlsaQ== 29075\nIHNwZWVjaGVz 29076\n0YDQsNGH 29077\nYmFyZA== 29078\nNzE= 29079\nPjw= 29080\nb2xvZ8OtYQ== 29081\nd2VhbHRo 29082\nIG1lZGl0YXRl 29083\nk6TsnZg= 29084\nIENyYWZ0 29085\ncml2 29086\nIEFnYWluc3Q= 29087\nIGNlcmFtaWM= 29088\nZXNww6hyZQ== 29089\nIGNvbXBldGVudA== 29090\nIEhvcGtpbnM= 29091\nIGtpbG9z 29092\nIGdyYXZlbA== 29093\nIHBpc3Rvbg== 29094\nIGZyaWVuZHNoaXBz 29095\nIGVzY3Jl 29096\nIHZveg== 29097\nIEdlc2VsbHNjaGFmdA== 29098\nIHVudGVyc3TDvHQ= 29099\nIG11ag== 29100\nIHdhcm5pbmdz 29101\ncG9z 29102\nIFByb2Zlc3Npb25hbA== 29103\nd3N6eQ== 29104\nb2RsZQ== 29105\nYmFuZHM= 29106\nIHRlYW13b3Jr 29107\nc3RlbGx1bmc= 29108\nIGR4 29109\nIGF0dG9ybmV5cw== 29110\nIHdlaXRlcmU= 29111\n44WL44WL44WL 29112\nIE9yaWdpbmFs 29113\n15nXlw== 29114\nIGJyb2FkY2FzdGluZw== 29115\nINC/0LXRgNCy0YvQuQ== 29116\ndWNoaQ== 29117\nIGhldXJl 29118\nIGdyYWJz 29119\nIFdPUg== 29120\nIFBsYWlk 29121\nTWlu 29122\nIHBheg== 29123\nIFB1aXM= 29124\ndW11 29125\naXRhdGVz 29126\nIGNvYXRz 29127\nIGJ1ZW4= 29128\nIGhlaXI= 29129\nIHBuZXVt 29130\n16nXqA== 29131\nZW5zZXI= 29132\nIEpVREdF 29133\nIGJsb25kZQ== 29134\n4bmb 29135\nIGdhaw== 29136\nIHPEsWs= 29137\nIHF1b3RlZA== 29138\nIGVxdWlwbw== 29139\nIHdpc2hpbmc= 29140\nw61jaWE= 29141\nIHZlcmJz 29142\nIENhbmFkaWFucw== 29143\nIGdvdmVybmluZw== 29144\nIEV2YW5z 29145\nRXVybw== 29146\nIGdlbnJlcw== 29147\nIHVudGVyc2NoaWVk 29148\nIEJlY2t5 29149\ns7zqsozsmpQ= 29150\nIGVpbmdl 29151\nIFJhaXNl 29152\nb2xhbmQ= 29153\nIFN0cmF0ZWc= 29154\nIGVyZXM= 29155\nIFZldGVyYW5z 29156\nIGJyZWFrb3V0 29157\nIHNhbnTDqQ== 29158\nIGFkZWw= 29159\nIGludmVzdGlnYXRlZA== 29160\nIHBldXI= 29161\nIGFnaWxl 29162\nIHJhaWxyb2Fk 29163\nYW5za2E= 29164\nINC10Lk= 29165\nIGV4cG9z 29166\nYXRvcmllcw== 29167\nIENvbnRlbnQ= 29168\nIHRydXRocw== 29169\nIFRyYWls 29170\nIGd1YQ== 29171\nIHBvcmVz 29172\nIHdyaXRpbmdz 29173\nIFVocg== 29174\nIFRoYXRz 29175\nIGljaW5n 29176\nT0M= 29177\nIFByb2R1Y3Rpb24= 29178\nIGNhcm5l 29179\nSVNT 29180\nIG5pbmd1w6lt 29181\nbm9u 29182\nIHZpY2lvdXM= 29183\n15XXlA== 29184\nIHJlY29ubmVjdA== 29185\nIGNlbnRyZXM= 29186\nIEtlbQ== 29187\nIGNyZWFzZQ== 29188\nIOydtOuvuA== 29189\n0LDQudGC0LXRgdGM 29190\nINCx0L7RgA== 29191\nIEhhecSxcg== 29192\nINGB0YPQtA== 29193\nIMO6bmljYQ== 29194\nb3dhxYI= 29195\nIGFkaGVy 29196\naHVh 29197\nWlo= 29198\nIHByZWNpc28= 29199\nIGN1cnJlbnRz 29200\nIHNlYXNvbmVk 29201\nIElvVA== 29202\nIEJpc2hvcA== 29203\nc3RlZA== 29204\nIEJlcm5hcmQ= 29205\n7KSY 29206\nIEdsZW5u 29207\nIGt0w7NyeW0= 29208\n4Li34LmI 29209\nIGFzdHJvbG9n 29210\nIEtvdA== 29211\nIHBhcmZvaXM= 29212\nIGZvcndhcmRz 29213\nIFdpxJk= 29214\nIM6Y 29215\nIG5hbm8= 29216\nc3Vi 29217\nIEJyaWxs 29218\nIGdyaXQ= 29219\nIGNpdGVk 29220\nZ2Fkbw== 29221\nIG1lbHRz 29222\nIGZvcmPDqQ== 29223\n4paI4paI 29224\nIGJham8= 29225\nIGRpc2NyZXRpb24= 29226\nsLA= 29227\nYXRpdml0eQ== 29228\nIHNpdHVhdGVk 29229\n0YnQtdC1 29230\nINC/0YDQuNC90YbQuNC/ 29231\nYW1heg== 29232\nIGFxdWFyaXVt 29233\nIGRpc3NvbHZl 29234\nIEdvZHM= 29235\nU3VwZXI= 29236\nIGFtaWQ= 29237\nems= 29238\nYW1wZg== 29239\nIGhlbGE= 29240\nJyE= 29241\nIGRldmVsb3BtZW50YWw= 29242\nIERpc2U= 29243\nINGA0LDQsdC+0YLQsNC10YI= 29244\nIHNuYXBzaG90 29245\n1bg= 29246\nIFl1ZQ== 29247\nIEh1bGs= 29248\nIERvb20= 29249\nIEZlbGl4 29250\nIHLDqWY= 29251\nTWFsZQ== 29252\ncGhhbnRz 29253\nRU5T 29254\nIE1lY2hhbg== 29255\nIEdvbGY= 29256\nIGdlbmVyb3NpdHk= 29257\nw6R0emU= 29258\nIHVubG9ja2Vk 29259\n7YOB 29260\nb2NhbHlwc2U= 29261\nQWxyaWdodA== 29262\nIOqwnOs= 29263\nINeQ15HXnA== 29264\nIEtlZXBpbmc= 29265\nIGNvbGxhYm9yYXRpbmc= 29266\nY2hpZWY= 29267\nIEZlcm5hbmRv 29268\nIGNoZWZz 29269\nIO2UvOu2gA== 29270\nIHNraXBwZWQ= 29271\nIHBlcnNvbm4= 29272\nIGF4ZQ== 29273\nY2hleg== 29274\nIGV4dHJhY3Rpb24= 29275\nIEFW 29276\nIEdpYmJz 29277\nIO2c 29278\nIHPEsQ== 29279\nSUFN 29280\nVmlldw== 29281\nIEdSQU5U 29282\nIOuquA== 29283\nIHZlcmlmaWNhdGlvbg== 29284\nIGRlcGljdGVk 29285\nIE1veg== 29286\nb3V4 29287\nIHR1bA== 29288\nIHNjYW5uZXI= 29289\nIGNvbWVkaWFu 29290\nIFZvbGtz 29291\nIEpFRkY= 29292\np4Q= 29293\nIGRpc3RyYWN0aW9u 29294\ncsOh 29295\nIElOVEVS 29296\nIHNpbmNlcg== 29297\nINee16o= 29298\nINep16A= 29299\nIGNvbnN0cnVjdGl2ZQ== 29300\nYXJm 29301\nIOuIhOs= 29302\nIGVjbw== 29303\ncmFtb3M= 29304\nIHJlbmV3ZWQ= 29305\naW5lbWVudA== 29306\nIFVi 29307\nIFBlcHBlcg== 29308\n7KeA6rCA 29309\nIERhcndpbg== 29310\nIG1lcmNoYW5k 29311\nIHbDoXJpYXM= 29312\nw6hjZQ== 29313\nTkc= 29314\nIOychO2VtOyEnA== 29315\nINCw0LrRgtC40LI= 29316\nIFVudGVycw== 29317\n2LnZhA== 29318\nIGludHJpYw== 29319\nb21tYQ== 29320\naWV2aW5n 29321\nIENhcm9saW5l 29322\nIFBSRVM= 29323\nIHBlcmZvcm1lcg== 29324\nIGF1dG91cg== 29325\nIHV0dGVybHk= 29326\nIHN5bnRoZXNpcw== 29327\nIGxlc2JpYW4= 29328\nIHJldHJpZXZl 29329\nIG1hbmVpcmE= 29330\nIGltcGFpcg== 29331\nIG1lbnRvcmluZw== 29332\nIFNvdWxz 29333\nIEdvUHJv 29334\n0YDQsNGC0Yw= 29335\nIGNvc2U= 29336\nIFNTRA== 29337\nSVJF 29338\nIHVwZnJvbnQ= 29339\nIEF1bg== 29340\nIGdhbWVy 29341\nIGxpdHQ= 29342\nIGFnZ3Jlc3Npb24= 29343\nIExpa2V3aXNl 29344\nIEJldHR5 29345\nIERhcnQ= 29346\nIERMQw== 29347\naXNobWVudA== 29348\n7J6l7J2E 29349\nY3JlYW0= 29350\nIEJhYnlsb24= 29351\nIG51Zw== 29352\nYnJhcg== 29353\nIGF5bsSx 29354\nYW1pbHk= 29355\nYmlrZQ== 29356\nYWhhaGFoYQ== 29357\nbG95ZA== 29358\nIG1pcmE= 29359\nIHBlcm1l 29360\nIEdhbWluZw== 29361\nIGZpcm13YXJl 29362\nTWE= 29363\nIGFzc2lzdGVk 29364\nYXRpY3M= 29365\nIOyVnuycvOuhnA== 29366\nIE1lbnRhbA== 29367\nbmllanM= 29368\nIEl6 29369\nb3fEhQ== 29370\nIHRvdWdoZXI= 29371\nIGRlZWQ= 29372\nIHN0eWxpc2g= 29373\nIFRvb2xz 29374\nIEhhbXA= 29375\nIHN1bnNjcmVlbg== 29376\nIGFydGljdWxhdGU= 29377\naXll 29378\n0LjRhA== 29379\nIFNwcmVhZA== 29380\nIEhBVkU= 29381\nIHN3aXJs 29382\nIHNwb25zb3Jpbmc= 29383\naW92YXNjdWxhcg== 29384\nbWVzaQ== 29385\nIHJlbGF4YXRpb24= 29386\nINGB0LLQvtC40YU= 29387\nIG1hcmdpbnM= 29388\nIHNhxJ8= 29389\nIFByaWRl 29390\nIM+Ezr/Phc+C 29391\n0LjRhtC4 29392\nZW5jaQ== 29393\nRG9lcw== 29394\nIGNvcnBzZQ== 29395\nIGVuZHVyYW5jZQ== 29396\nIO2emA== 29397\n7Lm0 29398\nIGhhaXJjdXQ= 29399\nIGludGVycnVwdGVk 29400\nIHdpbmR5 29401\nIENhbGVi 29402\nz4HPhw== 29403\nIFBvdXJxdW9p 29404\nIGhvbGlzdGlj 29405\ndWNsZWFy 29406\nIFdob2xl 29407\nQWN0 29408\nIGdhbGxvbg== 29409\nY2FkZQ== 29410\nIFJlZ2lvbmFs 29411\ncm9hZHM= 29412\nIFNjaG5l 29413\nw6FuZw== 29414\nINC40LfQvNC10L0= 29415\nIG1lbnVz 29416\nIHNwbGl0dGluZw== 29417\nIHByaWNlZA== 29418\nIM6T 29419\nIHVzZXJuYW1l 29420\nINCe0Yc= 29421\nIGNvbXByZXNzZWQ= 29422\neWlu 29423\nIGd1YXJkaWFu 29424\nIGdvb2Y= 29425\nIGNoZWNrbGlzdA== 29426\nIGludGVyY2hhbmdl 29427\nIGV4cGVkaXRpb24= 29428\nIGV4dGVybg== 29429\nIGluZnJhcmVk 29430\nZW5nbw== 29431\nIGRlbnlpbmc= 29432\nIHBhY2tldHM= 29433\nb25lbnQ= 29434\nQkI= 29435\nIEluY3Jl 29436\nIHNpbmk= 29437\nw59lcg== 29438\nw6hn 29439\nbWFhbA== 29440\nZ2VuZXJhdGlvbg== 29441\nIG1pbm9yaXRpZXM= 29442\nIGxsZXZhcg== 29443\nIG5vbWluYXRpb24= 29444\nIGNvbnNpZA== 29445\nINec16I= 29446\nbXXFnw== 29447\nIEVzYw== 29448\nIG51bWVyYXRvcg== 29449\nIGthaWs= 29450\nIGt0w7NyeWNo 29451\naWVzZW4= 29452\nIHbDqg== 29453\nIFVTUw== 29454\nIFByaXZhdGU= 29455\nINC+0LTQvdC+ 29456\nIGFsw6lt 29457\nw610dWxv 29458\nIGxpbWI= 29459\nIGZvcmdpdmVu 29460\nIGRpc2Nsb3N1cmU= 29461\nz4TOrw== 29462\nIG5pbmfDum4= 29463\nIHRoZXJhcGV1dGlj 29464\nIG5lZ290aWF0aW5n 29465\nIE5pa2U= 29466\nZW5zZWZ1bA== 29467\nIGluY2Fw 29468\nIGZsYWdzaGlw 29469\ndG93bg== 29470\n4og= 29471\nIM+Azr/Ouw== 29472\nIHdvbHZlcw== 29473\nIHZpb2xhdGlvbnM= 29474\nIEFybm9sZA== 29475\nIGludGVydmVuZQ== 29476\nIGhlYXRlcg== 29477\nIHJlY3Vyc29z 29478\nIG1haWQ= 29479\n6rK8 29480\nINC00LDQstCw0LnRgtC1 29481\nIENlbGVicg== 29482\nIGNhcGU= 29483\nIFN0eQ== 29484\nYWluZW4= 29485\nc2l0ZQ== 29486\nYmlq 29487\nINC/0L7Qu9GM0Lc= 29488\nIGZyYW1lZA== 29489\nIHB1Ymxpc2hlcnM= 29490\nINGH0YPRgtGM 29491\nIHRlbXB0YXRpb24= 29492\nIGNlcnRlemE= 29493\nIGV4ZW1wdA== 29494\n7Iq5 29495\nc2VsbGluZw== 29496\nIFRhc2s= 29497\naG9vbg== 29498\nIENvYw== 29499\nIFBhcmtz 29500\nIHJlcGV0aXRpb24= 29501\nINGC0YPQtNCw 29502\nIGVuc2w= 29503\nIGRlxJ9pxZ8= 29504\nIE9ybGFuZG8= 29505\nIE1haW50ZW4= 29506\nb2N1bWVudA== 29507\nIEhD 29508\nIHNjb290ZXI= 29509\nINC90LDQv9C40YE= 29510\nIHRpZ2h0ZXI= 29511\nIHRlYXNl 29512\nIHJlbW92ZXM= 29513\nIGtpamtlbg== 29514\nINGB0YPRidC10YHRgtCy 29515\nIHRow6k= 29516\nINCy0YvQs9C70Y/QtA== 29517\nIHJlbGlldmU= 29518\nIG1pdMOk 29519\nIHN0YXRpb25hcnk= 29520\nw7ZmZg== 29521\ncGFibGU= 29522\nIGFydGVy 29523\nIGTDqWY= 29524\ncmF0aXZl 29525\nIGNvbmVjdA== 29526\nIHNhZGRsZQ== 29527\nIERpYW5l 29528\nIGNvbW1lbW9y 29529\nZmVuZGlt 29530\nU8Ot 29531\nIO2BtOs= 29532\nIG1hbmdl 29533\nYXR0ZQ== 29534\nIGFycm9nYW50 29535\nIHJvYm90aWM= 29536\nIGdpw6A= 29537\nIG5laWdoYm91cmhvb2Q= 29538\naXNzb24= 29539\nINC00LLQuNC2 29540\nIFJJ 29541\nIE5vcm1hbg== 29542\nYnJhbmQ= 29543\nYW1hdGlvbg== 29544\nIHJhem9y 29545\nIG11cmRlcnM= 29546\nINGC0YM= 29547\nIHdzenlzdGtpbQ== 29548\nIHV0aWxpdGllcw== 29549\nIG1pY3Jvc2NvcA== 29550\n6r8= 29551\nIGRhcXVp 29552\nb2xsYXI= 29553\nINCU0LDQstCw0LnRgtC1 29554\nIGFubsOpZQ== 29555\nIGtpbG9tZXRyZXM= 29556\nIGhvbW9zZXh1YWw= 29557\nIGFyY2hpdGVjdHM= 29558\nIG5peWU= 29559\nTEVS 29560\nIG1pY3JvcGhvbmVz 29561\nIFN0dW5kZW4= 29562\nIGNvbnNlY3V0aXZl 29563\naWVuZGE= 29564\ndsOkbmQ= 29565\nREVS 29566\nIGxpZnRz 29567\nIE1lYXQ= 29568\nIHNhdmV6 29569\n7ZaI642Y 29570\nTWVu 29571\nIGRpc21hbnQ= 29572\n6rGw66W8 29573\nIGluc3VsYXRpb24= 29574\nIHNjYWxs 29575\nIHNwb29reQ== 29576\nIHBhcmM= 29577\nIGJhbGxldA== 29578\nIFdoYXRzQXBw 29579\nIGZyYW5j 29580\nIGRlbGliZXJhdGU= 29581\nIO2FjA== 29582\nIG1hcnM= 29583\nIFp1cg== 29584\nUHI= 29585\nZGlzY2lwbGluYXJ5 29586\nIG9ic2Vzc2lvbg== 29587\n0LzQtQ== 29588\nIG1hcmNoaW5n 29589\nIEVtZXJnZW5jeQ== 29590\naWd1b3Vz 29591\nIHN6eQ== 29592\nIExhbmRz 29593\nIGJvYXJkaW5n 29594\nINC/0L7Rh9GC0Lg= 29595\nIGVudnk= 29596\nIGNvbXBhc3Npb25hdGU= 29597\nIG1lcmNp 29598\nIGRlc2lyYWJsZQ== 29599\nZGFsZQ== 29600\nIGNhbsSxbQ== 29601\nIEFudGFy 29602\ndGVtcHM= 29603\nIGNvbmZpZ3VyZWQ= 29604\nIENvbXBhcmVk 29605\nbmVo 29606\naWNhdGluZw== 29607\nIG5pY2tlbA== 29608\n2YjZgg== 29609\n2YPZiNmG 29610\nb3Blcw== 29611\nIGZvcm11bGFz 29612\nINCV0YHRgtGM 29613\nIHBvYmw= 29614\nIFBK 29615\nIEx1ZA== 29616\nIEJyaWQ= 29617\nIEhvZw== 29618\nIEJyaXM= 29619\nSmVu 29620\nIHNoYWRpbmc= 29621\nIFlhcw== 29622\nIGRpc3R1cmJlZA== 29623\nIHJlY29tbWVuZGluZw== 29624\nIGPDqQ== 29625\nIEhPVw== 29626\n7JeI7Ja0 29627\nIHJldmVyc2Vk 29628\nIEludGVyZXN0aW5nbHk= 29629\naW94aWQ= 29630\nIOyYpOy8gOydtA== 29631\n4bq/dQ== 29632\neHg= 29633\nIG91YWlz 29634\nIFlvdVR1YmVycw== 29635\nIFJvc2E= 29636\nIEhhdXB0 29637\namFkaQ== 29638\nIHZsb2dz 29639\nIGN1bHR1cmE= 29640\nIExlYWRlcnNoaXA= 29641\nIEhlcA== 29642\nIGlsbHVt 29643\ntOuPmQ== 29644\nIGN1c3RvbWl6ZWQ= 29645\nIG1hcmNh 29646\nIHF1YXRybw== 29647\nINC90LDQsw== 29648\nIFNwYWNlWA== 29649\nIEVpZ2Vu 29650\nYXN0aW5n 29651\nIG9sZHXEn3U= 29652\nIGZvcnRz 29653\ncmltZW50 29654\naWVuY2lh 29655\nIHRlbmly 29656\ncm9mZmVu 29657\nIDE5Nzk= 29658\nIGNpZQ== 29659\nIOuQmOqzoA== 29660\nIGVzY3Jp 29661\nz4zPgg== 29662\n7Y+s 29663\ndXp6eQ== 29664\nQ29uZw== 29665\n7J247J20 29666\nR3JlYXQ= 29667\nc2ls 29668\nw6ljaA== 29669\nIG11bHRpYw== 29670\nIERpc2s= 29671\nspU= 29672\nIGZhemxh 29673\nIGxldmFudA== 29674\nIGFiYWpv 29675\ndXJyeQ== 29676\nc3RydQ== 29677\nIOuoueuKlA== 29678\nIGFjY2Vzc29yeQ== 29679\nINC00LLQuNCz 29680\nIFJpZA== 29681\nMjAxOQ== 29682\nIGRvd25zdHJlYW0= 29683\nIGtheg== 29684\ndXRhbg== 29685\nIGNoYXJjb2Fs 29686\nIGFmZWN0 29687\nd3U= 29688\nIGNvbnRleHRz 29689\nIGZlYXJlZA== 29690\nIOyEpA== 29691\nIGhpc3Rvcmllcw== 29692\nIGZhcw== 29693\nZW5zaWJsZQ== 29694\nIGNvY29h 29695\naWxsYXI= 29696\nZ2VvbnM= 29697\nIHNwaXJpdHVhbGl0eQ== 29698\nIFBldw== 29699\nIHBoYXJtYWN5 29700\nIHBhc3Npb25z 29701\nIGJvcw== 29702\nIGFsbMOh 29703\nIHRocml2aW5n 29704\nIFJlYWN0 29705\nIG9jY3VweQ== 29706\nIHdpdGhkcmF3YWw= 29707\nIGFsbG93YW5jZQ== 29708\nIEZyYWt0aW9u 29709\nIGJ1ZGRpZXM= 29710\nIGlkbGU= 29711\nIGRpc3NvbHZlZA== 29712\nIHByZXZhbGVudA== 29713\nIG1pbGl0YXI= 29714\nIHNlbnNpbmc= 29715\nIHBvamF3 29716\nIGFuY29yYQ== 29717\nIGFidW5kYW50 29718\nIGhhaXJzdA== 29719\nIHR3ZWU= 29720\nIG7DpGNoc3Rl 29721\nIE3DtmdsaWNoa2VpdA== 29722\nIGhvbw== 29723\ndWZmaWNpZW50 29724\nIGZhbnRhc3Q= 29725\nIGVkaWJsZQ== 29726\nIOuWqOyWtOw= 29727\n7JuD 29728\nIHZlaW4= 29729\ndWNjaQ== 29730\nIGRldm90aW9u 29731\nIGNvbmNlYWxlcg== 29732\naW5jb21l 29733\nIHJlY3ljbGVk 29734\nIOyKpO2DgA== 29735\nIHBvbnRvcw== 29736\nIGRlc3N1cw== 29737\nIHbDqXJpdA== 29738\nIHJlZmxlY3Rpb25z 29739\nIEFB 29740\nIHRha2Vhd2F5 29741\nYmFyZQ== 29742\nIENvbnRhY3Q= 29743\nZWls 29744\nIEhlYXI= 29745\nIG1pcmFj 29746\nIEdlcmlsaW0= 29747\nINGB0LDQvNGL0Lk= 29748\nIHZpdm8= 29749\nIGtpbG9ncmFtcw== 29750\nIENyaW0= 29751\nw7t0 29752\nNzg= 29753\nIHNpbmNlcmVseQ== 29754\ncmF6 29755\nIOuztQ== 29756\nIGFycml2 29757\nIGNvbmNlcHRpb24= 29758\nIFBlcnNpYW4= 29759\nIHNqw6Rs 29760\nIHN0YXJyaW5n 29761\nIOyVhOustA== 29762\nIEZvcmV2ZXI= 29763\n0LXRgdGC0Yw= 29764\nIHZlaWw= 29765\nIHN1YnRpdA== 29766\nb2RrYQ== 29767\nINC+0YLQvdC+0Yg= 29768\nIGNvb2tz 29769\n0LXQvdGP 29770\nS2F5 29771\nIG5pw7Fvcw== 29772\nIFBob25l 29773\nIHN0aXRjaGluZw== 29774\nIGZpbmdlcnByaW50 29775\nzrvOrA== 29776\nIGRlZGljYXRl 29777\nIExvYg== 29778\nIGJsYWNrcw== 29779\nIEJsZQ== 29780\nYm91dA== 29781\nIMSRYW5n 29782\nIGVrcw== 29783\nIHNxdWFzaA== 29784\nIEvDvA== 29785\nb2Rp 29786\nIG7GsOG7m2M= 29787\nIHZveWFnZQ== 29788\nIHBsYXlmdWw= 29789\nINil2YTZiQ== 29790\nYW5pYw== 29791\nIGNvbmRlbW4= 29792\nIELDtnlsZQ== 29793\nIFBvbGl6ZQ== 29794\nIGF5dWRh 29795\nIHBhbQ== 29796\n4LmE4Lib 29797\nIEthdGh5 29798\n0LXQtNC40L0= 29799\n0L3QvtCy0LA= 29800\nIGJyaWc= 29801\nZWdlcg== 29802\nIGVhZ2xl 29803\nIHZpc2lvbnM= 29804\nIO2VreyDgQ== 29805\nIHNoaXR0eQ== 29806\nIGhvdHQ= 29807\nIEJyaXR0 29808\ndXRvcnM= 29809\nRU5URQ== 29810\nIHBob24= 29811\nIEJpbmc= 29812\nINC/0L7QtNC00LXRgNC2 29813\nc3ByaW5n 29814\nZXR0ZW4= 29815\nIHBpbGdy 29816\nIGVkaXlvcg== 29817\n0LXQvdGC0Ys= 29818\nYWdnaW8= 29819\nIGp1bA== 29820\nIGNvbXByZW5k 29821\ndGVpbA== 29822\nINiy 29823\nIHBlcmZvcm1lcnM= 29824\nIGluZmFtb3Vz 29825\nIE1L 29826\n56o= 29827\nb3RsZQ== 29828\nZWZm 29829\nIEhhc2g= 29830\nIGNvd2FyZA== 29831\nIEJSQQ== 29832\nIERE 29833\nIGNvbWlkYQ== 29834\nIHBsYXRh 29835\nIGZsYXA= 29836\nIE1laHI= 29837\ncmlidXRpb24= 29838\nIFllbWVu 29839\nIG15c3Rlcmllcw== 29840\nIMSweWk= 29841\nIHN0ZWxs 29842\nIGV5ZWxpbmVy 29843\nIGRlbGVz 29844\nIG5haWxlZA== 29845\nIGlsbG5lc3Nlcw== 29846\nIHN0YWNrcw== 29847\nIHRyYWJhamFy 29848\nZmxvd2Vy 29849\nY2l1 29850\nIGNydWRl 29851\nIHN1YnN0YW50aWFsbHk= 29852\nIGhvbWVt 29853\nIG5lcGhldw== 29854\nIHN0YW1wcw== 29855\nIGNhcmJz 29856\n0YzRgtC1 29857\nbW9vdGg= 29858\nIHR1bm5lbHM= 29859\nYWNpZQ== 29860\nIFNlw7E= 29861\nIEhlcmE= 29862\nIOyVhOuLiOyXkOyalA== 29863\nIFd5b21pbmc= 29864\nIEhETUk= 29865\nIExpcw== 29866\ndWNpw7Nu 29867\nIHN0ZWVy 29868\n0L7Rjg== 29869\n0LjRgtCw 29870\nTlQ= 29871\nIOyWvOq1tA== 29872\nIHBhbG1z 29873\nIG5lb24= 29874\n0L7QstCw0L3QuNGP 29875\nIGZpbHRlcmluZw== 29876\nIGpvdWVy 29877\nIEjDtg== 29878\nINC90LXRgQ== 29879\n6rKg7Ja07JqU 29880\nIDgx 29881\nIHN0b3J5bGluZQ== 29882\nIHByemVw 29883\nIHRoYW5raW5n 29884\nIEJvZWluZw== 29885\nIHNvZnRseQ== 29886\namVt 29887\n0LDQu9GM0L3Ri9GF 29888\nIGZsYXNobGlnaHQ= 29889\nINC/0YM= 29890\nIFdPTUFO 29891\n4bqvYw== 29892\nw61jaA== 29893\nIGx1eHVyaW91cw== 29894\nIHfDvG4= 29895\nIGltcGFjdGZ1bA== 29896\nIGNvbnNvbg== 29897\ncmV1 29898\naXJyaW5n 29899\naWZ0ZXI= 29900\nIGNvbnN0aXR1ZW50cw== 29901\nIDk0 29902\nIFRvdQ== 29903\nZ29t 29904\nIOyDneqwgeydhA== 29905\nIHN0ZXJlb3R5cGVz 29906\nIG1vxbxsaQ== 29907\ngqg= 29908\nIHBlbmNpbHM= 29909\nINGB0LvQvtC2 29910\nIGlocmVt 29911\nIEJlc2No 29912\nIEtvaA== 29913\nIEVudHNjaGVpZA== 29914\nIGxlaw== 29915\nIGbDtnJz 29916\nIHRvdGFsbWVudGU= 29917\nIGxpdmVseQ== 29918\nIGVudHJvcHk= 29919\nIGRpc2Nlcm4= 29920\nINCX0L3QsA== 29921\nIGRvdg== 29922\nIG15dGhvbG9neQ== 29923\nYXBhbmVzZQ== 29924\nIGFwcHJveGltYXRl 29925\n0LDRgtC40LI= 29926\naWZpYWJsZQ== 29927\nIFNlbw== 29928\ntOyLrO2eiA== 29929\nIOyYtw== 29930\nIHRlbXBvcmFs 29931\nIGlU 29932\nIGVzdGF0 29933\n0LrQuNC8 29934\nIHNwcmluaw== 29935\nIGdydW5k 29936\nIGluZmFudHJ5 29937\nIHNjaGFmZmVu 29938\nIGFuaw== 29939\ncmlhZ2Vz 29940\nIFllb24= 29941\nIE1vcm9j 29942\nIGludmFzaXZl 29943\ngZQ= 29944\nIHBhcmVudGluZw== 29945\nIFJpcw== 29946\naWJpbGU= 29947\nIG1vZHM= 29948\nINC/0YDQvtCy0LXRgA== 29949\nIFRoaW5n 29950\nIFdoZXJldmVy 29951\nIGFja25vd2xlZGdpbmc= 29952\nIHBhd24= 29953\ndW1tZXI= 29954\nb3Ji 29955\nNjk= 29956\nIHJldHJvdXZl 29957\nIHJlbGllcw== 29958\nIEhpZ2h3YXk= 29959\nIGF3ZQ== 29960\naXRhaXJl 29961\nIGFwcGxpY2FudA== 29962\nIGFpc2xl 29963\nd29ybQ== 29964\nIHBheWxvYWQ= 29965\nIGNhcnJl 29966\nIEJhY2g= 29967\nIOy5nOq1rOs= 29968\n0L3QuNC1 29969\nIGl0w61z 29970\nb25uYWlzZQ== 29971\nc29s 29972\nYWxnaWE= 29973\nIHJvY2tpbmc= 29974\nIGJlc3Rlbg== 29975\ncml0ZXM= 29976\nXl4= 29977\n0LjQvdC+0Lk= 29978\nIGJhaXhv 29979\nIOq4sOyWtQ== 29980\n0L7RgtGA0Lg= 29981\nc2lt 29982\nIGluY2Fybg== 29983\n64uk7J2M 29984\nIGxpY2s= 29985\nc2lkZWQ= 29986\nIDcx 29987\nZm9yZGVy 29988\nIHJlc29uYW5jZQ== 29989\nIHRlZ2Vu 29990\nIG1ldGFwaA== 29991\nb3dzZXI= 29992\nINeQ16DXl9eg15U= 29993\nP+OAjQ== 29994\nIHNwaWVsZW4= 29995\nIHZvbGxleQ== 29996\nlOydtO2BrOyXhQ== 29997\nbG9va2Vk 29998\nIHNlbnRlbmNlZA== 29999\nIG11bHRpcGx5aW5n 30000\nIGlkZWFscw== 30001\nIHdhaHJzY2hlaW5saWNo 30002\nIGRlcG9zaXRz 30003\nYmlsaXI= 30004\nIGVmZmV0 30005\naWxsb24= 30006\niOunjA== 30007\nIHRlc3RpbW9u 30008\nIHphd3N6ZQ== 30009\nINC/0YDQvtGG0LXRgdGB 30010\nIExhdg== 30011\nIHRyYXZhaWxsZXI= 30012\nIGxhaXNzZQ== 30013\nIE1vdW50YWlucw== 30014\nINGA0L7QsQ== 30015\nIGV4YW1pbmVk 30016\naXR1cw== 30017\nV2Fz 30018\n0LvRiw== 30019\nIGF0dHJpYnV0ZWQ= 30020\nIOyKuQ== 30021\nIEJhcm9u 30022\nIGdlcA== 30023\nIGF0dGVudA== 30024\nIENvbGxlY3Rpb24= 30025\nIHRoZWF0 30026\nIENhaQ== 30027\nIHdlbGxz 30028\nIGh1bWFubw== 30029\nIEhhc3Q= 30030\nINGF0L7RgtGP 30031\nY3phcw== 30032\nIHBlcm1pdHM= 30033\nIGxlZ2c= 30034\nIGVwbw== 30035\nIEZlbg== 30036\nIHRoaQ== 30037\nIEZvaQ== 30038\nIMOpbGVjdA== 30039\nIDgz 30040\nIG92ZXJ0aA== 30041\nIHRlbmFudA== 30042\nTmV4dA== 30043\nIHByYWlzZWQ= 30044\nc2VjdXJpdHk= 30045\nIEltcGFjdA== 30046\nIHZvdWNo 30047\nIG5lZ8Oz 30048\nIHVudmU= 30049\nIGNyaXRpY2l6ZQ== 30050\nIEtlbnlh 30051\nIHRhY3RpYw== 30052\nIGxvZ3I= 30053\nIHBvaXM= 30054\nIHBhcGE= 30055\nc3BlYWtz 30056\n8J+R 30057\naXNwZXJz 30058\nIHN1cnBsdXM= 30059\nIGNvbGRlcg== 30060\ncGxldHM= 30061\nIFZpZW5uYQ== 30062\nIExlYWQ= 30063\nIGFlcmlhbA== 30064\nIFRhaA== 30065\n0LXQvdGC0L7Qsg== 30066\nIEdyZWVrcw== 30067\nQ2Ft 30068\nIG3DoXhpbQ== 30069\nIGt1aW4= 30070\nY2hpbw== 30071\nIGRlbW9uc3RyYXRlcw== 30072\nYW5vcw== 30073\nIENlcnQ= 30074\nINGN0L0= 30075\nIGJsb2dz 30076\nIOyEnOyauA== 30077\nIGJlYW1z 30078\n0LjQutC+0LI= 30079\nIHByb21wdGVk 30080\nIGZyaWdodGVuaW5n 30081\nIFBvcnNjaGU= 30082\nbGFyxLFuxLE= 30083\nIGNoaWxsaW5n 30084\naXNwaGVyZQ== 30085\nIGZsYXNoaW5n 30086\nIEthcmQ= 30087\nYnJlYWQ= 30088\nIGV4aA== 30089\nIHR5Y2tlcg== 30090\nIGVjb2xvZ2ljYWw= 30091\nIE1hZQ== 30092\nINee15DXldeT 30093\nIOuCmOuPhA== 30094\n0LvQvtC9 30095\neXNz 30096\nIHBlcmd1bnQ= 30097\nIHByaXg= 30098\naXp6YXJk 30099\nIGNhbmNlcnM= 30100\nIDkx 30101\nc3VzcA== 30102\nIEl0ZW0= 30103\nxZ9h 30104\nIHBlc3Q= 30105\nIHRha8SF 30106\nIGx5bXBo 30107\nIFBhdHJp 30108\nZmlsbA== 30109\nIHJlY29ubmE= 30110\nIG9wdGltaXNt 30111\nIG1pbWlj 30112\nIOyynA== 30113\nIE1hZGFtZQ== 30114\nb2N5 30115\nbGluaW5n 30116\nZXJtZQ== 30117\nIGZvbGRlcnM= 30118\nIGN6xYI= 30119\ndWNoYXI= 30120\nIGN1cnNv 30121\nIGJyZWFjaA== 30122\n0L3QuNGC0Yw= 30123\nIHBhbWnEmQ== 30124\nIGVsaWc= 30125\nIGF1dG9w 30126\nRmxvdw== 30127\nIHByb2dyYW1tZWQ= 30128\nIFByb2Nlc3M= 30129\nIGZpZ3Vy 30130\nIFNG 30131\nIEVsZXM= 30132\nIHByb2dyYW1tZXM= 30133\nIGRpenp5 30134\n7Iuc6rCE 30135\nINC70LjQsdC+ 30136\nIHNuaWZm 30137\nIFNlYmFzdGlhbg== 30138\nIEh5ZQ== 30139\nIDQwMDA= 30140\nIHBlcm1pdGU= 30141\nINC30LDRiQ== 30142\nIGd1aXQ= 30143\nIERhaXM= 30144\nIGFjY29yZGFuY2U= 30145\nIG1vZHVsYXI= 30146\nb2dlbmVvdXM= 30147\nIHBvdXF1aW5obw== 30148\nIGFydGlsbGVyeQ== 30149\nIGx1YnJpYw== 30150\nIHZvbGNhbg== 30151\nIE5I 30152\n8J+k 30153\nIGRlYW4= 30154\nUmg= 30155\nIG1pbmlzdHJl 30156\nIEludg== 30157\nIEJ1bGdhcg== 30158\nIERhdGVu 30159\n6I4= 30160\nSW0= 30161\nIG9yaWdpbmF0ZWQ= 30162\nIE5peG9u 30163\naW50ZWdy 30164\nIGxhY2tz 30165\nIE5hY2h0 30166\n7Ja064KY 30167\nY2FtZXJh 30168\nIHJhZGlzaA== 30169\na2l5ZQ== 30170\nIGFuZ2Vz 30171\nIHByw6lm 30172\nanVr 30173\nIEJlZQ== 30174\nIEJV 30175\nINCy0L7RgdC/ 30176\nIEJU 30177\nw6ptZXM= 30178\nIFN0w7xjaw== 30179\nIEluaw== 30180\nIFNlcmdlYW50 30181\nIE11bHRpcA== 30182\nIGhpw6diaXI= 30183\nINCh0LDQvA== 30184\nIETDqQ== 30185\nb2xwaA== 30186\n7Ja4 30187\nIGltcGF0 30188\nIOyViuqzoA== 30189\nINGC0LDQutC+0LPQvg== 30190\nINC90LDQstC10YDQvdC+0LU= 30191\nIHVucHJlZGljdGFibGU= 30192\nIG1lbmQ= 30193\nIOyXhuyWtOyalA== 30194\nIGpha2llxZs= 30195\nIGFubmk= 30196\nIGRvbm7DqQ== 30197\nIEtpcnN0eQ== 30198\nIHJlY3Rhbmd1bGFy 30199\nIGVtcGV6YXI= 30200\nIEV4Y2hhbmdl 30201\n6rCU 30202\nIMOpY29ub20= 30203\nZWxpbg== 30204\ncmVpYnQ= 30205\nINeU16Q= 30206\nIGNlbWV0ZXJ5 30207\nIGVzcGHDsW9s 30208\nb2xpbg== 30209\n0LvRjtC0 30210\nIGdyw6JjZQ== 30211\nYWxsZW4= 30212\nIFBoaWxvcw== 30213\nIEVyc3Q= 30214\nIOyDiA== 30215\nIFZpZA== 30216\nR2l2ZQ== 30217\nT0g= 30218\nzrzOvw== 30219\nIFBhcmU= 30220\nIG1ldGFib2xpc20= 30221\nIG1hcGxl 30222\nIGF4bGU= 30223\nIER5 30224\nIGtvbW1l 30225\nz47OvQ== 30226\nIGdyZWF0bmVzcw== 30227\nIHZlcmlmaWVk 30228\nIHNww6k= 30229\nIEZhaHJlbmhlaXQ= 30230\nIEJyZW4= 30231\nIENvbmZlZGVy 30232\nIGhpc3RvaXJl 30233\nIGVsaW1pbmF0aW5n 30234\nIEFkZGluZw== 30235\nIEFiaQ== 30236\nIGhvc3BpdGFsaXR5 30237\ndGlt 30238\nIGJvbml0bw== 30239\nIHBhcnRlcw== 30240\nINC00YDRg9Cz0LjRhQ== 30241\nIFNoYXk= 30242\nIFNlZA== 30243\nIHJlZ3JldHM= 30244\n0Y/QvNC4 30245\nIHRlbmFudHM= 30246\nIFBUUw== 30247\nIGRldmk= 30248\nIExhdGU= 30249\ndWV6 30250\nIHPDtnls 30251\nIOyerOuwjA== 30252\nIHRvZ2dsZQ== 30253\nIG1hc2tpbmc= 30254\n0LDQu9GM0L3QvtCz0L4= 30255\nIHBlcnPDtm4= 30256\nIGFtZXJpY2Fu 30257\nZmlr 30258\nIFJHQg== 30259\nZW5zb24= 30260\nIEtB 30261\nd3d3dw== 30262\nINGA0LXQsw== 30263\nbWV0aWNz 30264\nIGVkdWNhdG9y 30265\ncGFyaw== 30266\n0LXQu9GM0LfRjw== 30267\nYXJ1cw== 30268\n0YDQtdGC 30269\nIGZlaXRv 30270\nIGNob2ly 30271\nIGxhcmdv 30272\nIGVlbnM= 30273\nIHdhdHRz 30274\nIFNpbmdsZQ== 30275\nIHN1c2NlcHRpYmxl 30276\naWNlcg== 30277\nINCy0LrQu9GO0Yc= 30278\nIHB1cw== 30279\n7ZmY 30280\nRW5n 30281\nIGZhbnRhcw== 30282\nIHNwZWNpZmljYXRpb24= 30283\nIGNvbmZyb250ZWQ= 30284\nIENvbHVtYnVz 30285\n0LjQstC10YI= 30286\nYXLEsW0= 30287\nIGNhZmZlaW5l 30288\nbXVuaXRpb24= 30289\nIG1pZ3JhbnRz 30290\nbGlkZQ== 30291\naXRhdGlvbnM= 30292\nIEdlbWU= 30293\n4bqr 30294\nIHBsYW5uZXI= 30295\nIHN0aW11bGF0ZQ== 30296\nIGFwcm94aW0= 30297\nY2V1 30298\nIE5vbQ== 30299\nIHZvZw== 30300\nINGA0LDRgdGC 30301\nIGVuc2XDsQ== 30302\nIHNlbGxlcnM= 30303\nIGd1dGVu 30304\nemQ= 30305\nQ2Fs 30306\nIGRlc2NyaXB0 30307\nIHJlY29uY2lsaWF0aW9u 30308\nemluaG8= 30309\n4bmHYQ== 30310\nYWN5ag== 30311\nIENPTA== 30312\nc2F3 30313\nIO2ZleyduA== 30314\nIHZhcml0 30315\nIHBhcnRuZXJpbmc= 30316\nIGRldGVudGlvbg== 30317\nIGJvbWJpbmc= 30318\nY2xhcHBpbmc= 30319\naWVuY2llcw== 30320\nb25kdQ== 30321\nQU1F 30322\nIOqwmeyKteuLiOuLpA== 30323\nY8OtYQ== 30324\nINC/0L7RgdGC0L4= 30325\nIEFTTVI= 30326\nIGhvbWVwYWdl 30327\nIHNpw6g= 30328\nYW50aGE= 30329\nIFBvbGw= 30330\nIGlnZW4= 30331\nY3ljaA== 30332\nIOqwkeyekOq4sA== 30333\nIGNvbnNpZGVyYWJseQ== 30334\nIEFyaXN0 30335\nIHdpdGhzdGFuZA== 30336\nIHF1YWxpdGF0aXZl 30337\nIEtyYWZ0 30338\nINGN0LvQtdC60YI= 30339\nIEJlYWQ= 30340\n0LXQutGC0LjQsg== 30341\nIGNydXNoaW5n 30342\n7LOQ 30343\nIG5hdnk= 30344\n2Yjaug== 30345\nc2hv 30346\nIG9haw== 30347\naXBwZXJz 30348\nIHNvaWxz 30349\nIHBpZ21lbnQ= 30350\nIGV2aXRhcg== 30351\nIGZ1c2U= 30352\nIERhbGU= 30353\nOiI= 30354\nIGNvbXBsw6h0ZW1lbnQ= 30355\nIGtlbA== 30356\n4LmG 30357\nIHF1YXRyZQ== 30358\nIFVN 30359\nIOunkOs= 30360\nw61y 30361\nIGxlaXN1cmU= 30362\nIEhvdXNpbmc= 30363\nIGZvbGRz 30364\nZXN0aW9u 30365\nQVJT 30366\nIG1hc2g= 30367\ndXJwb3Nl 30368\nIGFjY3VtdWxhdGVk 30369\nIFN0dWZm 30370\nIHRhcGVz 30371\nINGB0LjQu9GM0L3Qvg== 30372\nIExPVkU= 30373\nIDE5ODI= 30374\nIHNjYXJz 30375\nIGNhcGl0YWxpc3Q= 30376\nIE5lZA== 30377\nIHNvZnRlbg== 30378\nIG5vdGFibHk= 30379\nIGZvcmPDqW1lbnQ= 30380\nIFJhdW0= 30381\nINC90LXQvtCx0YXQvtC0 30382\nIHRyYWRlbWFyaw== 30383\nIGZlcnRpZw== 30384\nID8h 30385\nIHJlaW5mb3JjZWQ= 30386\nIHJlY2hhcmdl 30387\nIFB1dHRpbmc= 30388\nIHZpbGxhaW5z 30389\nIGhhbmRpYw== 30390\nIGFkdmVydGlzZW1lbnQ= 30391\n2KrZig== 30392\nINGB0YPQvA== 30393\nIFJpbGV5 30394\n15XXkdc= 30395\nT3M= 30396\n2KfYsg== 30397\nQm95 30398\nIHNxdWlzaA== 30399\nb2NrZXQ= 30400\nIHRlc3RpZnk= 30401\nINec157X 30402\nINC80LDRgdGB 30403\nbWFudWVs 30404\nIEFya2Fuc2Fz 30405\naWZmZQ== 30406\nIGFuYWx5c3Rz 30407\nIERlYWY= 30408\nIGrDsw== 30409\nIGdyb2Nlcmllcw== 30410\nIFdoZWVs 30411\nINGA0LjRgQ== 30412\nIGPDsm4= 30413\nIENvYg== 30414\nIHByaXNvbnM= 30415\nw6h2ZQ== 30416\nIENhYmluZXQ= 30417\nIHBvc2Vk 30418\nIGd1ZXJyZQ== 30419\nIExsb3lk 30420\nIGNsZXJr 30421\nIGNyaXNlcw== 30422\nIFNobw== 30423\nIE9yZQ== 30424\nIEZvb3RiYWxs 30425\nIEFkdmlz 30426\nIFpoZW5n 30427\n6I0= 30428\nIEFNWQ== 30429\nIHVuZm9y 30430\nIG1vbmFzdGVy 30431\nIGNvbXBpbGU= 30432\nIGltbW9ydGFs 30433\nYXRhYmxl 30434\nIHBhcmFubw== 30435\nIHRpdmVy 30436\nIFN0ZXBo 30437\nIEZ1w58= 30438\nIGRpc2NvbnRpbg== 30439\nIHJpcGU= 30440\nIGhhY2tpbmc= 30441\nIHNpZW5kbw== 30442\nIHNlZ3Vybw== 30443\nYWx0cmVz 30444\nIGFuZGVyZXM= 30445\nIOumrOs= 30446\nIGV4cG9ydHM= 30447\nIHRhYmlp 30448\nIOq4sOuLpOs= 30449\nIGJvdGhlcmluZw== 30450\nIHBpY2tsZQ== 30451\nIEJSSUFO 30452\nIGFsdGFy 30453\nINC/0YDQuNCx 30454\nIHRyYW5zZmVycmluZw== 30455\nIFZvcnM= 30456\nINmH2Yg= 30457\nIFph 30458\nIEZyYW5jZXM= 30459\nIGJyb3dzZQ== 30460\nZW1pdA== 30461\nIGNoZXdpbmc= 30462\nIEZyZWRkeQ== 30463\nIGVkaXRvcnM= 30464\nw6RsbGU= 30465\nIO2MgA== 30466\nIFNxdWU= 30467\nIEN1bHR1cmFs 30468\nYXdr 30469\nIFNhY2hl 30470\nIENhcmJvbg== 30471\n4bqvdA== 30472\nRkw= 30473\nIE5HTw== 30474\ncGXFgg== 30475\nIFNvdQ== 30476\nIGh2b3I= 30477\ndW5pbnRlbGxpZ2libGU= 30478\nIOuylQ== 30479\nIMKw 30480\naWlu 30481\nINei150= 30482\nIGRlcnJpw6hyZQ== 30483\nIGN6eW0= 30484\nIEFwb3N0 30485\nIHJlZ2FyZGVy 30486\nIGFncmFkZQ== 30487\nIENhbmR5 30488\nIG1hcmU= 30489\nIGludHJvZHVjZXM= 30490\nYmlyZHM= 30491\nIHVuaXF1ZWx5 30492\nIG11aw== 30493\nIGNvb2tlcg== 30494\nIGNyZXdz 30495\nIGplaXRv 30496\nRVJU 30497\ntoTr 30498\nbmlzc2U= 30499\nIGVm 30500\nIGNhcnRl 30501\nIFlhaw== 30502\nIFBBVA== 30503\n0LjQvdC+ 30504\nYm9ra2k= 30505\nIG1hdGVz 30506\nIGRpc3RpbnQ= 30507\nIOy9lOuhnOuCmA== 30508\nIHnEsWw= 30509\nIM66zqzOvQ== 30510\nIGNvbmZpZ3VyYXRpb25z 30511\nZW5nYQ== 30512\ncmVjaHQ= 30513\nSGFwcHk= 30514\naW52ZXN0 30515\nIHJlY29uc3RydWN0 30516\nINGN0YLQvtC80YM= 30517\nIG1vc3F1ZQ== 30518\ncmF1bQ== 30519\nIHZveWV6 30520\nIE5CQw== 30521\nIOyekOyLoA== 30522\nIHN0dXJkeQ== 30523\nINC60LDQvw== 30524\nIGFuc2No 30525\nYWxpZA== 30526\nIG1hc2lo 30527\nIFJFUA== 30528\nIOy9lOs= 30529\nIGRlZHVjdA== 30530\nIHNhbGly 30531\nd3VyZg== 30532\naWxvdA== 30533\nIE11dHRlcg== 30534\nb2xkcw== 30535\nIEZFTUE= 30536\nIEJpYg== 30537\nIG5laWdoYm9yaW5n 30538\nIGJsaXNz 30539\nIO2YvA== 30540\n0LvQuNGB0Yw= 30541\nINGC0YDQtdCx 30542\nIGdyZW5hZGU= 30543\nIGVnYWw= 30544\nIGZpbmVseQ== 30545\nIHBldGFscw== 30546\nIGtlZXI= 30547\nIGNoeWJh 30548\nIHNraXBwaW5n 30549\nIHRoaXJ0ZWVu 30550\nIGdyYXZ5 30551\nIFNBVA== 30552\nNjE= 30553\nINC90L7Qsw== 30554\nIG1pbnM= 30555\nSVRF 30556\nIHNvemlhbA== 30557\n7ZWY66m07ISc 30558\ncnVrdHVy 30559\nINCy0L7Qt9C80L7Qtg== 30560\nINC+0L/Rj9GC0Yw= 30561\nIGFydGg= 30562\nIEN1YmFu 30563\nIHRyZWFzdXJlcw== 30564\nIGZlcnRpbGl6ZXI= 30565\nIGF3YWtlbmluZw== 30566\nIOuwseyLoA== 30567\nIHJhbGw= 30568\nIGRlcGljdA== 30569\nIFBhYmxv 30570\nIG5pbmV0ZWVu 30571\nIHdhdHQ= 30572\nIGVudGlyZXR5 30573\nS1M= 30574\nIFdvb2Rz 30575\nU2No 30576\nINqp2Yg= 30577\nIERyeQ== 30578\ndXZl 30579\nIHJlY29uc3RydWN0aW9u 30580\nIGFuYXRvbXk= 30581\niOulvA== 30582\nIGJhYmE= 30583\nIGxpc3RlbmVy 30584\nIHNoYXJwZW4= 30585\nIFBlcnU= 30586\nINCy0YvQtw== 30587\nIHJlY3JlYXRpb24= 30588\nIGluaXRpYXRl 30589\nIGNhbG9y 30590\nIE5hag== 30591\nZ2Vl 30592\nIEZlZWxz 30593\nIFNuYXBjaGF0 30594\nIFRldA== 30595\nIE5lc3Q= 30596\nIERhZg== 30597\nIEZpbmlzaA== 30598\nINGC0LDQutC40Lw= 30599\nw7pj 30600\naXplbnM= 30601\nIHNwaW5z 30602\nIGVtYnJ5 30603\nIHBhc3NhZ2Vz 30604\nIGNpZW50 30605\nIGp1c3RpZmljYXRpb24= 30606\nIG9sbWF6 30607\nIGZsb29kZWQ= 30608\nIGVtb2pp 30609\nIGVtYnJhY2luZw== 30610\nIGRpc2NhcmQ= 30611\nIEJhc2lj 30612\nYWdvZw== 30613\nIOychO2VtA== 30614\nIGFzeWx1bQ== 30615\nZXJpbg== 30616\nIGZpbQ== 30617\nIG5pbmph 30618\nIGF1dG9tYXRl 30619\nIGFsbGVyZ2lj 30620\nw7/Dv8O/w78= 30621\nYW1hbQ== 30622\nINC80LDRgA== 30623\nIE9p 30624\nw6R1cw== 30625\nIGluZHVjdA== 30626\nIEJFTg== 30627\nIHrFgg== 30628\nIGthxbxkeQ== 30629\nIEFNUA== 30630\nbsSb 30631\nU3VyZQ== 30632\nIHF1aWw= 30633\nIGVzcGVj 30634\ncm9r 30635\nQlNDUkk= 30636\nIGxpZWJl 30637\ncHVz 30638\nYWNoc2Vu 30639\nIGNyaWNrZXQ= 30640\n64qQ 30641\nIEZyYW1l 30642\nZWtrw7xy 30643\nYXJi 30644\nIHDFmQ== 30645\n0LjRgdGB 30646\nIHplZ2dlbg== 30647\nIGRvdWJsZXM= 30648\nIERyZQ== 30649\ndGVzdA== 30650\naW5zcA== 30651\nYm95cw== 30652\nIG3Do28= 30653\nIFZlcnNl 30654\nIG11c2N1bGFy 30655\nIE1BTEU= 30656\nIGR1bHU= 30657\nIG9jY2FzaW9uYWw= 30658\nTG8= 30659\nY29ub21pYw== 30660\nIHZhaw== 30661\nIHJlbWVkeQ== 30662\nIOKZquKZquKZqg== 30663\ndmVt 30664\nIMO2bmVt 30665\nIGthcsWfxLE= 30666\nIFNoYXJw 30667\naHVy 30668\nIOuwqeuylQ== 30669\nIGdyYW5kc29u 30670\nIGFrdGl2 30671\nIFRocm9uZXM= 30672\nIOyViOyXkA== 30673\nIHRvdHM= 30674\nIHN1YmQ= 30675\nIFBhdWxh 30676\nIGdyYXZlcw== 30677\nIEJyZW50 30678\nINC90LjQutGC0L4= 30679\nIHPDtno= 30680\nIGNyZWM= 30681\nIFZsYWRpbWly 30682\nINC/0L7QuQ== 30683\nICIt 30684\nIHBzeQ== 30685\nYXRyaQ== 30686\naWRhbg== 30687\nIGHDum4= 30688\nIHN0YW5kYXJkaXplZA== 30689\n7LmY6w== 30690\nINC60YDQvtCy 30691\nIFpodQ== 30692\nc29tZXRoaW5n 30693\nIDc1MA== 30694\nIG11amVyZXM= 30695\nIGFpdA== 30696\nYWd1 30697\nIGNvcnJlY3RlZA== 30698\naWtrYQ== 30699\nZWxlZA== 30700\nIENhcmVlcg== 30701\nb3d5bQ== 30702\nIHJvb21tYXRl 30703\nIGRlc2NlbmRhbnRz 30704\nIE5hcG9sZW9u 30705\nINCU0L4= 30706\n7ZaI7Ja07JqU 30707\nIGJ1bnVu 30708\nIE1pY2hh 30709\nIGRlc2NvYg== 30710\nUEk= 30711\nIHBhbGFicmE= 30712\nIHRyYWNrZWQ= 30713\nIGRlcGVuZGVuY2U= 30714\nIEJhcmFjaw== 30715\nIGZlcnRpbGl0eQ== 30716\nIFNvdXRod2VzdA== 30717\nIGluY29tcGxldGU= 30718\nIGNvbXVuaWM= 30719\nIGNvbXByaXM= 30720\nIFJlc3RhdXI= 30721\nIGFjcm9u 30722\nzrrOsQ== 30723\nIGFwcHJlbnRpY2Vz 30724\nIG11c3N0 30725\nIEFicg== 30726\nIHBlbnRydQ== 30727\nIENvbnNvcnQ= 30728\nIEF2ZWM= 30729\nIGR1bXBsaW5ncw== 30730\nTFI= 30731\nIHdzenlzdGtpZQ== 30732\nIHN3YW1w 30733\n0L3QtdCy 30734\ndWdnbGU= 30735\nIHdhdGVyY29sb3I= 30736\nIHByb3Rvbg== 30737\nIEVzcGHDsWE= 30738\nb2NraW5n 30739\n0L7QstCw0Ls= 30740\nIHRha2lt 30741\nVmVyeQ== 30742\nIGRlbWVudGlh 30743\nIMWfZXlp 30744\nSmFj 30745\nIE1hY0Jvb2s= 30746\nIExpdg== 30747\nZmZpY2llbnRz 30748\nIEh1bnQ= 30749\nIG92ZXJsYXk= 30750\nIFNreXBl 30751\ncHVua3Q= 30752\nIGNvbmZpbmVk 30753\nIEFkcmlhbg== 30754\n2LHZgw== 30755\nIEplZXA= 30756\nIGVucXVhbnRv 30757\nIGFuZXN0 30758\n0L7RgtCy0LXRgg== 30759\nINC80LXQvdGM 30760\nIGlycmlnYXRpb24= 30761\n4buRbg== 30762\nIGVpZ2h0ZWVu 30763\nIFBvbg== 30764\nIHJlc2N1ZWQ= 30765\nIDE5ODM= 30766\ncsO8 30767\namFl 30768\nIEplb25n 30769\nIGFtYXppbmdseQ== 30770\nIEZEUA== 30771\nIGJhY2tzdGFnZQ== 30772\nY3Vl 30773\nIM+Dz4TOt869 30774\nINin2YTYtQ== 30775\nIGxpdmVzdG9jaw== 30776\nIFdhcm5lcg== 30777\nIG1ham9ycw== 30778\nIGNvb3BlcmF0aXZl 30779\nIEJyYWR5 30780\ncmFpbmVk 30781\ncmllYg== 30782\nINeR157X 30783\nINC00L7QstC+0LvRjNC90L4= 30784\nIEZF 30785\nIGxlYWtlZA== 30786\nIE1lcmN1cnk= 30787\nIHBlcnN1YWRl 30788\nIHRyYW5zZm9ybWVy 30789\nIE5vcndlZw== 30790\nIOyXrOufrA== 30791\nIHpyb2JpxIc= 30792\nIGNhcmRpb3Zhc2N1bGFy 30793\nIENyYXNo 30794\nIGdvc3NpcA== 30795\n0LDRgdGC0Yw= 30796\nIOyqvQ== 30797\nIHN3ZXB0 30798\nIEhvcm4= 30799\nIEF0w6k= 30800\nIGJ1a2Fu 30801\nIEthdw== 30802\nS1k= 30803\nIFN0b3JpZXM= 30804\nR2FyeQ== 30805\nIGdhcmRlbmluZw== 30806\nIFF1aWNrbHk= 30807\nIEZhbGNvbg== 30808\nIG92YXQ= 30809\nY8Sx 30810\nIENvbXBsZXQ= 30811\nIERhdGU= 30812\nINC/0YDQuNC8 30813\nIGzDpHVmdA== 30814\nIEF1ZHJleQ== 30815\nIFdlbnQ= 30816\nIHBlbMOtY3Vs 30817\nIGNhcnJpYWdl 30818\nIHVuYWNjZXB0YWJsZQ== 30819\nbnltaQ== 30820\nINGB0LvRi9GI 30821\nIHRlcnJl 30822\ndWVsbGVtZW50 30823\nRUVFRQ== 30824\nIHBoYXJtYWM= 30825\naMO1ZXM= 30826\nIHppY2g= 30827\nIG1pZ3JhdGU= 30828\nIEZyeQ== 30829\nw7FhbmE= 30830\nIE11aXRv 30831\nRU9WRVI= 30832\nIGZvcnRyZXNz 30833\nIENvbXBhbg== 30834\nIEpTT04= 30835\nb3JkbnVuZw== 30836\nIHdhcnRv 30837\nIHVuZ2Vm 30838\n7IWU7ISc 30839\nINGA0L7Qug== 30840\nIHBhZGRsZQ== 30841\nSmFyZWQ= 30842\nIHN1Ym1pdHRpbmc= 30843\nIGxhdGNo 30844\nIGZ1Zw== 30845\nINC60L7RgQ== 30846\nIEVm 30847\nIGxhdW5jaGVz 30848\nIGZ0 30849\nb3RlY2hu 30850\nIHRyYXZlbGxlZA== 30851\n2KfZgQ== 30852\nIHByb2No 30853\nIGRlZGlt 30854\nODM= 30855\nIHJlYm91bmQ= 30856\nIExV 30857\ncGF0aA== 30858\nINGB0L/RgNCw0LI= 30859\nIMO2bA== 30860\nIO2CpA== 30861\nIHByaXZhdA== 30862\nIHRyYWN0b3I= 30863\nIEF0dGVudGlvbg== 30864\nU2Vy 30865\nIGNvc2Vz 30866\nw6FyaWE= 30867\ncGFs 30868\nIOydgA== 30869\nIHN1Y2Nlc3Nvcg== 30870\nIGNvbm5lY3RvcnM= 30871\nINGD0YHRgtCw0L3QvtCy 30872\nIGdlbm9jaWRl 30873\nIHN1ZmZpY2llbnRseQ== 30874\nIEFpeMOy 30875\nIHN0YWJpbGl6ZQ== 30876\nIGNvbmdlc3Q= 30877\nIGNhcnZpbmc= 30878\nIHpvc3Q= 30879\nINCx0YvRgdGC0YDQvg== 30880\nIHNob3J0ZXN0 30881\nIGxpdmVs 30882\nIDg5 30883\nIGVyaw== 30884\nIHBvcnRyYWl0cw== 30885\n4KWA 30886\n6Jg= 30887\nYm9hdA== 30888\nbGxhaA== 30889\nQU5D 30890\nIGVtcGlyaWNhbA== 30891\nIEVjaG8= 30892\nIE5lZGVybGFuZA== 30893\nTmV0 30894\nIGN1aWRhZG8= 30895\nIFJvbWE= 30896\nIGNhbGY= 30897\nIGdpYW50cw== 30898\nIEV4cGxvcmVy 30899\nIENvbGxlY3Q= 30900\nYWxpdGlvbg== 30901\nIERlc3Rpbnk= 30902\nIGF1c2dl 30903\nIEVkdQ== 30904\nIENsbw== 30905\nIGVhcnJpbmdz 30906\nIFRyYWNr 30907\nIFJPUw== 30908\nIEJlbGxl 30909\nIHB1ZWRh 30910\nIGRheXRpbWU= 30911\nIHN1cHBsaWVy 30912\nIFNW 30913\nIEV4aGFsZQ== 30914\nIGdhbGVyYQ== 30915\nY291cnNl 30916\nIGNlbnRpbWV0ZXI= 30917\nIEJhc3Q= 30918\nbXVk 30919\nIHNhbmdhdA== 30920\nIFBoeXNpY2Fs 30921\nIHByaXZhdGVseQ== 30922\nIHRyYXRh 30923\nbHlubg== 30924\naWxsaQ== 30925\nIOuplOydtO2BrOyXhQ== 30926\nIGNyeXN0YWxs 30927\nIHBvZHM= 30928\n4bqjbg== 30929\naW5hdG9y 30930\nIFJlY29yZHM= 30931\nxJ9pbWl6 30932\naXNzZW1lbnQ= 30933\naGFyZQ== 30934\naGFkb3c= 30935\nIERL 30936\nIOyVjOqzoA== 30937\nIHd5bg== 30938\nIHJlcXVlc3Rpbmc= 30939\nIERvbm5h 30940\nIOyXtOyLrO2eiA== 30941\naW5lYQ== 30942\nIGV4ZXJ0 30943\nIER1bmNhbg== 30944\nINCy0LXRhw== 30945\nIEhhaA== 30946\n4KSC 30947\nIExpZg== 30948\nIEZpbmRpbmc= 30949\nIE5vdg== 30950\nINC30L3QsNC6 30951\nINC+0YQ= 30952\nIFF1w6g= 30953\nIHF1YXJ0ZXJiYWNr 30954\nINGE0LDQug== 30955\nIGJpcGFydGlzYW4= 30956\nxJ9pbg== 30957\nIG7DqWNlc3M= 30958\nIHJlZmVyZW5kdW0= 30959\nIGNvbXBpbGVy 30960\nIHByb2JhYmls 30961\n0LXQtNC4 30962\nIHRyYWRlcg== 30963\nIFJ1bQ== 30964\nZ2VtZQ== 30965\nIGRpbw== 30966\nIGLEmWR6aWVteQ== 30967\nIM+Azqw= 30968\n6r64 30969\n15XXmA== 30970\nIOCklQ== 30971\nINCx0LvQsNCz 30972\nIHNjYWxw 30973\nIFBhdXNl 30974\nIGNhcHRpb24= 30975\nIGVuZGFuZ2Vy 30976\nIGVubGFy 30977\nIHJvdHRlbg== 30978\nIHdhaA== 30979\nIGR6aQ== 30980\nIEluc3RhbGw= 30981\nQXk= 30982\nIGNyZWFy 30983\n0LXQvdGC0LA= 30984\nIHdlaWdoaW5n 30985\nIGJ1dHRlcmZsaWVz 30986\nIEdhc3Q= 30987\naG9ybg== 30988\nd2Fyeg== 30989\nSUNFT1ZFUg== 30990\nINC90LDQudGC0Lg= 30991\nIGNvZWZmaWNpZW50cw== 30992\nIFNwZW5jZXI= 30993\nIEhpZ2hlcg== 30994\nIGNvd29yaw== 30995\nINC60L7RgtC+0YDQvtC1 30996\nIG1vbml0 30997\nIGR5c2Z1bmN0aW9u 30998\nINGB0YLQsNC90L7Qsg== 30999\nIHRvdXJuYW1lbnRz 31000\nIG95c3Rlcg== 31001\nQk4= 31002\nIHRydWQ= 31003\nc2xvdw== 31004\nIFBlbm55 31005\nIE9keXM= 31006\nw6Zy 31007\nIGZvdQ== 31008\nIGVuam95bWVudA== 31009\n0LDRgtGL 31010\nIHd5Z2zEhWRh 31011\n0LDQu9GM0L3QsNGP 31012\nIFByb3RlY3Q= 31013\nIG1veQ== 31014\nIGNsYXc= 31015\nIHN1c3BpY2lvbg== 31016\nIHNhY3JpZmljZWQ= 31017\nIGdvc3Rv 31018\nQmln 31019\nIGFnZ3Jlc3NpdmVseQ== 31020\nIHZvcm5l 31021\nIGJsYW1lZA== 31022\nIFNlaHI= 31023\n16TXqA== 31024\nY2l0bw== 31025\nIHNlYWxz 31026\nIG11amVy 31027\nIFdlaXJk 31028\nIGZvcmVucw== 31029\nIGNvbnRyaWJ1dGVz 31030\nZXN0cmE= 31031\nIHBvZw== 31032\nTE9M 31033\nIGhhY2VybG8= 31034\n0L7RgtGM 31035\nZmljdGlvbg== 31036\nNzk= 31037\nzrvOvw== 31038\nINGC0L7QsQ== 31039\nIEdT 31040\nIENsYXJh 31041\naXRleg== 31042\nIGFkdm9jYXRpbmc= 31043\nIO2UhOs= 31044\nc3VuZw== 31045\nIHZlcnRpY2Vz 31046\nIG5hdmlnYXRpbmc= 31047\nIGV1cm9ww6k= 31048\nIHNsb3dlZA== 31049\nIGZvcmVncm91bmQ= 31050\nIEluZHVzdHJpYWw= 31051\nIGFkb3Jl 31052\n7Iut 31053\nIGNyw6llcg== 31054\nY2huaXR0 31055\nIHVuYXdhcmU= 31056\nIGN1cmx5 31057\nZW50YXI= 31058\nIGxlcg== 31059\nIHByb2hpYml0ZWQ= 31060\nIEhlcm9lcw== 31061\nIFJlZWQ= 31062\ndWNh 31063\nIHNtb2s= 31064\nIGt1bm5h 31065\nemVpdGln 31066\naW1tZW4= 31067\nIEx1bg== 31068\nINCw0LHRgdC+0LvRjtGC 31069\nIGRlZ2xp 31070\nIHZpbGxhZ2Vycw== 31071\nIHByZXNldA== 31072\nemVwdA== 31073\ndWRz 31074\nIGVtaXQ= 31075\nIOuJ 31076\n64qU7KeA 31077\n0L3QsNC60L4= 31078\nIG9zw7Ni 31079\nIDE5Njk= 31080\nINCQ0YA= 31081\nIG1hbmNobWFs 31082\nIEJyb2Nr 31083\nIG1hbnRyYQ== 31084\nIFdJTA== 31085\nYmFjaA== 31086\naW7DpA== 31087\nZWxhcw== 31088\na2Vsbg== 31089\nIGRpc2NpcGxl 31090\nIHF1YWxj 31091\nIGRlaHlk 31092\n7J20652864qU 31093\nQWY= 31094\n7ISx7J20 31095\nUnlhbg== 31096\nIHB1cHBldA== 31097\nINC00YDRg9Cz0LjQtQ== 31098\nIHJ1ZA== 31099\nIHBlbmRpbmc= 31100\nUGx1cw== 31101\nIOyViuydhA== 31102\nIGLhu4s= 31103\nIFNlZ2E= 31104\nw6dl 31105\nIHByb2dyYW1tZXI= 31106\nYmxp 31107\nIHVubA== 31108\nIGVuc2xhdmVk 31109\nIHNvY2nDqXTDqQ== 31110\nxIFo 31111\nIGluaGVyaXRhbmNl 31112\nIEJhbmds 31113\nZXJtYWlk 31114\nIHByYWN0aXRpb25lcg== 31115\nIFN0YWxpbg== 31116\nIFVzZXI= 31117\nY2libGU= 31118\nIGNhcmRpYWM= 31119\nIEtvcmVhbnM= 31120\nIGR1bXBlZA== 31121\nINeU15nXlA== 31122\nw6Fpcw== 31123\nIGh5ZHJhdWxpYw== 31124\nb3VidGVkbHk= 31125\nIFBpdA== 31126\nIHBpY25pYw== 31127\nIGJlaMO2dmVy 31128\nINGB0LzQvtCz 31129\nIGJyYWtpbmc= 31130\ndXRhcg== 31131\nIOyEuOs= 31132\ndWJs 31133\nIMO8eg== 31134\nIG1hamVzdHk= 31135\nIGJlcnM= 31136\ndXRhYmxl 31137\nIGhvdHRlcg== 31138\n24zZhg== 31139\nIGJpYXNlcw== 31140\nIHN1YmplY3RlZA== 31141\nIG5hdWdodHk= 31142\nIGNpcmN1cw== 31143\nIEltbWVkaQ== 31144\nIFN0ZWZhbg== 31145\nIFRyaXBsZQ== 31146\nZW5r 31147\nIHdpdA== 31148\nIHJlY3ljbGU= 31149\nZW1pZQ== 31150\nZGF0ZWQ= 31151\nIHVubG9hZA== 31152\nIHBvcHVsYQ== 31153\nY2hpbg== 31154\nIHlpZWxkcw== 31155\nIGVuZ2xpc2g= 31156\nIEJvbm5pZQ== 31157\nIHNwaWRlcnM= 31158\nw4E= 31159\nIGVyb3Npb24= 31160\nIE5JQ0s= 31161\n0LjRj9GF 31162\nIGltcGFydA== 31163\nINC60L3QuA== 31164\nIHJlc29sdXRpb25z 31165\nIGxpdGhpdW0= 31166\nIGNvbnZlcmdlbmNl 31167\nIFRhcmE= 31168\nINC00LLQtQ== 31169\ndGhz 31170\nIENpbmR5 31171\nIERJRQ== 31172\nIGFzc3VyYW5jZQ== 31173\nINC+0L/QuNGB 31174\nIGJ1Y2tldHM= 31175\nIGN1ZXM= 31176\nIFF1aWV0 31177\nIHNpbWlsYXJpdHk= 31178\nIGZvdW5kYXRpb25hbA== 31179\nIE1pbmlzdA== 31180\nIHBpYW4= 31181\nIGNlbnRy 31182\nIG51bWI= 31183\nIG1vbmtz 31184\ndWpvdXJk 31185\nZW56aWU= 31186\nIHNrYXRlYm9hcmQ= 31187\nIGRsYXRlZ28= 31188\nINGB0L7Rgg== 31189\nIEFF 31190\nIG1hc3RlcnBpZWNl 31191\nIFNvbG9tb24= 31192\nIFJlZGRpdA== 31193\nIHJpb3Q= 31194\nYWJs 31195\nIEpheno= 31196\nIGVsZWN0cm9tYWduZXRpYw== 31197\nIGluc2VjdXJl 31198\nIENvbXBldA== 31199\nZ2VyaWVz 31200\n0L7QsdC+0LQ= 31201\noNeV 31202\n8J+S 31203\nIHNlbmF0b3Jz 31204\nIEJyaXNiYW5l 31205\nIEFsYg== 31206\ndXR0ZXJpbmc= 31207\nIEFsbG93 31208\nemVybw== 31209\nIHBhaQ== 31210\nINCQ0LvQtdC60YE= 31211\nIERpc3BsYXk= 31212\nIEJsYWRl 31213\nIEFwcHM= 31214\nIHDDpA== 31215\nINC00LXRgdGP 31216\nIHF1ZWxsYQ== 31217\nIEdhbw== 31218\n0LXQvdC90YvRhQ== 31219\nIHNwb2lsZXJz 31220\nIGdhbGxvbnM= 31221\nINmE2Yo= 31222\nIFppb24= 31223\nb25pZQ== 31224\ncmFndA== 31225\nIENoYW5k 31226\nIOuzkQ== 31227\nIGJsdW50 31228\nIHVzdQ== 31229\nIEthZA== 31230\ncmFrdA== 31231\nIGNpbmVtYXRpYw== 31232\nIGFtbXVuaXRpb24= 31233\ncmVuZQ== 31234\nIGZvdXJ0ZWVu 31235\nIENhcm4= 31236\nY3JpdA== 31237\nIHRlbnVyZQ== 31238\ndnU= 31239\nIHByaW5jaXBhbG1lbnRl 31240\nIGFsbGVlbg== 31241\nIGtvbXBsZXR0 31242\nIGTDvG55 31243\nSmFtZXM= 31244\nIHJlY2VwdG9y 31245\nIG9uZXNlbGY= 31246\nZ3VydQ== 31247\nIG1lcmNoYW50 31248\nbGluZXNz 31249\nIG92ZXJsb29rZWQ= 31250\nIGhhcm1vbmlj 31251\naWVzbw== 31252\n15XXng== 31253\nY29sbQ== 31254\nINC/0YDQvtC10LrRgg== 31255\nIEFkYQ== 31256\n2KfYsw== 31257\nVGlt 31258\nIHJlY3VycmluZw== 31259\nIHByb2NlZWRz 31260\nIFBhcnRpY3VsYXJseQ== 31261\nIERvd25sb2Fk 31262\nZXRyaWNhbA== 31263\nIG1hdHJpY2Vz 31264\nIHByb3llY3Rv 31265\nYW5jaWVz 31266\nIFVobQ== 31267\nIGNhdmVz 31268\nIOyWtOugpA== 31269\nIExlYWY= 31270\nINC+0LHRi9GH 31271\nIOydtOycoA== 31272\nRXVyb3Bl 31273\nIHTEhQ== 31274\nIHB1bHM= 31275\nIHRha2llZ28= 31276\n0J3QtQ== 31277\nR1U= 31278\nIGZvcnM= 31279\nz4HOsw== 31280\nIGZvdG9z 31281\nICkp 31282\nIOuppOs= 31283\nIGFxdWlsbw== 31284\nIEt1cmQ= 31285\n77iP 31286\ncHRpYw== 31287\nIERvcnQ= 31288\nIG1pc2VyeQ== 31289\nYXVzbw== 31290\nY2h1Y2tsaW5n 31291\nIFJpZGdl 31292\nIO2WiOyKteuLiOuLpA== 31293\nICoqKg== 31294\nIEhtbW0= 31295\nIGdlb2dyYXBoaWM= 31296\nIGFueXM= 31297\nIHRhbHZleg== 31298\nIHNrZWxldA== 31299\nIHNpZ25hdHVyZXM= 31300\nIGxpdGVycw== 31301\nkOuptA== 31302\nINGB0LLQvtC10LPQvg== 31303\nIHNraWluZw== 31304\nINCc0L7RgQ== 31305\nIGFkb3B0aW5n 31306\nIGhhZnQ= 31307\nIHN5bW1ldHJpYw== 31308\nIExpcXU= 31309\nIHRoeXJvaWQ= 31310\nIG1pc2lu 31311\nbHVkZQ== 31312\nIGh1bGw= 31313\nIFhE 31314\nIEd1c3Q= 31315\nemVpY2g= 31316\nIHZpYnJhdGlvbnM= 31317\nIGVzZW1w 31318\nINCy0YHRjg== 31319\nIFF1ZW0= 31320\nIMO8YnJpZw== 31321\nIFNrZQ== 31322\nIEx5bmNo 31323\ncm9vbXM= 31324\nYXJ0ZXQ= 31325\nZmVzdA== 31326\nIGZyw7xoZXI= 31327\nIGx1cmU= 31328\nIOyVjOyVhA== 31329\nIFdJTg== 31330\nIFJZQU4= 31331\nINC60L7RgtC+0YDRg9GO 31332\nIEthc2g= 31333\nINeU154= 31334\nIHNhZmVn 31335\nIEhhbGxlbHVqYWg= 31336\nINC00LLRg9GF 31337\nIHN0YXBsZQ== 31338\nIHNlZGltZW50 31339\nIEFjdHM= 31340\nIGJsYW1pbmc= 31341\nIG1haW5sYW5k 31342\nIHNwb3J0aW5n 31343\nIGRlY29yYXRpb25z 31344\nIGV4ZWN1dGluZw== 31345\nIHBhcmFu 31346\nIERvbGxhcg== 31347\nIHByb2plY3Rpb25z 31348\nIGNvbW1pc3Npb25lZA== 31349\nIGJvdXI= 31350\nw7Zt 31351\nIHN0ZWFtZWQ= 31352\nIOutmA== 31353\nIHBldHJvbA== 31354\nIGNlbHVsYXI= 31355\nIEh1bmdhcnk= 31356\nIHJlbnRlZA== 31357\nINCy0LDRgNC4 31358\nYmJpZQ== 31359\nIHPDqWN1cg== 31360\nw7xsbA== 31361\nIHN3aW5ncw== 31362\nYmV0d2Vlbg== 31363\nINC40YI= 31364\nZXN0cm8= 31365\nIG5pZW1hbmQ= 31366\nIOyCvA== 31367\nIFBhcmRvbg== 31368\nZXNzZXM= 31369\nIE1JRA== 31370\nIGNlbnRyYWxpemVk 31371\nIEFsaWVu 31372\nY3Vsb3M= 31373\nIGNyaXNl 31374\nIGNsYXNzZQ== 31375\nYmVpdGV0 31376\nacSfaQ== 31377\nIHdoYWxlcw== 31378\nIHBlcmltZXRlcg== 31379\nIHR5aW5n 31380\nIHN0cm9ueQ== 31381\nIGxpa2V3aXNl 31382\nIFB1bmNo 31383\nRGE= 31384\nIEJhcHRpc3Q= 31385\nIHNvcnRpbmc= 31386\nIGl2 31387\nIO2VqQ== 31388\nIHJlaGFi 31389\nIGV0YQ== 31390\ncml2ZXI= 31391\nIHNhaQ== 31392\nb2R1cw== 31393\nIGVzc2F5ZXI= 31394\nIHR1cnRsZXM= 31395\nIEhhenJhdA== 31396\nIGZhYnJpY3M= 31397\nIGNhdml0eQ== 31398\nIHBvbmlld2HFvA== 31399\nIHNjaGxlY2h0 31400\nIHNhbHNh 31401\nxZ9la2vDvHI= 31402\nIHNlYXRpbmc= 31403\nIGVjb25vbWlzdHM= 31404\nIG1hbmc= 31405\nIHNlZ3VpbnRl 31406\nIHJhbmc= 31407\nIHJhdGlvcw== 31408\nIGNvbnN0ZWxs 31409\nIGxvbmd0ZW1wcw== 31410\ndWF0aW5n 31411\nIHNwb2lsZWQ= 31412\nIHJlY2lwaWVudHM= 31413\nIHNuaXBlcg== 31414\n7Iq164uI6rmM 31415\nIHdw 31416\nIExJTktF 31417\nIGZsYXJl 31418\nIEFkcmk= 31419\nw7Fhcw== 31420\nIGJhY2ts 31421\nbcOkw58= 31422\nIEJlbmQ= 31423\nIHdvcmtsb2Fkcw== 31424\nINGB0YPQvw== 31425\nIDE5NzU= 31426\n0LjQvNGB0Y8= 31427\n0LDQvdC1 31428\nINC80L7QvQ== 31429\nIGFzcGlyYXRpb25z 31430\nIEFlcg== 31431\nINCz0L7QstC+0YDQuNGC0Yw= 31432\nIFFpYW4= 31433\nIGNvbXByb21pc2Vk 31434\nIHlvbGs= 31435\n0LvQsNGB0YI= 31436\nIGhlbWVu 31437\ncm92ZQ== 31438\nZGVucw== 31439\nINC60L7QvNC80LXQvdGC 31440\nIC0tLQ== 31441\nIGZsdW9yZXM= 31442\n0L3QvtGB 31443\nIExpdmVycG9vbA== 31444\nINGB0L7QsdC+0Lk= 31445\nIFp3ZQ== 31446\nIGx1bWlu 31447\nIE9H 31448\n4bg= 31449\naG9sbQ== 31450\ncHJvZml0cw== 31451\nU04= 31452\nIHByb3BvcnRpb25z 31453\nIG1pY2E= 31454\nIEJvaA== 31455\nIEF0bGFz 31456\nIHVuc3VyZQ== 31457\nIHRvdXJpbmc= 31458\nIG5pZWQ= 31459\nIHTEmQ== 31460\nIGltcGVyYXRpdmU= 31461\nIGRlbWVr 31462\nIFNoZXJpZmY= 31463\ncmFuY2U= 31464\nIGhvbWVsYW5k 31465\nIEhhaWw= 31466\nIEdhbno= 31467\neW1t 31468\nTW9u 31469\ndmlkYQ== 31470\nIGRlc2Fycm9sbA== 31471\nIGludHJpZ3Vpbmc= 31472\nIEh1Z28= 31473\n6aw= 31474\n0LDRhg== 31475\nIFdpxJlj 31476\nYXR0ZWQ= 31477\nIOyVhOuLiOqzoA== 31478\nIFZhcmk= 31479\nw6Fk 31480\nIHN1cnJlYWw= 31481\nIGRpc3Bhcml0aWVz 31482\nIG3Dsw== 31483\ndWxsZW4= 31484\nIOyeiOuLpOqzoA== 31485\nINC/0L7QttCw0LvRg9C50YHRgtCw 31486\nIG1haW5z 31487\nIGVqZWN0 31488\nIG1ldGhhbmU= 31489\nIG1hcmdpbmFsaXplZA== 31490\nIGNoaWxsaQ== 31491\ncsOocw== 31492\nIHllbQ== 31493\nIENodW4= 31494\nIGRlYnRz 31495\nIGRvd25sb2FkaW5n 31496\nIEF0aGVucw== 31497\naXNpZXJ1bmc= 31498\ncnlu 31499\nIHRla24= 31500\nIFF1aW5kaQ== 31501\nIHRhcmFm 31502\nIGjDqQ== 31503\nIGNvbnNjaW91c2x5 31504\nIGZpeGVz 31505\ndWNrbGU= 31506\nbWF5xLFu 31507\nIGZyZWk= 31508\nIHNwYQ== 31509\nIOynhO2WiQ== 31510\nINin2YTYsA== 31511\nINGD0Lo= 31512\nbGV0dA== 31513\nIG9sbXXFnw== 31514\nIGNoZWVzeQ== 31515\n4Liy4LiB 31516\nbmFpcmU= 31517\nIHdpZGVu 31518\nIGxpZW4= 31519\nIGVzY2FwaW5n 31520\naWdncw== 31521\nIEJsaWNr 31522\nY8SF 31523\nIOyEnOs= 31524\nINeU16E= 31525\nINCy0L/QtdGA 31526\nb3Bob25l 31527\naWVsbA== 31528\nIFNVQlNDUkk= 31529\nIGxpb25z 31530\nIOq3uOqygw== 31531\nIGluc3BpcmVz 31532\nIGd1YXJhbnRlZXM= 31533\nIGNvbWXDp2E= 31534\nIEdyb3dpbmc= 31535\nIG5lZ2xpZw== 31536\nIEZyYW5rZg== 31537\nIGdlZ2ViZW4= 31538\nIMSR4bqndQ== 31539\nIGVuZGxpY2g= 31540\nIOyNqA== 31541\nIFRU 31542\nIExpdGg= 31543\nz4DOsQ== 31544\nYXN0ZXJu 31545\nIEF6ZXI= 31546\nIGx1bmFy 31547\naGlj 31548\nINC90LDRgNC+0LQ= 31549\nIG5lbmh1bQ== 31550\nIFNhbHZhZG9y 31551\nIFByb2dyZXNz 31552\nIHByaXZpbGVnZXM= 31553\nIOuPmeyViA== 31554\nIGFudGFnb24= 31555\nIEltcGY= 31556\nIGRlc2N1Yg== 31557\nIExlaQ== 31558\nIOyDiOuhnA== 31559\n0YfQtQ== 31560\nIGTDs2xhcmVz 31561\nIE1lZ2hhbg== 31562\nIFdpcmU= 31563\ndG9v 31564\nYXlpbmc= 31565\ndXNj 31566\nIHR1ZA== 31567\nIGFwcGVhbHM= 31568\nZWR1Yw== 31569\nIHBhbmU= 31570\nIGpp 31571\nIGRlY2tz 31572\nIEFsdGVy 31573\n7ISk 31574\nIHByb2R1Y3Rpb25z 31575\nIFdJTExJQU0= 31576\nIGltcGxpZWQ= 31577\nIGZ1bGZpbGxtZW50 31578\nIEFhaA== 31579\nIHNhamE= 31580\neHVz 31581\nIM6azrHOuQ== 31582\nw6Bz 31583\ndWNjaA== 31584\n0L7QutC+ 31585\nIERpc2NvcmQ= 31586\nIFNZ 31587\nanNr 31588\nIFdhbGxhY2U= 31589\ndW5jdGlvbg== 31590\nRGFuaWVs 31591\nIGvDtnQ= 31592\naWphaA== 31593\nIG1hcmNoZQ== 31594\nIGRpc2dy 31595\nIG11bmdraW4= 31596\nIGFsbWE= 31597\ns7U= 31598\nIGV4dGVuc2l2ZWx5 31599\nIEZsb3Jlbg== 31600\nIEFsbGlzb24= 31601\n2YrZhQ== 31602\nIGp1dmVu 31603\nIFJlbmFpc3NhbmNl 31604\nIGZ1bmRyYWlzaW5n 31605\nIENoYW9z 31606\nIHBhcmFseQ== 31607\nIG5hcnJhdG9y 31608\nIGVjb3N5c3RlbXM= 31609\nQXNo 31610\nIG1pdGlnYXRpb24= 31611\nIEF1am91cmQ= 31612\nIElkZWU= 31613\nISw= 31614\nIMK9 31615\nIGxhbmRsb3Jk 31616\nIGRlZmVjdHM= 31617\nIGFjcmU= 31618\ndWxzaXZl 31619\nIGFsZ2Fl 31620\ncGVr 31621\nIGVtYmE= 31622\nIFJvYw== 31623\na3NvbQ== 31624\nw6RjaGU= 31625\nIGxldWs= 31626\nIGxldmVyYWdpbmc= 31627\nIOq3uOugh+yngA== 31628\nIFBhbG0= 31629\nIMOkdmVu 31630\nIGxpcw== 31631\nIEluc3A= 31632\nIFJpdGE= 31633\nIEFiYg== 31634\naXRobQ== 31635\nIHN1cGVydmlzaW9u 31636\nIHJldmlzaXQ= 31637\nIHBpxJk= 31638\nIGV1aA== 31639\nIGZhZGVz 31640\nIG1vdHRv 31641\n0LXQt9C2 31642\nIFNoaW0= 31643\nIHJlbGV2YW5jZQ== 31644\nIG9v 31645\nIG9zdGF0 31646\nbmljYQ== 31647\nIGNob2l4 31648\nIEZhY3VsdHk= 31649\nIOykkeyXkA== 31650\nIEFib3Zl 31651\nINC90LXQsdC+0LvRjNGI 31652\nIHNlcXVlbmNpbmc= 31653\nIG51dHJpZW50 31654\nIGNvbnF1ZXJlZA== 31655\nIGRpZ2VzdGl2ZQ== 31656\nIGJhY2tkcm9w 31657\nIExvcmk= 31658\nYWlsYWJsZQ== 31659\nR2FtZQ== 31660\nIG5lZ2xlY3RlZA== 31661\nb21vcnBo 31662\naWxsYWg= 31663\nIGtuZQ== 31664\nIHNpaXTDpA== 31665\nIHdvcmtzcGFjZQ== 31666\nIFZlbmljZQ== 31667\nIEtuZQ== 31668\n0YnQvg== 31669\nhYA= 31670\nIEhhc3M= 31671\nIHZpdGE= 31672\nnbzrqbQ= 31673\nIGxheXM= 31674\nw6puY2lhcw== 31675\nw6lyaWNh 31676\nIExs 31677\nIENvY2E= 31678\nIFdIWQ== 31679\nIHJvdXRpbmc= 31680\nIHBlcm1pc3Npb25z 31681\nIGRpbmdz 31682\ncHJlbmQ= 31683\ncHJvZ3JhbQ== 31684\nIGNyb2NvZA== 31685\nYnJhbA== 31686\nQUFBQUFBQUE= 31687\nYWdpdA== 31688\nIE7DpA== 31689\nIGdla29tbWVu 31690\nYXR0ZW4= 31691\nIHJlZmVyZW5jZWQ= 31692\nIHBhaXJpbmc= 31693\nIFBhcnRuZXI= 31694\nIENvcm9uYXZpcnVz 31695\n0ZbRgQ== 31696\nINeU15M= 31697\nIGVzcGVjw61maWM= 31698\nYXJzaQ== 31699\ncXVlbGxl 31700\nIHNwb250YW5lb3Vz 31701\nIOqyg+ydhA== 31702\nINCf0L7RgdC70LU= 31703\nINin2YTYrw== 31704\nIFNob3V0 31705\nINC90LDQuw== 31706\nIGRpc2d1aXNl 31707\nIEpvcmQ= 31708\nIHdlZQ== 31709\nIG1pZWpzYw== 31710\nIHNlcnVt 31711\nIHBsYWlzaXI= 31712\nIGNyZWRpYmxl 31713\nIGLDpQ== 31714\nIEFK 31715\nbWFyZXM= 31716\nIHJvZHM= 31717\nIGVyYW4= 31718\nIHDDpMOk 31719\nIFVB 31720\nIFVua25vd24= 31721\nINmE2YU= 31722\nIFJhYmJp 31723\nIGxhYXQ= 31724\nIGhhaXJzdHlsZQ== 31725\nINi6 31726\nIGNhY2g= 31727\nIFdyaXRpbmc= 31728\n0L7Rh9C60Lg= 31729\nYWJhZA== 31730\nIHN0cmFpZ2h0ZW4= 31731\nLS0i 31732\nd2lmZQ== 31733\nIGhvdHRlc3Q= 31734\nIHB1bnlh 31735\nIEZhc2hpb24= 31736\nZ3JpZmY= 31737\nIFFS 31738\nb3RjaA== 31739\nINCc0L7QttC10YI= 31740\nQ2xvdWQ= 31741\nIFN0cmlrZQ== 31742\nIEhlaW4= 31743\nIGxlaQ== 31744\nIEZsb3c= 31745\nd2Vncw== 31746\nIGhhYnI= 31747\nbmFobWU= 31748\nzIE= 31749\nIHBsZWFzaW5n 31750\nb3BwaW5n 31751\nIOq1rOuPhQ== 31752\nIGRyYW4= 31753\nIGJhbmdz 31754\nIDc5 31755\nIHNrZXQ= 31756\nIGNhdmFs 31757\nIE1hY3Jvbg== 31758\nIHdlaWdodGVk 31759\nIG11dGVk 31760\nIG51ZXN0cmFz 31761\nRUVQ 31762\nIG1hdGhlbWF0aWM= 31763\nIE1SSQ== 31764\nYWd1cw== 31765\nIHRoZXJhcGllcw== 31766\nzrjOtQ== 31767\nIHVucGw= 31768\nIGNvbW1lbmNlcg== 31769\nZnVsbA== 31770\nIHRvd2Vscw== 31771\nIHBydWU= 31772\nIGxpY2Vuc2Vz 31773\n15vXldec 31774\nINCf0L7Rh9C10LzRgw== 31775\nIHBvaW50bGVzcw== 31776\nQnll 31777\nIGVsaWdpYmlsaXR5 31778\nIHNjcmFwZQ== 31779\nIGFidXNpdmU= 31780\nIE1hbnQ= 31781\nIGpldW5lcw== 31782\ndGFs 31783\nIFByaW5jaXA= 31784\nIE9ydGhvZG94 31785\nIG1lbG9k 31786\nINC80LDRgtC10YDQuA== 31787\nIHByb3NlY3V0b3I= 31788\nIG9waW9pZA== 31789\nINGD0LLQtdGA 31790\nIEJlZW4= 31791\nIOygkeyihQ== 31792\nIGR5bmFzdHk= 31793\nIGFqdWRh 31794\nIGVudHJlZw== 31795\nIHdlaWdoZWQ= 31796\nIGV1cmU= 31797\nIEJlbQ== 31798\nIGFibm9ybWFs 31799\nODI= 31800\nIEpS 31801\nIEFrdA== 31802\nIEJyaQ== 31803\nw7p0 31804\nIHN0YWdu 31805\nISo= 31806\nIHdlZ2Vu 31807\nIGxlYWtpbmc= 31808\nIFdvcmRz 31809\nIE1hdQ== 31810\nIHZ1ZQ== 31811\nIExpYW0= 31812\n0LDQvdC40LXQvA== 31813\nIGNsaW5pY2lhbnM= 31814\nIFB1bXA= 31815\nIGbDtnJzdA== 31816\nPy4uLg== 31817\nIGF1dG9tb3RpdmU= 31818\nIE93ZW4= 31819\nenVzYWdlbg== 31820\nIEh1bmRyZWQ= 31821\nIGRlY2VudHJhbGl6ZWQ= 31822\nIGJ1bGJz 31823\nINec15s= 31824\nIHByb3ZpbmNlcw== 31825\nIE1pbGFu 31826\nODE= 31827\na2Fz 31828\nIOuTow== 31829\nIGZvcsOnYQ== 31830\nIHJpZ2h0bHk= 31831\ncsSF 31832\nIHZlbnVlcw== 31833\nIHdhaQ== 31834\nIHByZWRpY3Rpbmc= 31835\nIFdpRmk= 31836\nIOq2geq4iA== 31837\n2LHZiA== 31838\nINeU15Y= 31839\nY2VudHVyeQ== 31840\nIGdyYWR1YWw= 31841\nIFByb2JsZW1l 31842\nIOyXhQ== 31843\nIGNvcGluZw== 31844\nIEJydXM= 31845\nIHBlYW51dHM= 31846\naXJ0c2NoYWZ0 31847\nINC30LDQuw== 31848\nIFRyb3k= 31849\nIHNwZXJt 31850\nIE1pdGFy 31851\nIFTDvHJraXll 31852\nZ3JhbmQ= 31853\npq0= 31854\nINee16E= 31855\nIHBhbnM= 31856\nIEtub3dsZWRnZQ== 31857\nYmVybHk= 31858\nINCV0LPQvg== 31859\nIGRhbmNlZA== 31860\nIEZyb3N0 31861\nIEJ1cmc= 31862\nIGJpdGluZw== 31863\n7KCV7J2E 31864\nbWVhbA== 31865\nIGhlcm9pYw== 31866\nIG1vdGhlcmJvYXJk 31867\nIExpY2h0 31868\nbGxhbg== 31869\n0LDQudC9 31870\nINGA0Y/QtA== 31871\nIOC5gOC4 31872\nb25lbg== 31873\naXJpZQ== 31874\nQXJ0 31875\ncmFuZw== 31876\nzr3Otw== 31877\nIG5ld2Jvcm4= 31878\nIGFtaXM= 31879\nINin2YjYsQ== 31880\nIHNvcGhvbQ== 31881\nIENhcmVmdWw= 31882\nIHByb3NwZWN0cw== 31883\nZW5zZW4= 31884\nIHRocmlsbA== 31885\nIFZp4buHdA== 31886\nQWRhbQ== 31887\ncml0aW9u 31888\nZW50cmlj 31889\ndWRlbg== 31890\nIGNlcnRpZmljYXRlcw== 31891\nIGFzaGVz 31892\ncGxheWluZw== 31893\nIHNhZGVjZQ== 31894\nIG9zdA== 31895\nIGFpcnBsYW5lcw== 31896\n0YDQvtC6 31897\nb25lcg== 31898\nIG1hZ25lc2l1bQ== 31899\nIGdvZGRhbW4= 31900\nIDE5NzI= 31901\nIFNjaHVsZQ== 31902\nIHRlbWF0 31903\nIHBhcnRvdXQ= 31904\n4K+C 31905\nIGludmU= 31906\nIFNjaWVudGlzdHM= 31907\nIEh1ZHNvbg== 31908\nd2lubmluZw== 31909\nY2Vrc2lu 31910\nIGNvbmdyZXNzaW9uYWw= 31911\nb3J1 31912\nIHJvcGVz 31913\n0LLQtdC0 31914\nIG1hZHJl 31915\nIGZlcnJ5 31916\nIENvaGVu 31917\nIFByZWQ= 31918\nIHZhZ3k= 31919\nINCx0LXRgdC/ 31920\nIG11bHRpbQ== 31921\nIGRyYWluYWdl 31922\nIHNpbXVsYXRvcg== 31923\nZ2lnZ2xlcw== 31924\nIFN0YWRpdW0= 31925\n0L7QsdGJ 31926\nIG5vdGljZXM= 31927\nIGNyYXdsaW5n 31928\nIGdyb3VwZQ== 31929\nIGt0b8Wb 31930\nIFlvZ2E= 31931\nIG1lZGlkYQ== 31932\nINGF0LLQsNGC 31933\nIExpdGU= 31934\nIHJhdg== 31935\nb3JhbWE= 31936\nIGRpc2NvcmQ= 31937\nIERJUkU= 31938\nIHRlaA== 31939\nIE51cnM= 31940\nIHBpdGNoZWQ= 31941\nIGJhcmtpbmc= 31942\nIENva2U= 31943\nd2lhZA== 31944\nIHBvcHVsYXRlZA== 31945\ncGVsbGVk 31946\nINCx0L7Qsw== 31947\nIHBld25v 31948\nIEN1YmU= 31949\nIHJlY3J1aXRlZA== 31950\nIENhcmE= 31951\nxLHEn8SxbsSx 31952\naW1hdGVk 31953\nINGI0LrQvtC7 31954\naWNpb25hbA== 31955\nINC/0YDQvtGE 31956\nIGNvbnRhbWluYXRpb24= 31957\nIMO6bHRpbW9z 31958\nIGZlYXJmdWw= 31959\nIGVsZXBoYW50cw== 31960\ndXNp 31961\nIGlUdW5lcw== 31962\nIFN3YW1p 31963\n6rw= 31964\nIOyEpOuqhQ== 31965\nIFJpY2hhcmRz 31966\nIG1hZ25ldHM= 31967\nIFJpY2h0dW5n 31968\nIExlZ2lvbg== 31969\nIGtpdHR5 31970\nIGtpc3NlZA== 31971\nIHdhdGVyaW5n 31972\nIGNvbm8= 31973\nIFBhbGVzdGluZQ== 31974\naWRpcg== 31975\nIG1hemU= 31976\nIGZsdWlkcw== 31977\nIFByb2R1Y2Vy 31978\nIEtyc25h 31979\nbGFm 31980\nINeQ15U= 31981\nIG1pZXN6 31982\nIFhpbmc= 31983\nb2ludGVk 31984\nc2Vpbg== 31985\nIEZ1aw== 31986\nIERlcHJlc3Npb24= 31987\nIER1dHk= 31988\nIFBhbnRoZXI= 31989\nIHN1bmQ= 31990\nIHJlZmVyZQ== 31991\nIGV4Y2x1c2lvbg== 31992\nIG5hdmFs 31993\nIFdpbnN0b24= 31994\nIHNsb2dhbg== 31995\nIGh5cG90aGV0aWNhbA== 31996\nIGVsZXZhdGU= 31997\n66C5 31998\nIGNhYmXDp2E= 31999\nIEdlc3VuZA== 32000\nbWV0ZXI= 32001\nIOyVhOuLiOuptA== 32002\nIGNsb3VkeQ== 32003\n4oCmPw== 32004\nIFNjaHJpdHQ= 32005\nIEpT 32006\n7I0= 32007\nIFNwcmluZ3M= 32008\nIEJhdHRlcg== 32009\nt7A= 32010\nIHRhaWxvcg== 32011\nIFBUU0Q= 32012\nIEdlbnQ= 32013\nIGJhxJ8= 32014\nIHNwYXR1bGE= 32015\nIGNyYXk= 32016\nIExlZ2lzbA== 32017\nIHPDug== 32018\nIGxldmU= 32019\n4Liy4Lih 32020\nIGVyYWQ= 32021\nIGRvbmc= 32022\nIGRlcm0= 32023\nIEJhbmtz 32024\naWNobw== 32025\nIEZyYW56 32026\ncmF2ZWw= 32027\n0L7Qu9C+ 32028\nIGZsdXRl 32029\nIEVr 32030\nIGpveWZ1bA== 32031\nIGNoYXNlZA== 32032\nIExhcmdl 32033\nT3Zlcg== 32034\nIGVudHJlcHJlbmV1cmlhbA== 32035\nIGNvbnNpZGVycw== 32036\n0YPQtdC8 32037\nb3Bh 32038\nIGRvcm1pcg== 32039\nIEVsZW1lbnRhcnk= 32040\nIHByenlwYWQ= 32041\n0YPRgdC60LA= 32042\nINC+0YfQtdGA 32043\ndWdlbmU= 32044\nIHRlbmlkbw== 32045\nIGx1Z2FyZXM= 32046\n66U= 32047\nINGH0LDRgdGC 32048\nIHNhbw== 32049\nIGJyYWlk 32050\nIFZlcmU= 32051\nIFJlaWNo 32052\nIFBvc3M= 32053\nIGluYW4= 32054\nd2FuZA== 32055\ncmVm 32056\nIG1vbnRyZXI= 32057\nIDE5ODE= 32058\nYXPEsW5kYQ== 32059\nIGNocm9tZQ== 32060\nIFRyaW5pdHk= 32061\nIGV4cGxvaXRhdGlvbg== 32062\nIFNlbnNl 32063\nIENNUw== 32064\nIE5vYmxl 32065\nIOyEoO2DnQ== 32066\nIHN3ZWxsaW5n 32067\nZWxlY3Ryb25pYw== 32068\nXT8= 32069\nIGJydXNoaW5n 32070\nIGxpcXVpZGl0eQ== 32071\nIEhvb2s= 32072\nIENvbm5vcg== 32073\nIEFsdW0= 32074\nIGd1Y2tlbg== 32075\nc3VpdGU= 32076\nIHdpZWxl 32077\nIGJhcnJlbHM= 32078\nIFJlZ2Vs 32079\nIE1lbnQ= 32080\nIFRyaXA= 32081\nIEJydXNo 32082\nIEVyaWs= 32083\ndXJhdGU= 32084\nyZly 32085\nIEN5cg== 32086\nb3VibGU= 32087\nIEJlY2Nh 32088\nIHBhc3N3b3Jkcw== 32089\nxbE= 32090\nYm9yZw== 32091\nIHZlbmRv 32092\nIENsYXVz 32093\nIEZheg== 32094\naW5kZXN0 32095\nIGRlY2Vhc2Vk 32096\nIGNvbXBhcmlzb25z 32097\nIExDRA== 32098\nIFBvcms= 32099\nIGV2ZW50dWFs 32100\nIHBhdHJlb24= 32101\nIGluYWJpbGl0eQ== 32102\nIGV4dGluY3Rpb24= 32103\nIOyii+yVhO2VmOuKlA== 32104\nINGB0L7RgQ== 32105\nYWp1 32106\nINeR15DX 32107\nIHNvZm9ydA== 32108\nIGRlc3RpbmVk 32109\nIFJpbg== 32110\nIG1vdXRocw== 32111\nIE5hdMO8cmxpY2g= 32112\nIHByZXNlcnZpbmc= 32113\nIGxpbXA= 32114\nb2N1c2Vk 32115\n0LjQvdCz 32116\nIGV4cG9zaW5n 32117\nIM6+ 32118\n640= 32119\nbGF1Z2g= 32120\nIGhpc3M= 32121\nIGluZGll 32122\nIGRldGFs 32123\n0YDQsNCy0YHRgtCy 32124\nIHRyw6pu 32125\nIG9nbmk= 32126\nIHNpbXBsZW1lbnRl 32127\nIDE5Nzg= 32128\nIGdvbw== 32129\nIDE5Njc= 32130\nIGdlbnVn 32131\naMO2 32132\nIGhpc3TDsw== 32133\nIGxvYnN0ZXI= 32134\nY2VuZG8= 32135\nIHRlaWw= 32136\nIGFsbGV2aQ== 32137\nMDAwMA== 32138\nT0xE 32139\nIHBlc29z 32140\nIGJvbnVzZXM= 32141\nIGFtaQ== 32142\nIHJldml2YWw= 32143\nIEhvcnNl 32144\nIHNhY2s= 32145\nVGFsaw== 32146\nIG11bGhlcg== 32147\nINC/0L7RgdGC0L7Rj9C9 32148\nIEhvb2Q= 32149\nSHVo 32150\nIOu2gQ== 32151\nIGh5dW5n 32152\nIE1lZXRpbmc= 32153\nIGltcG9ydGE= 32154\nIOywvuyVhA== 32155\nIFZlcm4= 32156\nIHN0cmlwcGVk 32157\nIHJlZnVzZXM= 32158\nIHF1YWxpZmljYXRpb25z 32159\nb3Bs 32160\ngOuPhA== 32161\naXjDrQ== 32162\nIGRpYWI= 32163\naXRpbWU= 32164\nZmxvd3M= 32165\nIGluYWM= 32166\nIEdvbmc= 32167\nIG1lYW5pbmdsZXNz 32168\nIGNvdXJhZ2VvdXM= 32169\nIG1pY3JvYmk= 32170\nYXp5 32171\naGlzdA== 32172\nIHZvbHVudGVlcmluZw== 32173\nVklF 32174\nIHZpb2xhdGVk 32175\nIHN5bXBhdGh5 32176\nIEVkaXQ= 32177\nZWxlY3RyaWM= 32178\ncHJvZHVjdA== 32179\nIHBhbmRlbWlh 32180\nIGdlb21ldHJpYw== 32181\nIENvbnZlcnM= 32182\nZ3Jl 32183\nIGdsdXQ= 32184\naXN0ZWQ= 32185\nINin2YTZgw== 32186\nIENoYWlu 32187\nIFByZXNlbnQ= 32188\nIFlpbg== 32189\nINGB0L7Qsw== 32190\nIFZsb2c= 32191\nIOyWtOuouA== 32192\nIGRvbm4= 32193\nIGhpdGNo 32194\ndWNraW5n 32195\nd2FsZA== 32196\ncmlzaw== 32197\nIGhhcmk= 32198\nIEtlbnM= 32199\nIElkb2w= 32200\nINCy0L3QuNC80LDQvdC40LU= 32201\nIHRvZGQ= 32202\nIHNtYXNoZWQ= 32203\nIGludmFyaQ== 32204\nINC60L7QvdGC0YA= 32205\nIGF1dGlzdGlj 32206\n7J6l64uY 32207\nUmVz 32208\n0LTRiw== 32209\nY2hhdQ== 32210\nIHNlbHY= 32211\nIGjDpHR0ZW4= 32212\n4KS/ 32213\nIGV4cGVjdHM= 32214\nz4HOtw== 32215\nIGHDp8Sxaw== 32216\nIEhUVFA= 32217\nbGXFnw== 32218\nIHN3ZWVwaW5n 32219\nIEJldGE= 32220\nIGNvdW50ZXJwYXJ0cw== 32221\nYWJpbGU= 32222\nIFNpbXM= 32223\nQ3M= 32224\nIHJlcGFy 32225\nc3F1 32226\nIHByb3ZpbmNpYWw= 32227\nIHNoYXJlaG9sZGVycw== 32228\nIHJ1bnRlcg== 32229\nIGdlZGFjaHQ= 32230\nIFRlZW4= 32231\nIGdyYW5kcw== 32232\nYWdsZXM= 32233\nIHJvY2t5 32234\ndmVucw== 32235\nIHJpdmFscw== 32236\ndW5hbA== 32237\nIHJlYWN0cw== 32238\n66k= 32239\nIG1lcmN1cnk= 32240\nIEx1aWdp 32241\nINC+0LM= 32242\nIEpVU1Q= 32243\nIGxvZA== 32244\nIGNvcnRleA== 32245\nd2ln 32246\nIGxha2g= 32247\n7KSR7JeQ 32248\nIFZpYw== 32249\nIE11bmQ= 32250\nIG1hcHBlZA== 32251\nIERlbGw= 32252\nIERydWNr 32253\nIGxpZmVz 32254\n0LDQu9GM0L3QvtC1 32255\naXZpZHVhbA== 32256\nYWTEsW0= 32257\nIGF0cmF2 32258\nIEZsdWc= 32259\nIEtsZWlu 32260\n6rGw7JW8 32261\n4Lir4LiZ 32262\nIGFwcGxp 32263\n4K6+Pw== 32264\nw7x5b3J1bQ== 32265\nINC40L3RgtC10YDQtdGB0L3Qvg== 32266\nIGRpc2luZmVjdA== 32267\nPi0= 32268\nIGNoYW1wYWduZQ== 32269\nIGtsYQ== 32270\nb3BlcnM= 32271\nVHJhbnM= 32272\nIERlc2VydA== 32273\nIGN1bHRpdmF0ZQ== 32274\nIEZ1Y2tpbmc= 32275\naWRlbGl0eQ== 32276\nINGC0LDQvQ== 32277\nIGluY3Vi 32278\nIHRlbXU= 32279\nIGxlYXJuZXI= 32280\nZm91bmRlcg== 32281\nIFN5bA== 32282\nIGZhdG8= 32283\nemllcg== 32284\nIOyXhuydtA== 32285\nIOyIqA== 32286\nIHBzeWNobw== 32287\nINGC0LXQu9C10YQ= 32288\nIHJlZ2FyZGU= 32289\nIHJlcHJlc2VudGF0aW9ucw== 32290\nIGxpdGlnYXRpb24= 32291\nIHNwYW5u 32292\ndWx0cw== 32293\nYmlvcg== 32294\nIFN1cnZleQ== 32295\nIExFRHM= 32296\nIHRyw6Q= 32297\nIGzDqm4= 32298\nIGFudGlveGlk 32299\n0LXRgNC+0Lw= 32300\nIGluZHVjdGlvbg== 32301\nIGZvb2xlZA== 32302\nw6R0emxpY2g= 32303\nINCz0L7QstC+0YDRj9GC 32304\nIEZhY3Q= 32305\ndW1iYWk= 32306\nIHdpZ2dsZQ== 32307\nTk9VTg== 32308\nIGTDqXZlbG9wcA== 32309\nIENsYXJv 32310\nIOy4 32311\n66w= 32312\nIGFjY3VtdWxhdGU= 32313\nIG1haW50YWlucw== 32314\n64Q= 32315\nIEZpZ2h0ZXI= 32316\n7Yag 32317\nIG1hdGlu 32318\nIGNvdXBvbg== 32319\nIHN0dW50 32320\nIGRlYnV0ZWQ= 32321\nIHByYWc= 32322\n0LjQstCw0LXQvA== 32323\nNzM= 32324\nIGV4cHJlcw== 32325\nIOyYpOu5oA== 32326\nINC/0LXRgNGB0L7QvQ== 32327\nIGNhbGN1bHVz 32328\nIGFicnVwdA== 32329\nIEluc3BlY3Rvcg== 32330\nb3VydA== 32331\nxbpuaWVq 32332\naW50ZW5zZQ== 32333\nQmE= 32334\nIGxvdW5nZQ== 32335\nIGFzdGhtYQ== 32336\nIEhpw6c= 32337\nqrs= 32338\nIGVkaXRvcmlhbA== 32339\nIHNlaXpl 32340\nIGvEsXI= 32341\nIG1vdXZl 32342\nIHRpZXJyYQ== 32343\nIHRlc3Rvc3Rlcm9uZQ== 32344\nIHJo 32345\nIEtpbmdzdG9u 32346\nRUxMRQ== 32347\nIFJlcHJlc2VudGF0aXZl 32348\nIDE5NzQ= 32349\nIGliYQ== 32350\nVHM= 32351\nIHNvcnRh 32352\nICg/KQ== 32353\nINiq2Yg= 32354\nIOuCtOugpA== 32355\nIGJla29tbXQ= 32356\nIHNwaXJpdHVhbGx5 32357\nIGRpc3RvcnRlZA== 32358\nTWFk 32359\nIHJlaW0= 32360\nw6FuaA== 32361\nIE90dG9tYW4= 32362\nIFJlbGln 32363\nIEVscw== 32364\nIHJldGFpbmVk 32365\nIExhdWdocw== 32366\nIFNBUw== 32367\nINC60L7Qu9C40YfQtdGB0YLQstC+ 32368\n15XXqteo 32369\nIGlubm92YXRl 32370\nIGtvcms= 32371\nINGA0LDRgdGB0LrQsNC30YvQsg== 32372\nb25kZXJl 32373\naXZp 32374\nYXll 32375\nb3VudHk= 32376\nINC/0L7Qu9GD0YfQsNC10YLRgdGP 32377\nIGJ1bnM= 32378\nIHnDvHpkZW4= 32379\nIHN1cmdlcmllcw== 32380\n2KPZhg== 32381\nIGJhbmtydXB0Y3k= 32382\nd2VsdA== 32383\nIHNpYW1v 32384\nIGRhcmtlc3Q= 32385\nIEhhbm4= 32386\nZ2dh 32387\nIGZvcm1hcw== 32388\nIERq 32389\nbmFtZWQ= 32390\nIHNoaWVsZHM= 32391\ndWVsbGVy 32392\nIEZldw== 32393\nIGxhY2U= 32394\nIGZ1cmlvdXM= 32395\nIFlV 32396\nIHNvY2lldGFs 32397\nIGp1ZGdlbWVudA== 32398\nIERvcw== 32399\nIGphYg== 32400\nbGF3cw== 32401\nIHJlaW52ZW50 32402\nIEthdGhlcmluZQ== 32403\nIENob2k= 32404\nYWRvd3M= 32405\nIHJhbnM= 32406\nb2Rlbg== 32407\nIE1pZHdlc3Q= 32408\nbsSxbg== 32409\nIGRlcG9ydA== 32410\nIERpcA== 32411\nIGF0ZW5jacOzbg== 32412\nIENvdXJ0bmV5 32413\naXZpZGFk 32414\nINqp24E= 32415\nIGVmZmljYWN5 32416\nIEJyb29rcw== 32417\nIHJlZmVycmFs 32418\nINC60L7QvdGG 32419\nIG1hbGljaW91cw== 32420\nIGtpcg== 32421\nIEdvZGRlc3M= 32422\nIGZ1bmt5 32423\nIGludGVyaW0= 32424\nIEvDtnJwZXI= 32425\nIOyWvOun 32426\na3Vy 32427\nINC60LvQuA== 32428\nIHRydWNz 32429\nZ2VzZXR6 32430\nIHp1Zw== 32431\nIEdsw7xjaw== 32432\nIE1pbnV0ZQ== 32433\nIHByZXN0aWdpb3Vz 32434\nIG5pZXo= 32435\nIGNvbmNlbnRyYXRpb25z 32436\n0LvQsNGB0YLQuA== 32437\nIFNpcw== 32438\nIFZpdGFtaW4= 32439\na292 32440\nIFBCUw== 32441\nINC90LXQtQ== 32442\nIHJldGFpbGVycw== 32443\nIGNvbnZlbnRpb25z 32444\nIFNhbWFudGhh 32445\nIHByb3VkbHk= 32446\nSm9yZGFu 32447\nIEpBU09O 32448\nYXRr 32449\nIHRyaXN0ZQ== 32450\nIHN0w6Ry 32451\nIHJlaXRlcmF0ZQ== 32452\nIHBvc3Rlcmlvcg== 32453\nIDE5NzM= 32454\nIFBpbmU= 32455\nIEp1bGlldA== 32456\nIHBlZGly 32457\na2ls 32458\nIG92ZXJsYXBwaW5n 32459\nIGV4Y2x1ZGU= 32460\nIGVjb27Ds20= 32461\nIGFjY2VwdHM= 32462\nIFN0ZXI= 32463\nIOyatOuPmQ== 32464\nZXN0YWI= 32465\nIHR1Zw== 32466\nYXJn 32467\nIGxpdnJv 32468\n2KfYtQ== 32469\nIHNlYW1z 32470\nIGJ1cmF5YQ== 32471\nIGVsbG8= 32472\nIFRN 32473\nIFBhdw== 32474\nIEluZGV4 32475\nRXhj 32476\nIGluc3BpcmF0aW9uYWw= 32477\nIGR1bms= 32478\nYWt0ZXI= 32479\nIGNvbmRpdGlvbmVy 32480\nIFNhbHV0 32481\nxYJlYw== 32482\nIOyJvQ== 32483\nINGD0LfQvdCw 32484\nIFJvbWVv 32485\nZnJ1aXQ= 32486\nIFlP 32487\nIGNo4buJ 32488\n0LHRgw== 32489\nYm9ucw== 32490\nIHJlcHJvZHVjdGl2ZQ== 32491\nIG9yYWRh 32492\nIO2aqA== 32493\nIHRlbnRhcg== 32494\nIG1hw7FhbmE= 32495\nIHNvbHZlbnQ= 32496\nSmVzc2ljYQ== 32497\nIExlZ2Fs 32498\nIHR1YQ== 32499\nIHNpYw== 32500\nIEVR 32501\nYXVrZWU= 32502\n7Iuc64uk 32503\nIMWedQ== 32504\nIGFkaGVyZQ== 32505\nIFR1bA== 32506\nIOCuhg== 32507\nIHRleHRib29rcw== 32508\nIEZpZnRo 32509\nIGV4cGVyaQ== 32510\nIGNoaWM= 32511\nIGhlYXA= 32512\naW5lbHk= 32513\nYXRyYQ== 32514\nVHdv 32515\nIGhlbGVtYWFs 32516\nIGZyZW4= 32517\nIGJpc2hlcg== 32518\n2KfYtA== 32519\nIOyEoOyDnQ== 32520\nIFRhZ2Vz 32521\nIHPhu7E= 32522\nIGJ1bGxpZWQ= 32523\n2KQ= 32524\nIGJlbmVmaXRlZA== 32525\nIFByZXZpb3VzbHk= 32526\nINGN0YTRhA== 32527\n2Y0= 32528\nIHNlbmF0ZQ== 32529\nIE1vcm0= 32530\naWprZQ== 32531\nIEZsdQ== 32532\nIGluY29ycG9yYXRpbmc= 32533\namFjaw== 32534\nINC/0LjRgg== 32535\nIGltcGx5 32536\nIGhhY2tz 32537\nIFJJQ0g= 32538\nINC60LLQsNGA 32539\nINC/0YDQtdC60YDQsNGB 32540\nIGRlcGVuZGVuY3k= 32541\nIOyaqQ== 32542\nIOyxhQ== 32543\nIHfDpGhyZW5k 32544\nIHN1bGxh 32545\nIFBpdHRzYnVyZ2g= 32546\nIGVzZW1waW8= 32547\nvOuhnA== 32548\ncHJvdA== 32549\nIFJvc2Vu 32550\nIEluZGVwZW5kZW5jZQ== 32551\nIHBhcnNsZXk= 32552\naWVnZW4= 32553\nIGhhdw== 32554\nIGFxdWVsbA== 32555\nIENBUA== 32556\nINGA0LDQsdC+0YLQsNGC0Yw= 32557\nIENsaWZm 32558\naW9uYXI= 32559\nIHNlY3VyaW5n 32560\nzr3OtQ== 32561\nIHV0aWxpcw== 32562\nIGNvdWxl 32563\nIFBpbmc= 32564\nIHRyZWs= 32565\nIGZhaw== 32566\nIGVub3JtZQ== 32567\nIOyLqw== 32568\nIGRvdWJsaW5n 32569\nINC90YDQsNCy0LjRgtGB0Y8= 32570\nIGhlZA== 32571\naG92ZW4= 32572\nIFN0YW5kaW5n 32573\nIG3DrW4= 32574\nIEppbWlu 32575\nIG1vbmFyY2g= 32576\nIGNva2U= 32577\nIG1y 32578\nIGNsaWM= 32579\nw40= 32580\nIGltcGVhY2htZW50 32581\nIGR1cmFiaWxpdHk= 32582\nIHZhcmlvcw== 32583\nIGNvbW1lcmNpYWxz 32584\nIGdyZWV0aW5ncw== 32585\nIFJp 32586\nIEFwcHJlY2k= 32587\n7J6I64qU 32588\nIHLDqXN1bHQ= 32589\nw6lydA== 32590\nIHNhbHV0ZQ== 32591\nIHBvZGVyaWE= 32592\nIHN1bnJpc2U= 32593\ndmVjaw== 32594\nIHJlbHVjdGFudA== 32595\nIGNvbW1pc3Npb25lcg== 32596\nw6J0ZQ== 32597\nIEtlbm55 32598\nIFNpcmk= 32599\nIOuKmA== 32600\nIEVF 32601\nIHVuY2g= 32602\n0LrQvtC9 32603\nINin2YTYpQ== 32604\nIGJlbHRz 32605\nIGhhc3M= 32606\nINC80L7Rjw== 32607\nIGRpc3BsYWNlZA== 32608\nIGFicmE= 32609\nzq3Ouw== 32610\nIHNjcmF0Y2hlcw== 32611\nIGNvbWV0 32612\nIGF1dGhvcml6YXRpb24= 32613\nIExMQw== 32614\nIHByb2R1aw== 32615\nIHJlaGFiaWxpdGF0aW9u 32616\n5Z4= 32617\n0ZbRhw== 32618\ndWRpbmc= 32619\nb2xpdA== 32620\nIDEwNQ== 32621\nIGV4cGFuZHM= 32622\nIGFsdHJp 32623\nIEtvbW1lbnQ= 32624\nIGFuZg== 32625\nUGw= 32626\nIE1hbmE= 32627\nZmVk 32628\nIGJyaQ== 32629\nIG9yYQ== 32630\nR3M= 32631\nIEd1cg== 32632\ndWNrbGFuZA== 32633\nIGp1bmN0aW9u 32634\nIGlyb25pYw== 32635\nIEZlZWQ= 32636\nIHByYWt0 32637\nIEhhbW1lcg== 32638\njOuPhA== 32639\nIFRyYWN5 32640\nIEFzaWRl 32641\n0L3QtdCz0L4= 32642\nINC40YHQv9C+0LvRjNC30L7QstCw0YLRjA== 32643\nIHphag== 32644\nIGVxdWl0YWJsZQ== 32645\nIGN1cmI= 32646\nIGRlcml2YXRpdmVz 32647\nIHB1cHBpZXM= 32648\nIEtlbm5ldGg= 32649\nIENvbXBs 32650\naWdyYW0= 32651\nIEdhcmNpYQ== 32652\nKSI= 32653\nIEhhcmJvcg== 32654\nZXN0aWFs 32655\nIGVycw== 32656\n5rk= 32657\nIHVud2FudGVk 32658\nIGJlbGFuZw== 32659\n0LDQs9C+ 32660\nZW1i 32661\nZG9z 32662\nIOyZnOs= 32663\nIEJ1ZGdldA== 32664\nIGJhdHRsaW5n 32665\n2K3Yqg== 32666\na29r 32667\n0L3QsNGH0LDQu9Cw 32668\nIHBsYWc= 32669\nIGNhbnRpZGFk 32670\nIGdydXBvcw== 32671\nIHBsdWdpbnM= 32672\nbGVyaW5p 32673\nINC40LzQtdC10YI= 32674\nIHNvenVzYWdlbg== 32675\nb2xpY3M= 32676\nIHB1ZWJsbw== 32677\nIHJlbWluaXM= 32678\ncsOkbg== 32679\nIE1vcnJpc29u 32680\nIGxpbmhh 32681\nIGJyZWF0aHM= 32682\nIFRhc3Rl 32683\nIGVuZnJlbnQ= 32684\nIERvY2tlcg== 32685\nINC00LXQvQ== 32686\nIGV0aG5pY2l0eQ== 32687\nIHdvYg== 32688\nIHN1ZmZlcnM= 32689\nIHRyYW5zaXRpb25pbmc= 32690\nIFJhbmdl 32691\nxJlkenk= 32692\nINC60LDRgg== 32693\nIHN5bmVy 32694\nIGRvbnV0 32695\nIHByb2JhYmlsaXRpZXM= 32696\nIE9tYXI= 32697\nV2hpY2g= 32698\ndWlzaA== 32699\naXNpbg== 32700\nIGRlbW9z 32701\nIOyggOq4sA== 32702\nIOuYkeqwmQ== 32703\nINC10LTQuNC9 32704\nIGNlcnZl 32705\nIGpva2E= 32706\nSUFO 32707\nIGtpbG9tZXRlcg== 32708\nIGhvcml6b250YWxseQ== 32709\nIEJoYWc= 32710\nIC0+ 32711\nIE1vbml0b3I= 32712\nIGtub3dsZWRnZWFibGU= 32713\nIGZhdg== 32714\nIHBpbm5lZA== 32715\nIGVCYXk= 32716\naWNrZXI= 32717\nIOyeoOq5kOunjA== 32718\nIFhpYW9taQ== 32719\nIGNhcGl0 32720\nIG5w 32721\nIDE5NjU= 32722\naG9l 32723\nIG5vaw== 32724\nIFNhZ2U= 32725\nINC90LXQu9GM0LfRjw== 32726\nIFRvdw== 32727\nZ2Ft 32728\nIGRpY2Vu 32729\nIFNVQlNDUklCRQ== 32730\nIHJlYm9vdA== 32731\nIHBhag== 32732\nIOuztOyXrOs= 32733\nIHRoaWNrZW4= 32734\nIFJlYWxpdHk= 32735\naWTDpG4= 32736\nTmE= 32737\nIOqyg+ydgA== 32738\nISEp 32739\nIHJvdXRpbmVz 32740\nINC+0LTQvdC+0LPQvg== 32741\nIGV4dGluZw== 32742\nIOymnQ== 32743\nIHN1bGZ1cg== 32744\nIGNhcnZl 32745\nIGFzdGVyb2lk 32746\nIFdhcnJpb3I= 32747\nIHBob3RvZ3JhcGhlcnM= 32748\nIHBlbGw= 32749\nIGNyb3Nzb3Zlcg== 32750\nIGhhY2Vtb3M= 32751\nIE5lag== 32752\nIHNldHRsaW5n 32753\nIGlybQ== 32754\nIEJvb2tz 32755\naWVudMO0dA== 32756\nIGVzcGFjaW8= 32757\nIFNjaG9sYXJz 32758\nIGRvb21lZA== 32759\nIElSUw== 32760\nd29obA== 32761\nIHNlZ3Vl 32762\nIOuIhOqwgA== 32763\nIHByYXRpYw== 32764\nQlQ= 32765\nIENvbnNpZGVyaW5n 32766\nIEJ1ZmZhbG8= 32767\nIHRyYWluaW5ncw== 32768\nIGdlYnJ1 32769\nIEdsZWljaA== 32770\nIHBpcmF0ZXM= 32771\nIGVudmVsb3A= 32772\nIHJlb3Blbg== 32773\naW1hdA== 32774\nIHRlZQ== 32775\nIHN1ZWQ= 32776\nZmVo 32777\nINeU16c= 32778\nIGRpZXRz 32779\nIGp1bnRvcw== 32780\nYXN0bw== 32781\nIG1pc3VuZGVyc3Rvb2Q= 32782\nIHJ1aW0= 32783\nIGNsYXNzaWZ5 32784\nINC/0YDQvtC00YPQug== 32785\nIGluc2U= 32786\nIGlsbHVzdHJhdGVk 32787\nIGNvcnJvc2lvbg== 32788\nIGFjY3JlZA== 32789\nIEF1bnRpZQ== 32790\nINC/0YDQuNCy0LXRgg== 32791\nIExJVkU= 32792\nIHJlaw== 32793\nIHJlY2VpcHQ= 32794\nIEJhcmJpZQ== 32795\nIFNuYWtl 32796\ndHVybg== 32797\nSmVmZg== 32798\nlYQ= 32799\nVk9JQ0VPVkVS 32800\nY29sbA== 32801\nIHJ1bm5lcnM= 32802\n7KCc6w== 32803\nb3Nvcw== 32804\nbW9vbg== 32805\nIGtleW5vdGU= 32806\nIEluc3RpdA== 32807\nU1BFQUs= 32808\nIHBsdWdz 32809\nIGN1cnY= 32810\nIFl1cmk= 32811\nIFRoZXJlcw== 32812\nIFBz 32813\nIM68z4DOvw== 32814\nIGNvbnZlcnRlcg== 32815\nIHJlZmluZQ== 32816\nIGJhZGFzcw== 32817\nIM6/zrk= 32818\nIHJlZ2Vu 32819\nYXp6aQ== 32820\n2YrZgQ== 32821\nIHNlaXplZA== 32822\nIGnDp2Vy 32823\naWxlZQ== 32824\nIHVwc3RyZWFt 32825\nIGJ1ZHM= 32826\nIHBpbQ== 32827\nIO2VmOujqA== 32828\nIGFsbHVkZWQ= 32829\nIHRoZW1lZA== 32830\nIGNvbnNpc3Rpbmc= 32831\nIGJvbnM= 32832\ndW51eg== 32833\nINC/0YDQvtCy0L7QtA== 32834\nIExvdmVseQ== 32835\n4KWL 32836\nIHBhcmFjaA== 32837\nIFN0YWF0cw== 32838\nIHNlbGVjdGl2ZQ== 32839\nIGZhc2U= 32840\nIEdlb3JnZXQ= 32841\nIGNvY2FpbmU= 32842\nIHJlcHJvZHVjdGlvbg== 32843\nIExhcmE= 32844\nIExE 32845\nIGdo 32846\nSm9u 32847\nIGzDpQ== 32848\nIOuRkOs= 32849\nIHR5cGVk 32850\nIEJhbmE= 32851\n65Oc6w== 32852\nIHNhdm9yeQ== 32853\nIFpvbWI= 32854\nc3RhbmRlbg== 32855\nIHBlZGVzdHJpYW4= 32856\nIGRpZmbDqXJlbnRz 32857\nIOyLuA== 32858\nIGNvbXBsYWluZWQ= 32859\nINCa0YLQvg== 32860\nINec16Q= 32861\nYWxpxZtteQ== 32862\nIG1vcnRhcg== 32863\nIHZlcmRpY3Q= 32864\nIHN1ZmljaWVudGU= 32865\nIE1pbGxpb24= 32866\nbWl0dGVs 32867\naW5hbHM= 32868\nINin2YTYrg== 32869\n0LDRjtGB0Yw= 32870\nIG1pxJlkenk= 32871\nIE9sZQ== 32872\nIGludmVydA== 32873\nY3p5xIc= 32874\n0L7Qt9C80L7QttC90L4= 32875\nc3RhcnRlcg== 32876\nIGF1ZGl0b3I= 32877\nIFNjb3V0 32878\nY2hpZW4= 32879\nIFN2ZXJpZ2U= 32880\ndWZmbGVk 32881\nIHplaG4= 32882\nIEF1Y2tsYW5k 32883\nIGFyZ2VudA== 32884\nIDE5NzY= 32885\nIEhvZQ== 32886\nIGJvdGhlcnM= 32887\nIHNvY2lhbGlzdA== 32888\nIHBsaWVycw== 32889\nIGVtZXJnZW4= 32890\nIFhQ 32891\n0LXRgNC+0LI= 32892\nTW9yZQ== 32893\nIExldmk= 32894\nIEFuZGVycw== 32895\naWJpbGlkYWQ= 32896\nIFBhcmVudHM= 32897\nIGluZHVjZWQ= 32898\n7Ja07KQ= 32899\nIGJhbGFuY2Vz 32900\nINCy0YvRiA== 32901\nIHN1Ym1hcmluZQ== 32902\nU3RhcnQ= 32903\nIGRyaWVz 32904\nIHZvbHZlcg== 32905\nIHRpY2tpbmc= 32906\nY290dA== 32907\nIGZhag== 32908\ncHLDqXM= 32909\nIFNhYmI= 32910\nINC30LDRhw== 32911\nINC/0L7QutGD0L8= 32912\nIGJhcHRpemVk 32913\nIEJyaWxsaWFudA== 32914\nINCR0L7Qsw== 32915\nIG1vdHM= 32916\nYml0cw== 32917\nIGxhdHRpY2U= 32918\nIGNvcmlhbmRlcg== 32919\nIHJlc2lkZW5jeQ== 32920\neW5j 32921\nIHBpZXJ3c3p5 32922\nIEtub2Nr 32923\nIFphcA== 32924\nINCV0LI= 32925\n6rKs 32926\nIHVuZXZlbg== 32927\nIEphcw== 32928\nb2Rvcg== 32929\nNzQ= 32930\nIFNpdGU= 32931\nIGFjb250ZWNldQ== 32932\neW1wdA== 32933\nIHRyaWxvZ3k= 32934\nIGxhbnRlcm4= 32935\nIFp1Y2tlcg== 32936\ndmFyaQ== 32937\nd2VsbGluZw== 32938\nIFBvdGF0bw== 32939\nZ29tZXJ5 32940\nIHJlYWN0ZWQ= 32941\nIENocm9u 32942\nIGplZGU= 32943\nYmVlbGQ= 32944\nIHR3ZW50 32945\nIGxhY3Q= 32946\nIHLDqXNl 32947\nIHJlbGVudA== 32948\nIGZ1cm5hY2U= 32949\nIHdpZGdldA== 32950\nIGVhcnRocXVha2Vz 32951\nIEFkanVzdA== 32952\naWxpdA== 32953\nINij2Yg= 32954\nIGhlYXJpbmdz 32955\nIGRlZmVuZGFudA== 32956\naXJzaW5peg== 32957\nIGJhc2s= 32958\nY2ph 32959\nnKg= 32960\nIHJpZmxlcw== 32961\nIGluc3RhbA== 32962\nIEZvcmdpdmU= 32963\ncGljYWw= 32964\nINCe0YfQtdC90Yw= 32965\nIHBldGl0ZXM= 32966\nIGhw 32967\nIHJlbm93bmVk 32968\nIElubg== 32969\nIOyjvOyEuOyalA== 32970\nIGVtcGhhc2l6ZWQ= 32971\nIOyeiOyjoA== 32972\nIOqyg+ycvOuhnA== 32973\nxZM= 32974\nZ2lsaQ== 32975\nRGF2ZQ== 32976\nIGV4aGF1c3Rpbmc= 32977\nxYJ1Zw== 32978\nIHNjaGVtYQ== 32979\nzrzOrA== 32980\nY3ljbA== 32981\nIGF1dGFudA== 32982\nIHBhcmNlbA== 32983\nIG1hdGVyaWE= 32984\nIEJlcnJ5 32985\nINGB0LDQvNC4 32986\nIGV4dHJhY3RlZA== 32987\nIFNheWluZw== 32988\naXNtYXRpYw== 32989\nINC/0L7Qv9GA0L7QsQ== 32990\nIG5ldXJvbg== 32991\nZ3JhcGg= 32992\nnOuptA== 32993\nIGVuY2xvc3VyZQ== 32994\nIEpvaGFubg== 32995\nIGFmdGVybWF0aA== 32996\n0YLQvtCx 32997\nIHXFvHk= 32998\nIHNhbXA= 32999\nMzYw 33000\nIE1laQ== 33001\nIHRhY28= 33002\nIHJlY2VwdG9ycw== 33003\nIHB1bmNoZXM= 33004\nIEhvamU= 33005\nINmH2YbYpw== 33006\nPSIj 33007\nIEFuZ3VsYXI= 33008\nIG11c2lxdWU= 33009\nIHJvbA== 33010\nIMOx 33011\nc3RlcnJlaWNo 33012\nIGNsYW0= 33013\nIFRyZWFzdXJ5 33014\nY2hlbWljYWw= 33015\nIGFwYXI= 33016\nIGFwcGVuZA== 33017\nIGZvcmJpZA== 33018\nIEhhbWJ1cmc= 33019\n0LDQutC+0LI= 33020\nIOq4iA== 33021\naWxkYQ== 33022\nIHByZXBhcmF0aW9ucw== 33023\nIG1vZ8SF 33024\nIGNhbWlubw== 33025\nRXJpYw== 33026\nIEJsaW5k 33027\nIERpc2NvdmVyeQ== 33028\n7Lig 33029\nIGludGVycHJldGVy 33030\nIGJyZWQ= 33031\nIFBzYWxt 33032\nIGRlZmVuZGVk 33033\n7Ims 33034\nIEVyZmFocg== 33035\nIFBlYWNo 33036\nIG1vb25z 33037\nIE9zdA== 33038\nIHNww6ljaWFs 33039\nIGFycml2ZXI= 33040\nIFdpcw== 33041\ndWNp 33042\nIHJvYm90aWNz 33043\nSVZF 33044\nIHNpZWdl 33045\nYXJsYQ== 33046\nIHNlcGFyYXRlcw== 33047\nIFRD 33048\n7Y+w 33049\ncXVpc2l0ZQ== 33050\nIHBhcmVudGhlc2Vz 33051\n0LjQutC1 33052\nIHRyb3Vz 33053\nINGB0LjQu9GM 33054\nIGJlZXJz 33055\nINC/0LvQsNGC 33056\nIHNvbGE= 33057\nIGTDqHM= 33058\nbWluZ2hhbQ== 33059\naWt0ZQ== 33060\nIG9vcHM= 33061\nIHR3aXRjaA== 33062\nz4g= 33063\nIFNob3VsZG4= 33064\ndXZyZQ== 33065\nIGxlZXI= 33066\nY3JpcHRpb25z 33067\nIGV5ZXNoYWRvdw== 33068\nIEd1bw== 33069\nIFBvd2VsbA== 33070\nIHN1cHVlc3Rv 33071\nIGFuYQ== 33072\ncmFscw== 33073\nIE1vbnRyZWFs 33074\nIHN1cmZpbmc= 33075\nINCf0LXRgNCy 33076\n157XlQ== 33077\nIG1pbGxpc2Vjb25kcw== 33078\nIHN1YnVyYnM= 33079\nIHBsYW5ldGE= 33080\n0YPRiNC60LA= 33081\naHJsaWNo 33082\nIEhZ 33083\nINiz25I= 33084\nIE1N 33085\nIEVmZg== 33086\nIEhT 33087\nYW5zb24= 33088\nIOyngeygkQ== 33089\nIHN1bw== 33090\nIGRlcGxveWluZw== 33091\nIGt1bnQ= 33092\ndGVyaW5n 33093\nIGVyZWN0 33094\n7J6l7J20 33095\nIOydjOyLnQ== 33096\nIHNwZWNpbWVu 33097\nIS4uLg== 33098\nIGxpZ25l 33099\nIGtvbnN0 33100\nYWRlcXU= 33101\nIOyDge2DnA== 33102\nIGFjY2Vzc2Vk 33103\nIFBvbGU= 33104\na2lsbA== 33105\nIOuyhOs= 33106\nIGF1dGhlbnRpY2l0eQ== 33107\nIGFwcGVsbGU= 33108\ndWxsZQ== 33109\nIHJldmlzaW9u 33110\nIGdvYXRz 33111\n0LPQu9C4 33112\nIHBhdQ== 33113\nIFJhbmdlcg== 33114\nIEltYWc= 33115\nYXV0aG9y 33116\nIGV2ZQ== 33117\nIE1lc3Nlbmdlcg== 33118\nIG5heQ== 33119\nIHdob2xlcw== 33120\nw6R0dGU= 33121\nIG9ud2FyZHM= 33122\nIERlcG9pcw== 33123\nIO2RnO2YhA== 33124\nIFNBUlM= 33125\nIHdzenlzdGtpY2g= 33126\nIGRlc3RydQ== 33127\ndW1iaW5n 33128\nIGNvbXBhdGliaWxpdHk= 33129\nIG1pc2luZm9ybWF0aW9u 33130\nb2RvcmU= 33131\nIEZhdm9y 33132\nZWtv 33133\nj4w= 33134\nd2F1a2Vl 33135\nIFRlYWNoaW5n 33136\nIEtP 33137\nIGJldHRpbmc= 33138\nIHF1ZXN0cw== 33139\nIHZpdnJl 33140\nINC80YPQt9GL 33141\nIHNhZ2E= 33142\nIHN3ZWxs 33143\nIGdlaGU= 33144\nINC+0YDQs9Cw0L3QuNC3 33145\nIGdpZGU= 33146\nIEdyb3Nz 33147\nIGRhbGVq 33148\nIGNsYXdz 33149\n4buZYw== 33150\nIHByZWp1ZGljZQ== 33151\nIGluc2lnbg== 33152\naWhvb2Q= 33153\nIHBsZWQ= 33154\nIGTDs25kZQ== 33155\nIFBvbGl0aWNhbA== 33156\nIHByZW1pc2Vz 33157\ndW5kZXJ0 33158\n2LnYqg== 33159\nb25uZW4= 33160\nIGVzcGHDp28= 33161\nIGbDqQ== 33162\nIEhhcnJpc29u 33163\nIENlbnN1cw== 33164\nIGNhcmRpbw== 33165\nIGRpeQ== 33166\nIG1pbGlldQ== 33167\nIGpvdXJuw6ll 33168\nIFJlbGVhc2U= 33169\nTklF 33170\nIE11aw== 33171\naWTDqWU= 33172\n4buNaQ== 33173\nIGnDp2luZGU= 33174\nnpk= 33175\nIHJlc29uYXRl 33176\nIG1vbGVz 33177\nIEZseWluZw== 33178\nIEdsb3JpYQ== 33179\nIFBhc3Rvcg== 33180\nIEFyZW5h 33181\nTk9O 33182\n0L7Qu9C+0LI= 33183\nIGFsbMOt 33184\nb21hdA== 33185\n7Ja064+E 33186\nIGNhcmFjdGVyw61zdA== 33187\nIGRlY2xpbmluZw== 33188\n0ZbRjw== 33189\nYW5jbw== 33190\nIEluZm9ybQ== 33191\nIGJhcmdhaW4= 33192\nIGJ1c2hlcw== 33193\nIE5hdHVyYWxseQ== 33194\nIHJlY2h0cw== 33195\nIFRlbnNvcg== 33196\nIFBhdHJpY2lh 33197\nIHByaW5jaXBpbw== 33198\nIE11bWJhaQ== 33199\nIHdvbWI= 33200\nIG5vc3RyYQ== 33201\nIGRpbGVtbWE= 33202\nIGlyZ2VuZHdhbm4= 33203\nIDE5NjQ= 33204\nIGVuZXJnw61h 33205\nINC90LDRgA== 33206\nIHNlZ3JlZ2F0aW9u 33207\nIEF0aGxldA== 33208\nIMK7LA== 33209\nIHllbmk= 33210\nIFNlaXQ= 33211\nIHZlbm9t 33212\nIGRha2lrYQ== 33213\nIOuPjOs= 33214\nIMOJbA== 33215\nIGZ1cw== 33216\nIE1vZw== 33217\npr3ri4jri6Q= 33218\nIHJlbWFy 33219\nIFRlZGR5 33220\nIGJyZWFzdHM= 33221\naWNhbnM= 33222\na2Fw 33223\nIGjGoW4= 33224\nIEpQ 33225\nIHJlc3VycmVjdA== 33226\nIOyduOs= 33227\naGVyaWNhbA== 33228\nIGZvdG9ncmFm 33229\nIEpvc8Op 33230\nIGxpdmVsaWhvb2Q= 33231\nIGJpYmxp 33232\ndGVyaQ== 33233\nIHZvcnN0ZWxsZW4= 33234\nIEFBQQ== 33235\nIGFzc2Vzc2luZw== 33236\nWUE= 33237\nIHNwbGVuZA== 33238\nIGV4Y2F2 33239\nIGJhcHRpc20= 33240\neWxs 33241\nd293 33242\nTWFj 33243\nIHBsYXN0aWNz 33244\ndGVva2Jva2tp 33245\nIGludMOpcmVzc2FudA== 33246\nIGNvbW1hbmRlZA== 33247\nIGZhbW91c2x5 33248\nINCY0LvQuA== 33249\nIE1hbnVlbA== 33250\nIHNvdXRod2VzdA== 33251\nIGRlZm9ybWF0aW9u 33252\nw61jdWxv 33253\nINC90LDRhdC+0LTQuNGC0YHRjw== 33254\nIFBhdHRlcg== 33255\nZGVncmVl 33256\nIGN6xJlzdG8= 33257\nIi0= 33258\nIOyFiw== 33259\nIG1hbmdlcg== 33260\nIFRydXN0ZWU= 33261\ngOumrA== 33262\nIHB1bnRvcw== 33263\naXZhYmxl 33264\nIHZvbGF0aWxl 33265\nIOuKkA== 33266\nIGluc3RhYmlsaXR5 33267\nIGNpZWw= 33268\nY2nEhQ== 33269\nIHB1cml0eQ== 33270\n0L3QvtGB0YI= 33271\nU2ls 33272\nZWRhcg== 33273\nTk9VTkNFUg== 33274\nIHNwZWxsZWQ= 33275\nR0VS 33276\nIHNhbmN0dWFyeQ== 33277\nIGFjY2VsZXJhdGluZw== 33278\nIHNjb3V0 33279\nINC/0YDQtdCy 33280\nZmFocmVu 33281\nIOuCmOyYqA== 33282\nIHBvY3rEhXQ= 33283\nIE1ldQ== 33284\na2Fhcg== 33285\ns7Tqs6A= 33286\nYWtyYQ== 33287\nRG93bg== 33288\nIMOEcg== 33289\nIEVsaXRl 33290\nIGFsbG9ucw== 33291\nIG1heW9ubmFpc2U= 33292\nIFN1c3RhaW4= 33293\ncHJpc2luZ2x5 33294\nIHN1cGVydmlz 33295\nIOq3uOugh+yjoA== 33296\nIHVuZW1wbG95ZWQ= 33297\nIGZyZXNobHk= 33298\nINee16I= 33299\nIERo 33300\nIHRhY2tsaW5n 33301\nIG9ncg== 33302\nIOy0iOs= 33303\nIGxvZnQ= 33304\nYXJhaA== 33305\nIEFpcmw= 33306\nIERpcg== 33307\nINCc0L7QttC90L4= 33308\nIGJvb2tpbmc= 33309\nIENSQQ== 33310\nIGh0dHBz 33311\nIGNob2tl 33312\nIGdvd24= 33313\nIG5vaXRl 33314\nIHphYw== 33315\naXN0b2w= 33316\nIHNlY3Jl 33317\nIHJlc2VtYmxlcw== 33318\nIGN1YWQ= 33319\n7IKs6rCA 33320\nc2hvdw== 33321\nIGJsYW5j 33322\nIGFndQ== 33323\nIFByaW50 33324\nYXN0ZWQ= 33325\nIFdlYXRoZXI= 33326\naXBs 33327\nIG9ic2N1cmU= 33328\nIGNvbnRl 33329\nb3VnaHM= 33330\nKTs= 33331\nIERhbWU= 33332\nIGNsYXJpZmljYXRpb24= 33333\nIGludGltYWN5 33334\nIHVwaG9sZA== 33335\nIE1pcnJvcg== 33336\nIHdhZ29u 33337\neGlkZQ== 33338\nIGNsb2c= 33339\nYXBwZXI= 33340\nIEltbWVkaWF0ZWx5 33341\nw7pkZQ== 33342\nIHRvdWNoZG93bg== 33343\nIHJvb2Z0 33344\n0LDRiNCw 33345\nIMOnxLFrdA== 33346\nIGxhaXNzZXI= 33347\nIFVucmVhbA== 33348\nZW5zaXRpdmU= 33349\nIDEyMw== 33350\nIHBsYXN0ZXI= 33351\nIGR1Y2tz 33352\nIGV0bWU= 33353\nIGJpc2hvcA== 33354\nYnJldmk= 33355\nIGJpYw== 33356\nIHJ1bnRpbWU= 33357\nIGFtYml0aW9ucw== 33358\n0LzQsNGC 33359\nIFdlaW4= 33360\nIE1hcmk= 33361\nIO2KuOs= 33362\nIHJlc29sdmVy 33363\nIG5nw6B5 33364\nIFJpc2U= 33365\nIENydXM= 33366\nIG1lcmNoYW5kaXNl 33367\nIGVsaQ== 33368\nIHN0YXRld2lkZQ== 33369\nIG93bA== 33370\nIHR3aXN0aW5n 33371\nIGNvbnRhbWluYXRlZA== 33372\nIENvbW1lcmNl 33373\naHl0aG0= 33374\nIMOI 33375\nIOyLpOs= 33376\nIG11c3N0ZQ== 33377\ndWly 33378\nIHN1bXM= 33379\nIFNvbWV3aGVyZQ== 33380\nIGthbWk= 33381\nIGFpcmVk 33382\nIEFORFJFVw== 33383\nIOq6 33384\nIHZpZW5kbw== 33385\nIGFudGlib2R5 33386\nIGFic29sdW1lbnQ= 33387\nIHByb3Rlc3RlcnM= 33388\nIFF1w6liZWM= 33389\nc3RhZHQ= 33390\nU2hhdW4= 33391\nIGNoYW1iZXJz 33392\nIFdlYXI= 33393\nIEVmZmVjdHM= 33394\nIGhhemFyZHM= 33395\nIG5laQ== 33396\nIGNvcmF6w7Nu 33397\nIOG8 33398\nIFNH 33399\nlKk= 33400\nIOyXreyLnA== 33401\nIGNvbWZ5 33402\nIENvZHk= 33403\nIHBlbnNhbmRv 33404\nIGdhbnNrYQ== 33405\nIEFjcm9zcw== 33406\nw7ZsbGln 33407\nYWJ5dGU= 33408\nIHdlZGdl 33409\nIGthbGlhbg== 33410\nIHNpZ3Vl 33411\nZW5kZXM= 33412\nIEdyb8Of 33413\nIHV0aWxpc2Vy 33414\nIGZsb3du 33415\n0LDQvdC40Y4= 33416\nIGxldmFy 33417\ncmVzdHJpYWw= 33418\nIGlsbHVzdHJhdGlvbnM= 33419\nIGFzbMSxbmRh 33420\nQkxFRVA= 33421\nINC00L7RgdGC 33422\nIHR1cnJldA== 33423\nIHN1aXRjYXNl 33424\nemnEmWtp 33425\nIHNrZXRjaGVz 33426\nIGFjcmVk 33427\nIFJlaQ== 33428\nIHRzdW4= 33429\nIFNhZw== 33430\nIHRoaXJkcw== 33431\nIEtJUkJZ 33432\ncmFp 33433\nIGh1bWFub3M= 33434\nIHJlY29tbWVuZHM= 33435\nIGV4dHJhb3JkaW5hcmlseQ== 33436\nIGNvbW1lbmNlbWVudA== 33437\nS04= 33438\nb3Bleg== 33439\nINeR16k= 33440\nIGxldGhhbA== 33441\nIEVzdGFtb3M= 33442\nIGluc3BlY3Rvcg== 33443\nIFNlb2s= 33444\nZXVu 33445\nIG9mZnNob3Jl 33446\nIGdldHRpbg== 33447\neWVhcnM= 33448\nIFNpbGVuY2U= 33449\nIE5hdHVy 33450\ndXB1bg== 33451\nIHRyenk= 33452\nIG5vZ2V0 33453\nIGhhbWJ1cmdlcg== 33454\nIFByYWlzZQ== 33455\nw6luZA== 33456\nIDE5NzE= 33457\neWxpZQ== 33458\na3JpdA== 33459\nIOyDneqwgeydtA== 33460\nIG1vbWVudG9z 33461\nIGVzdMOp 33462\nIGRpc3NlbWlu 33463\nIGdpZ3M= 33464\nIGRlc2Fm 33465\nIGF2aXM= 33466\nIFpvbw== 33467\nIOyViuydgA== 33468\naMOkbmc= 33469\naGFrZQ== 33470\nIEJpc20= 33471\nIHJldGhpbms= 33472\nIE1hbGNvbG0= 33473\nIGlkZW50aWZpZXM= 33474\nbG93ZXI= 33475\naXhlbA== 33476\nIHR2w6U= 33477\na2Vk 33478\naWVyeg== 33479\nIMO2ZmZlbnRsaWNo 33480\nIHByb2NsYWlt 33481\nc29vbg== 33482\nbG9s 33483\nIGxvaQ== 33484\nIGJpdHRlbg== 33485\ncm9sbG8= 33486\nIHNlcm1vbg== 33487\nIGVzcXU= 33488\nIGphY2tldHM= 33489\nIGdyw6FmaWM= 33490\nINC/0L7QutCw0LfRi9Cy 33491\nIGNhYmV6YQ== 33492\nY2hvZHpp 33493\nIHBlbHZpcw== 33494\nIG5vc3RhbGdpYQ== 33495\nIGJyZXc= 33496\nIHNob3J0Y3V0cw== 33497\nIEFkZW3DoXM= 33498\nIHN1cGVyZmljaWFs 33499\nIGJvY2E= 33500\naW1lbnRvcw== 33501\nIHNwcm91dHM= 33502\nIEpvbmFz 33503\nIEZsb3JlbmNl 33504\nc3RhdGlj 33505\nZGF1Z2h0ZXI= 33506\nKik= 33507\nxYJieQ== 33508\nZmFzaGlvbg== 33509\nIEdpbmdlcg== 33510\nIOunpOs= 33511\nIGh1c3RsZQ== 33512\ndXRvcw== 33513\nINGC0Y/Qtg== 33514\nIEzDtnM= 33515\n16nXmded 33516\nYW55Y2g= 33517\ndHViZXI= 33518\nIHRpZHk= 33519\nIGZyb250YWw= 33520\nIHdoaXNrZXk= 33521\nIGh1bWlk 33522\nIM6f 33523\nIHJpZGdl 33524\nIG1hcmlu 33525\nIGJpZW50w7R0 33526\nIENhcnJpZQ== 33527\nY2h3 33528\nIHRhaHVu 33529\nIEVyZ2Vi 33530\nRlI= 33531\nIOygleu2gA== 33532\nIFNvbGRpZXI= 33533\nIGVubGlnaHRlbm1lbnQ= 33534\nIGV4YW1pbmluZw== 33535\nIE5vdHJl 33536\nIGVyYW0= 33537\nIFN1bm55 33538\nIGxheWVyZWQ= 33539\nIERhenU= 33540\ncmFkZXM= 33541\nINC90LDRiNC10Lk= 33542\nIHRpbWJlcg== 33543\nIG1hbm5lcnM= 33544\nIEJpcm1pbmdoYW0= 33545\nIG1pbmlhdHVyZQ== 33546\nb21ldGVycw== 33547\nIGZpbGxlcg== 33548\nIFJpcA== 33549\nIEtvbWI= 33550\nb3duZXI= 33551\n7L8= 33552\naWRpYW4= 33553\nIGRlbcOhcw== 33554\nINmI2Ko= 33555\nIHByZWNhdXRpb25z 33556\nIGdvdmVybm8= 33557\nemVsZg== 33558\nIENvbXBsZXRl 33559\nIFBoYW50b20= 33560\nINC90LXQtw== 33561\nINC60LDRgNGC 33562\nIEFudHdvcnQ= 33563\nIFBmaXplcg== 33564\nIEZyYW5jbw== 33565\nIHfFgg== 33566\nIGZyaWc= 33567\nZXNwZXI= 33568\nIGthbGU= 33569\nIGZpbG1tYWtlcg== 33570\nIGt1cnQ= 33571\nIGludmFsaWQ= 33572\nYXJlbGxh 33573\nxINuZw== 33574\ncmFtZW50bw== 33575\nIG51dHJpdGlvbmFs 33576\nIGRpY3RhdG9ycw== 33577\nIGFmaW4= 33578\nIGZ1enp5 33579\nIEdpbmE= 33580\nw7N0 33581\nIEV4dHJlbWFkdXJh 33582\nIGRlbW9uc3RyYXRpb25z 33583\nIE1vbnRnb21lcnk= 33584\n7ZW07ISk 33585\nIEdhbmRoaQ== 33586\nIHJldW5pb24= 33587\nIGpha2nFmw== 33588\nIFp1Zw== 33589\nT1VHSA== 33590\nbGlmdGluZw== 33591\nIOCy 33592\n4bmb4bmj 33593\nZWI= 33594\nIFdPVw== 33595\nIFNoaXZh 33596\nb21ldHJ5 33597\nIHdpbGRseQ== 33598\nIHRlbmRlZA== 33599\nIG1lZ2Fw 33600\n7LKY 33601\nIG5hdXNl 33602\nIGdlcmVr 33603\nIE1hcmNlbA== 33604\nIG5lc3Rl 33605\n2K7YsQ== 33606\nIGZlaA== 33607\nc3VzcGVuc2VmdWw= 33608\nIFdyZXN0bGU= 33609\nIFBhbGVzdGluaWFucw== 33610\nIEdPUkQ= 33611\naXlldA== 33612\nINGA0LDQtNC4 33613\nIHZlcnN1Y2hlbg== 33614\nIHRyYW5zaXN0b3I= 33615\nINCf0YDQvtGB0YLQvg== 33616\nINC/0L7QvdGA0LDQsg== 33617\nIHJoeW1l 33618\nIFZlcm1vbnQ= 33619\ncGxhdHo= 33620\nIMSwxZ90ZQ== 33621\nIEhhZw== 33622\nINCY0Lw= 33623\nINGA0LDRgdGB0LrQsNC3 33624\nIG1ldHJvcw== 33625\nIEluZmluaXR5 33626\nd29sZg== 33627\naWJhbA== 33628\nZnRpZw== 33629\nINqG 33630\nIO2YueyLnA== 33631\nIG9nZ2k= 33632\nIGRpc3Bvc2l0 33633\nINC/0YDQuNC7 33634\nINCy0YvQv9C+0Ls= 33635\nIHRow7Rp 33636\nIEtFTk4= 33637\nIGhhbmRpbmc= 33638\nYWN0dXM= 33639\nIHRhY29z 33640\nIGZvcm1lcmx5 33641\nIENvcmludGhpYW5z 33642\n0YbRltGX 33643\nIHBhZHJl 33644\nIGNvbmdyZWdhdGlvbg== 33645\n5pE= 33646\nZmVydA== 33647\nIHN1Ymly 33648\nYWlzZXI= 33649\ncXVh 33650\nYXJhb2g= 33651\nIEN1cnJ5 33652\nIOyViuuKlA== 33653\n0LXQu9GO 33654\nIGZ1c3M= 33655\nIGJvb3R5 33656\nIGxvd3M= 33657\nIGhvbW1lcw== 33658\nIE1I 33659\nIERpc25leWxhbmQ= 33660\nd2VudA== 33661\nIHJlc2lkdWU= 33662\nIGJlZXBpbmc= 33663\nw6R0dGE= 33664\nIG1vdWxk 33665\nIFByb2pla3Q= 33666\nc3RhbGs= 33667\nIGFydGlmYWN0 33668\nIEFudHJhZw== 33669\nIEFNRA== 33670\nIENyeXB0 33671\nIOuplA== 33672\nIEZlbGlwZQ== 33673\nIENPQg== 33674\nZWx1 33675\nIHNlbGZpZXM= 33676\nIFNhbnRp 33677\nY2h1dHo= 33678\nINCj0LrRgNCw0Zc= 33679\nZ2VzYW10 33680\nIGZsb2Nr 33681\namF6 33682\ncGxhaW4= 33683\nIHdyaW5rbGVz 33684\nIHJlYWlz 33685\nIHBhbGpvbg== 33686\nIGVtcG93ZXJtZW50 33687\nIGF0dGVuZGVlcw== 33688\ncHBh 33689\nIG5lZGVu 33690\n0L7QvdGL 33691\nIHRpbWVmcmFtZQ== 33692\nIENoZXJyeQ== 33693\nIGlkw6ll 33694\nIGdhZw== 33695\nIGRvbmtleQ== 33696\nIMO0bmc= 33697\nIEhhcmU= 33698\nIEthcmE= 33699\nIGFjb21wYW4= 33700\ncGxhY2Vz 33701\naW1pZW50b3M= 33702\nIEhhbW0= 33703\n0LHQuA== 33704\ndWJlbg== 33705\naWxpeW9y 33706\nIHRoaXJzdA== 33707\nIGtyeQ== 33708\nIEdlb3JnZXRvd24= 33709\n16DXlA== 33710\nIG9yY2g= 33711\nIGhlYXJ0YmVhdA== 33712\nIHRyYW5zZm9ybWF0aW9ucw== 33713\nZXN0b25lcw== 33714\nIEtI 33715\nIGNhcnRvb25z 33716\nIGFuY2k= 33717\nIHdvcnRobGVzcw== 33718\nIHRhaWxvcmVk 33719\ncHU= 33720\nQW1lcmljYW5z 33721\nIHBpbGVz 33722\nIE1vbmtleQ== 33723\nIGJhc2lu 33724\nIFRlbXBlcg== 33725\nIFBhaW50 33726\nIHB1bmNoaW5n 33727\nIGJhaWs= 33728\nIE9ha2xhbmQ= 33729\ndnJl 33730\nxZ9hbGxhaA== 33731\neWRk 33732\nIGNhc3VhbGx5 33733\nb2R1 33734\nIGNvZGVk 33735\nIE5vcndlZ2lhbg== 33736\nIFZpbmNl 33737\nIHByZW1hdHVyZQ== 33738\nIFByb21pc2U= 33739\n0LXQutGB0YI= 33740\nIGRldmFzdGF0ZWQ= 33741\nIFByZW1pdW0= 33742\nIFBhcmFt 33743\nIMOWeWxl 33744\ndW11eg== 33745\nUE8= 33746\ncmF0b3Jz 33747\nIGxhbXBz 33748\nIHRlcnJpdG9yaWFs 33749\nIGJhY2tib25l 33750\nbGlzdGVk 33751\nRFk= 33752\nINin2YTYsQ== 33753\nIHB1cnN1ZWQ= 33754\nIENvbW1vbnM= 33755\nIOqzoQ== 33756\nbG9ja3M= 33757\nZWRvcg== 33758\nIGNvbmNlaXZlZA== 33759\nZ2VyZQ== 33760\nIGRpc2FwcGVhcmluZw== 33761\nIFN1bGw= 33762\nIOyXsOs= 33763\nIGhvZmZl 33764\nIGRldG94 33765\n7ZSM 33766\nIHJldGly 33767\nIOuBneuC 33768\nIHBlcmd1bnRh 33769\nIEJPWQ== 33770\nIHBlbm4= 33771\naMOpcw== 33772\naG9u 33773\nIGNhdGFzdHJvcGhpYw== 33774\nIGF1c3Q= 33775\nIHRvcnNv 33776\nIOyWtOuKkA== 33777\nIOyCrOuejOuTpOydtA== 33778\nIG1hcnZlbG91cw== 33779\nIEhhcmxleQ== 33780\nYWNoaW5l 33781\nIHRp4bq/ 33782\naXR0bw== 33783\nIEnDrW0= 33784\neWxvbg== 33785\nIHNodXRkb3du 33786\nLicn 33787\nIGFwb2xvZ2llcw== 33788\nIENvbW11bmljYXRpb24= 33789\nINCz0L7QstC+0YDRjg== 33790\n4oSi 33791\nw612ZWlz 33792\nYWN1bg== 33793\nIHJldGFpbmluZw== 33794\nIGNvbnRyYWRpY3Rpb24= 33795\nIEFEQU0= 33796\nQ09N 33797\nQnJ5YW4= 33798\nIE1vbnNpZXVy 33799\nIGFkYXB0aW5n 33800\n0KjQkA== 33801\nIFNjcg== 33802\nw6RuZGVydA== 33803\nIHBsYXVz 33804\nIG9uc2V0 33805\nIGFzc2lzdGFudHM= 33806\nIHZhbHZlcw== 33807\nIHNjYXR0ZXI= 33808\nIFJ1c3Q= 33809\nYXdpYQ== 33810\nIHJlYWRpbmVzcw== 33811\nIHBhaXM= 33812\nIGJpYmxl 33813\nIGFtYmllbnRl 33814\nINCw0LzQtdGA0LjQug== 33815\nIHVuY29uZA== 33816\nIGthbGs= 33817\nIG1vYw== 33818\ndW5u 33819\nIGFjdHU= 33820\nIGh1bW1pbmc= 33821\naXNzaW1v 33822\nIFBhdHJvbA== 33823\nZ293 33824\nIFRIRVk= 33825\nIEJvZGVu 33826\nIEJpZQ== 33827\nIHJlZWw= 33828\nINGD0YHQu9C+0LI= 33829\nIGVuZGVhdm9y 33830\nIFBlcmlvZA== 33831\ndXN0b21lZA== 33832\nbWFscw== 33833\nYWxvbg== 33834\nQm94 33835\nIM+DzrHPgg== 33836\nIG9tZGF0 33837\nIGFsdHJl 33838\nIEhlaA== 33839\na2Fk 33840\nIHByb3RlY3Rvcg== 33841\nIGRvbWluYW5jZQ== 33842\nb2R5bmFtaWM= 33843\nIGNvbW11bmljYXRlZA== 33844\na8O2 33845\nIHByZWRlY2Vzc29y 33846\nIEx1aw== 33847\nIEZsb3dlcg== 33848\ncG9xdWU= 33849\n0YLQuNGA0L7Qsg== 33850\nIHJldHJvc3BlY3Q= 33851\nIGRlY2lzaXZl 33852\nIGV4ZW1wZWw= 33853\ne1w= 33854\nIFLDvGNr 33855\ncml0ZQ== 33856\nIFpldXM= 33857\nIGNhbG9yaWU= 33858\nIGF0dHJhY3Rpb25z 33859\nIEhpbnRlcg== 33860\nIHVobQ== 33861\nIO2MkA== 33862\nIHJ1bGVycw== 33863\nIGRpc2NvdXJhZ2Vk 33864\nIGFjb250ZWNlcg== 33865\nIGFjY2VudHM= 33866\nIE9wdGlt 33867\nIEFsZw== 33868\na2lkcw== 33869\nMjAyMQ== 33870\nIExpbmRzYXk= 33871\nIGZpbG1tYWtlcnM= 33872\ncHJvd2Fk 33873\nIHRlcnVn 33874\n64u0 33875\nIFNvbW1lcg== 33876\nMjAxOA== 33877\nIGJvcnJvd2luZw== 33878\nIFRyYW5zZmVy 33879\n0L3QvtC/ 33880\nYXJpYXM= 33881\nIGhlYWRwaG9uZQ== 33882\n7Lyc 33883\nIHRyYW5zbGF0aW5n 33884\nIGF1Zmdl 33885\n4K6q4K6f 33886\nd2Vpcw== 33887\nYXZhbnQ= 33888\ncGFpZA== 33889\nYmFieQ== 33890\nIHRvdWdoZXN0 33891\nIHJlcGVhdHM= 33892\nIFRlcmVzYQ== 33893\nTG9yZA== 33894\nIGFjYWJhcg== 33895\nIFJpZGU= 33896\nZGly 33897\nIGxlbmc= 33898\nIGR3YQ== 33899\nIGhlYWRhY2hlcw== 33900\nIG7hu69h 33901\nINC90LDRgdGC0L7Rj9GJ 33902\nIGJvaWxz 33903\nIGxvbmdpbmc= 33904\ncmlhcw== 33905\nw7NyaW8= 33906\nIFBhcmFkaXNl 33907\nIFNlw7Fvcg== 33908\nZXJkZW0= 33909\nIHJlaW5zdA== 33910\nIHNhbGFyaWVz 33911\nIGluc2VjdXJpdHk= 33912\nxYJvxZtjaQ== 33913\nINCw0LHRgdC+0LvRjtGC0L3Qvg== 33914\naW5rZW4= 33915\nIEVkZHk= 33916\ndWRvcw== 33917\nIGR1bW15 33918\n0JrQsNC6 33919\nc2l4 33920\nIGluYm94 33921\n4bqp 33922\nUGVvcGxl 33923\n4buTbmc= 33924\nIG9yZ2FuaXplcnM= 33925\nZmluZA== 33926\nIMO8bA== 33927\nIENPTQ== 33928\nxbxh 33929\nd2VpbGU= 33930\nQ29tbWVudGFyeQ== 33931\n7Yq466W8 33932\nIE1pdHRlbA== 33933\na3Vz 33934\n4KSo 33935\naXJhbA== 33936\nIGdhcm1lbnQ= 33937\nzrnOus6s 33938\nIHN0b29s 33939\ncGF5ZXJz 33940\nIHNoaW1tZXI= 33941\nIE9sbGll 33942\nIEplxbxlbGk= 33943\nIDE5Nzc= 33944\nIGpldXg= 33945\nIGV4dGluY3Q= 33946\nIFRyYW5zcG9ydGF0aW9u 33947\nIE1ha2Vy 33948\nIGpvaG4= 33949\nIHJpY2hlc3Q= 33950\nIHRyYXVtYXQ= 33951\nIGxpZWdlbg== 33952\ntOulvA== 33953\nIHVucmVzdA== 33954\nIFN0cmF3 33955\nIGNvbWE= 33956\nIEtyaXN0ZW4= 33957\nINCa0L7QvdC10YfQvdC+ 33958\nIEJyeWNl 33959\nINGP0LrRlg== 33960\nIHBlYXJscw== 33961\nINC/0L7QvdC40LzQsNGO 33962\nIGFkZGl0aW9ucw== 33963\nIGFzeW1wdA== 33964\nINC80LXQvdGM0YjQtQ== 33965\nIHNjYW5z 33966\nQ2hpbGQ= 33967\nIEhpZGU= 33968\n0LrRg9GO 33969\nZXRhcw== 33970\nIGRhbms= 33971\nIHBsZWFz 33972\nIGVzc2F5cw== 33973\nIGpldHM= 33974\nINCy0LXQtA== 33975\nIHBvc2l0aXZlcw== 33976\naG9m 33977\nLSk= 33978\nenpv 33979\nIHN0YXJ0ZXJz 33980\nIHNtaWxlZA== 33981\nIDE5NDQ= 33982\ncXVpZXJh 33983\nIHJvaw== 33984\nIHB1ZXN0bw== 33985\nTmljbw== 33986\nIHNpbXVsYXRpb25z 33987\nIOC2 33988\nIGludHJpZ3VlZA== 33989\nIE92ZXJ3YXRjaA== 33990\nc2lnaA== 33991\nYmFp 33992\nIOunkOqzoA== 33993\naWTDqQ== 33994\nIGNyYWJz 33995\n4bqtcA== 33996\nIElyYXFp 33997\n7J2066W8 33998\n0YLRjw== 33999\nIFNvcGhpYQ== 34000\nIEROUw== 34001\nIMO2bmVtbGk= 34002\nIEx1bw== 34003\nnaQ= 34004\nIENvdW5zZWw= 34005\nbGlnZW4= 34006\n0LDQvdGM0YjQtQ== 34007\nIHRydW1wZXQ= 34008\nIGRhcGF0 34009\nIEpN 34010\nIEVWRVJZ 34011\nIExheWVy 34012\nIGPDtA== 34013\n0L3QsNC7 34014\nIEpvbw== 34015\nIEhhY2s= 34016\nIHN1bnQ= 34017\nIExlb25hcmQ= 34018\nIEZpcmViYXNl 34019\nw6RuZ2Vy 34020\nIGV4cGxvZGluZw== 34021\ndm95 34022\nIOymkA== 34023\nINGB0LXRgNGM 34024\nIHNldmVyaXR5 34025\nIGJlc3RpbW0= 34026\nIHRpcmluZw== 34027\nIHByb2N1cmVtZW50 34028\nIGRpcGxvbWFjeQ== 34029\nIGRlY29yYXRpdmU= 34030\nINmK2Kc= 34031\nIHBlbmV0cmF0aW9u 34032\n1as= 34033\nIG91dHJpZ2h0 34034\nRU5F 34035\nIFVuaQ== 34036\nb2RsZXM= 34037\nIHplcm9z 34038\nIGRlbGlnaHRmdWw= 34039\nam0= 34040\nIGRvcG8= 34041\nIHBvc2l0aXZpdHk= 34042\nIFZJU1RB 34043\nIFJlc291cmNl 34044\n7YOA6w== 34045\n0YjQuNC1 34046\nQ2FybA== 34047\nIHBpcGluZw== 34048\nIGNob3BwaW5n 34049\nIEdhbnpl 34050\nw7xzcw== 34051\nIEFv 34052\nIHNoYXR0ZXJlZA== 34053\nIERldGVjdGl2ZQ== 34054\nIHVuZG91YnRlZGx5 34055\nIGhhbGx1Yw== 34056\nIGVuY2g= 34057\n0YvRh9C90L4= 34058\n0YPQu9GP0YA= 34059\naXNlc3Rp 34060\nIHBlZGFscw== 34061\nIGR1cnVt 34062\npO2U 34063\nbGFpbWVy 34064\nIHByb3ByZQ== 34065\nQ3U= 34066\nIHRyYW5zbGF0b3I= 34067\nIGNhxYI= 34068\nIOq3uOqxuA== 34069\nIGNhxYJ5 34070\nVUE= 34071\nIHJldmlzZWQ= 34072\nINC/0L7QtNC+0LE= 34073\nIEFydGljbGU= 34074\nIEhhaXRp 34075\nIMOT 34076\nIEN0cmw= 34077\nIHJvem0= 34078\nbGFpdA== 34079\nIGxldHp0ZQ== 34080\naXNwZXJpbmc= 34081\nZGlzcGxheQ== 34082\nIGFsdW1pbml1bQ== 34083\nIHBhbGFicmFz 34084\nIGNvbm9jZXI= 34085\nIHppdHRlbg== 34086\nIGRpcmln 34087\nIGJyYWluc3Rvcm0= 34088\nIHdpZmk= 34089\nIFBhcnRpY2lw 34090\nIHZpZXdwb2ludA== 34091\nIFF1YW4= 34092\nIGhpZXJhcmNo 34093\nV2VsY29tZQ== 34094\nIG9mZmVu 34095\nIFJlY292ZXJ5 34096\nZ2Fubw== 34097\nV291bGQ= 34098\nIHJlcHJv 34099\nIHBlcmNlcHRpb25z 34100\nIGRlbWFzaQ== 34101\nIEJhbmdsYWRlc2g= 34102\nIEluY3JlZGlibGU= 34103\nIGxldHp0 34104\nIGJlaGF2aW5n 34105\nIGFzdG9uaXNoaW5n 34106\nIOKG 34107\nIOuCqOyekA== 34108\nIEdPUkRPTg== 34109\nQ0FS 34110\nPyEi 34111\nIFByZXN0 34112\nIOunnuyVhOyalA== 34113\nIHRhbmQ= 34114\nIGxhc2g= 34115\n54o= 34116\naWZpY2FudA== 34117\nIGludG9sZXI= 34118\nINCz0LXRgNC+ 34119\nIHRldQ== 34120\nYXNv 34121\nINGB0L7QstC10YI= 34122\nIHRyYXZlbGVycw== 34123\nIFN5bmQ= 34124\nINCy0LXRgNGB 34125\nRm9uZGE= 34126\nYWTEsQ== 34127\nIHRyYW5zY3JpcHRpb24= 34128\nIHRpdGFuaXVt 34129\nIHR3aXN0cw== 34130\nIGdlYXJib3g= 34131\nZW5zYXRpb24= 34132\nZmF0 34133\nQ29sbA== 34134\nIENvbW1vbndlYWx0aA== 34135\nem9u 34136\nIFBvbGl6ZWk= 34137\nIEFQUExBVVNF 34138\nZnJ5 34139\nIEp1ZGE= 34140\nZXN0ZWVt 34141\nIHNvY2s= 34142\nIEp1Z2VuZA== 34143\nINC60YHRgtCw0YLQuA== 34144\nIERybw== 34145\nIHByb2NoYWluZQ== 34146\nIGxpa3NvbQ== 34147\nIEVuZXJnaWU= 34148\nIE1hcmluYQ== 34149\nIDIzMA== 34150\nIOqwgOyEnA== 34151\ndW1waW5n 34152\nIGxvbmU= 34153\nIGZvbnRz 34154\nIGJ1c2luZXNzbWFu 34155\nIHBseQ== 34156\nIGRvZQ== 34157\nZ3JpZA== 34158\nIE1pbHdhdWtlZQ== 34159\nIEVkZW4= 34160\nISIu 34161\nINuM24E= 34162\nb2dlbnM= 34163\nIHRlYXNlcg== 34164\nIHF1acOpbg== 34165\nIGluY2VudGl2 34166\nZ292ZXJu 34167\nIGNoaWxkY2FyZQ== 34168\nIHNuZWFrZXJz 34169\nIGltcHJpc29uZWQ= 34170\nwq4= 34171\n0LjRgtC10YHRjA== 34172\nYW5idWw= 34173\nIHJlZ2Fpbg== 34174\nIHRyYW5xdWls 34175\nUmVkbmVy 34176\nSUZB 34177\nIGlkZW9sb2dpY2Fs 34178\nIG1heW9yw61h 34179\nIGJ1cmVhdQ== 34180\nZXRlcm0= 34181\nIERJRA== 34182\n7Iq3 34183\nIHdhdmluZw== 34184\nIGJlYg== 34185\nIMOhcg== 34186\nINC60LI= 34187\nIGVudm95 34188\nYW51dA== 34189\n0LjQutGD 34190\nIEVudmlyb25tZW50 34191\nIEFzc2Fzcw== 34192\nIEJyZWFk 34193\nINCi0YPRgg== 34194\nIHN0YWlyY2FzZQ== 34195\nIERpc2Vhc2U= 34196\nIGF1Y3Vu 34197\nIOuLiA== 34198\nIGNvbmZyb250YXRpb24= 34199\nIDE5NDE= 34200\nIGlyb255 34201\nIHdvcnNo 34202\nIGZpY2s= 34203\nIE5hb21p 34204\nIGJhY2tzaWRl 34205\naWV1eA== 34206\nS2Fw 34207\nIHZlZGVyZQ== 34208\nIGxlbmd0aHk= 34209\nIGJyZWFrZXI= 34210\nIFJvbGxl 34211\nIHByZWRhdG9y 34212\nIG5vc3Nvcw== 34213\nIGFkdmVydGlzZQ== 34214\n0YDQvtC00LU= 34215\nUmVkbmVyd2VjaHNlbA== 34216\ncmV0ZW4= 34217\nIGNvbGxlY3RvcnM= 34218\nxLHEn8SxbcSxeg== 34219\nIHRyaWc= 34220\nIGF4ZXM= 34221\naW50ZXJz 34222\nIHBlbmFsdGllcw== 34223\nIE9zbWFu 34224\nIEplbm5h 34225\nIGZsYWtlcw== 34226\nIHRyYWluZXJz 34227\nIHN0dW5uZWQ= 34228\nIFNjcm9sbA== 34229\nIFBpcA== 34230\nINC90LDRgdGC 34231\nIG5ow6A= 34232\nIFNtYWNr 34233\n4bqrbg== 34234\ncmF0b3M= 34235\nINGA0LDQsdC+0YLRiw== 34236\nIHVjeg== 34237\nIExlbW9u 34238\nIFNpbmQ= 34239\nIHBzeWNoaWM= 34240\nIEFiZw== 34241\nIG1hbW1hbHM= 34242\nIGltbWVyc2l2ZQ== 34243\nIGJvdHM= 34244\nIHZlcnNjaGllZGVuZQ== 34245\nIGdlcmFs 34246\nIGZvbGxvd2Vy 34247\nIHNlZ3VyaWRhZA== 34248\nIGltbWVyc2Vk 34249\nZmVpdG8= 34250\nY3Jvc3M= 34251\nIMO2bGQ= 34252\n7YOE 34253\nINeU15nXkA== 34254\nIEppYW4= 34255\nIGJpbGl5b3I= 34256\nYXJlYQ== 34257\nIGthZg== 34258\nIGdvZHQ= 34259\nIOuwqeyGoQ== 34260\nIGRldHJpbWVudA== 34261\n0ZbQuw== 34262\nIMSRw6J1 34263\nIGNobG9yaWRl 34264\nw7hyZQ== 34265\nbGVp 34266\nIG1vbnRl 34267\nIGRpZmbDqXJlbnRlcw== 34268\n4K+BLg== 34269\nIGNhcmVnaXZlcnM= 34270\nIGluYWRlcXU= 34271\nIGZhcmV3ZWxs 34272\nINGC0LjQv9Cw 34273\nb250ZWM= 34274\nIEVwaA== 34275\nSEhI 34276\nIFRvZG9z 34277\nINCh0KjQkA== 34278\nIHRyb3Y= 34279\nIGxpZ2U= 34280\nIGPDtG5n 34281\nIENpdg== 34282\nIGNhcGF6 34283\nIFZhbGxhaGk= 34284\nIHF1ZXN0ZQ== 34285\nIHJlcGxpY2E= 34286\n2LPYqA== 34287\nem5h 34288\nINGB0LvRg9C2 34289\nIFBU 34290\nd2F2ZQ== 34291\naWVuaQ== 34292\nIHJlbGllZA== 34293\nZGV2ZWxvcA== 34294\nIGRlbWU= 34295\nIEFtYW4= 34296\nIFsuLi5d 34297\nIGNvbXBsaW1lbnRz 34298\ndWFpcw== 34299\nIO2MqA== 34300\nIHNtZWxsaW5n 34301\nIGRhZHVyY2g= 34302\n2YjYqg== 34303\nIG9yYW5nZXM= 34304\nINC70LDQuQ== 34305\nIHN0YWJpbGl6YXRpb24= 34306\nIGFwcGxpYW5jZXM= 34307\nIGht 34308\ng5DrqbQ= 34309\nb2R5bmFtaWNz 34310\nIGNpxJk= 34311\nIENvdHQ= 34312\nTU9O 34313\nIE1hbmc= 34314\nIGFsbGVyZGluZ3M= 34315\nzrnOus6u 34316\nc2hvdHM= 34317\nIHRz 34318\nIEfDtnI= 34319\nIENIQVI= 34320\nIDoo 34321\nIHdyYXRo 34322\nIGZpcXVl 34323\nIGbDvGhyZW4= 34324\nIHRlc3RhbWVudA== 34325\nIF5e 34326\n4bmb4bmj4bmHYQ== 34327\nQUxE 34328\nIHRleHRv 34329\nIERvZ3M= 34330\nIHNpYg== 34331\nIHBhdGhldGlj 34332\nb2Nrcw== 34333\nIHJhZGljYWxseQ== 34334\nIE1PUkU= 34335\nIEpBTUVT 34336\nIGluZ2w= 34337\nIFRlY2huaWNhbA== 34338\nIHBvcmNo 34339\nIFVU 34340\nINC+0LHRj9C30LDRgtC10LvRjNC90L4= 34341\nIHJlbmV3YWw= 34342\nIGFlc3RoZXRpY3M= 34343\naWt1bQ== 34344\nIGJldmVyYWdl 34345\nZGVybg== 34346\nIHByZWRpY3RpdmU= 34347\nIGNodXk= 34348\nIFJlZ2FyZGluZw== 34349\nIEZvcndhcmQ= 34350\nINmI2YQ= 34351\nIGNvbnRleHR1YWw= 34352\nIGR3YXJm 34353\nIHByZWhl 34354\nIGdvdmVybmVk 34355\nhYQ= 34356\nIHRyYWJhbGhhcg== 34357\nIG5lZ8OzY2lv 34358\nINCx0L7Qu9GM0YjQvtC5 34359\n0LXRh9Cw0YI= 34360\nINC00YPRhQ== 34361\nIGZsb29kcw== 34362\nIGJvd2xpbmc= 34363\nIE9C 34364\nIEjDpHI= 34365\nIGdyYWRpbmc= 34366\n7KO864qU 34367\nIGdhcnM= 34368\nZGxpbmc= 34369\nIHJhaw== 34370\n64g= 34371\nY3JlYXQ= 34372\nINGJ0LU= 34373\nIG5laWdoYm91cnM= 34374\nZm9vZA== 34375\nUXVlcnk= 34376\nIGhlcm9pbg== 34377\naWNlcHM= 34378\nIEtpbmRh 34379\nTkVU 34380\nIG1hcmk= 34381\nIGltaXRhdGU= 34382\nIGFjaHRlcg== 34383\nIHNldHRsZW1lbnRz 34384\ncmFyZQ== 34385\nY2Npb25lcw== 34386\nIOuTnA== 34387\nIGZpaw== 34388\naXR1bmc= 34389\nINC80LDQutGB0LjQvA== 34390\nIGVsZg== 34391\nIGRhbGxh 34392\nIFBvbHNjZQ== 34393\nIFB1bA== 34394\n0KfRgtC+ 34395\nIE1vcmdlbg== 34396\n2K3ZhQ== 34397\nIHN1cHJlbWFjeQ== 34398\nIGt5cw== 34399\nIEh1cnJpY2FuZQ== 34400\nIEdUQQ== 34401\nIEZlaA== 34402\nIGZpbmFsbWVudGU= 34403\nbXVuZA== 34404\nIEtyaWU= 34405\nw6lwb3F1ZQ== 34406\nIFR1Y2tlcg== 34407\nSVRU 34408\nIGx1cg== 34409\nIGRpcHBpbmc= 34410\nw6R2 34411\nIGVlcnN0ZQ== 34412\nIEZsaW50 34413\nYmlsZHVuZw== 34414\n4Li54LmJ 34415\nIHRvaW0= 34416\nIHByYWN5 34417\nIHRyYW5zZm9ybXM= 34418\nIHNwZWVkaW5n 34419\nIHByZXNlbnRlcg== 34420\nIGZlbGxvd3M= 34421\nZmlsbGVk 34422\naWV6YQ== 34423\nIGFkdmlzaW5n 34424\nIEludGVydmlldw== 34425\n0LjQs9GA 34426\nd2Vocg== 34427\nIERhbnRl 34428\ncHR1cmU= 34429\niOusuA== 34430\nr7jr 34431\nkJA= 34432\nIENvdW50ZXI= 34433\nIGNyaXN0 34434\nIOynnA== 34435\nIGpldW5l 34436\nINGB0YLRgNCw0Yg= 34437\nIG1pZcSH 34438\nIHR1dG9y 34439\nIG1hc2FsYQ== 34440\nIHBvd2RlcmVk 34441\nIG5hdQ== 34442\nIEZyZWRlcmljaw== 34443\nIGJpbGxpbmc= 34444\nIEVpc2Vu 34445\nINC00L7QsdGA 34446\nIG1lc3Q= 34447\n5r0= 34448\nIHNuaXBw 34449\nIG1vbm8= 34450\nIEFsbw== 34451\nIE1lcmN5 34452\nw6lyaWVuY2U= 34453\nIGNhc3VhbHRpZXM= 34454\nIEFOTk9VTkNFUg== 34455\nIHRvY2Fy 34456\nIGJhY3RlcmlhbA== 34457\nSG8= 34458\nIHN0cmVhaw== 34459\nIEpFTk4= 34460\nIHBsYXN0 34461\n0YHQu9C10LQ= 34462\nIHJlYXBw 34463\nIHBheWNoZWNr 34464\nIG1pbmVycw== 34465\naGFidA== 34466\nIEphcA== 34467\n0L3Rg9GC 34468\nIHJlZGVtcHRpb24= 34469\nIHF1aXI= 34470\naG5saWNo 34471\nIGFjY3VtdWxhdGlvbg== 34472\nIHNob3Zl 34473\nIGFkcmVuYWxpbmU= 34474\nTWFrZQ== 34475\nIEhlcm4= 34476\nb3NzaW5n 34477\nIFZpbA== 34478\ndWJieQ== 34479\naGVydHo= 34480\nYnJlYWtz 34481\nIHNwdXI= 34482\nIERhaGE= 34483\nVVNUSU4= 34484\nIGNvbnRpbnVlcg== 34485\nIFNhdWw= 34486\nIO2PrQ== 34487\nIOuQmOuptA== 34488\nIOunkOyUgA== 34489\nINC+0LY= 34490\nIHN1c3BlY3Rz 34491\nIGxhcXVlbGxl 34492\nIE11Y2hhcw== 34493\nIHbDtmxsaWc= 34494\ndWxlbg== 34495\nIGltcHJlcw== 34496\nIGxvYmI= 34497\nZW5lZQ== 34498\nINC90LDQtg== 34499\nVGE= 34500\nIHLDqWFsaXTDqQ== 34501\nIFJleA== 34502\nIGhhcnZlc3Rpbmc= 34503\nIGVzdHI= 34504\n5rY= 34505\nb3NwYWNl 34506\nT1NT 34507\nIGRpc3R1cmJhbmNl 34508\nYXNzaWM= 34509\nIElzYWI= 34510\nIGTDqWNvdXY= 34511\nIEhhbXBzaGlyZQ== 34512\nIG9ybmFtZW50 34513\nIGx1w7Ru 34514\nIFVX 34515\nIGrEhQ== 34516\nIHJlc3BlY3Rv 34517\nIGNvbXVuaWRhZA== 34518\nIGNvbWlnbw== 34519\nYWduYQ== 34520\nIGludHJpbnNpYw== 34521\nIEFsdW1uaQ== 34522\nIHNlc2xlcmk= 34523\nIGVzdGltYXRpb24= 34524\n4oCU4oCU 34525\nIHByb2R1aXQ= 34526\n44CC44CN 34527\nINCy0YA= 34528\nIHdoaXJs 34529\nIGFjY2Vz 34530\nw6d1 34531\nIHZhcmlhYmlsaXR5 34532\nIHZvZGth 34533\naXRzdQ== 34534\nIGludGVybnNoaXBz 34535\nIGFsbG9jYXRl 34536\nUlI= 34537\n7ZuI 34538\nIGluc3RydWN0aW9uYWw= 34539\ndGFudA== 34540\nIOCuheCupA== 34541\nIGludml0ZXM= 34542\nIGhhaw== 34543\nIHNjYXJlcw== 34544\nIGVjbGlwc2U= 34545\n0L/QvtCy 34546\n0LrQvtC70Yw= 34547\nYXRpdmFz 34548\nIHN0YWJiZWQ= 34549\nIERPTQ== 34550\ncm9vdHM= 34551\nIFBpY3R1cmU= 34552\n7Zi8 34553\nIENIQQ== 34554\naWVj 34555\nxLHEsQ== 34556\naGFub2w= 34557\nIG1pc3VuZGVyc3RhbmQ= 34558\nUmF5 34559\nIHJvYWRtYXA= 34560\nb2N1bWVudGVk 34561\naXppb25l 34562\nIE9saXZl 34563\ncmlmdA== 34564\nINeU16A= 34565\nbGVzdA== 34566\nOzs= 34567\nIEVB 34568\n0L7QtNGD 34569\nIGhvYmJpZXM= 34570\nIGJ1cmlhbA== 34571\n0KQ= 34572\nbGVnZQ== 34573\nIEhK 34574\nIG9iamVjdGlvbg== 34575\nY3Rvcnk= 34576\nIGluY3JlbWVudGFs 34577\nIGd5bW4= 34578\nIGVwaWRlbWk= 34579\n0YHRi9C7 34580\nw5E= 34581\nIGFkdmFuY2VtZW50 34582\nIHBhcmNo 34583\nTmV3cw== 34584\nIGF5cg== 34585\n0LvQsNC8 34586\nINec16k= 34587\nIGRpcGxvbWE= 34588\nIHJvYmJlZA== 34589\nT25seQ== 34590\nIGluY3Vy 34591\nIGNoYW50aW5n 34592\nIO2VtOuPhA== 34593\nIHJpY2hlcw== 34594\nIENhcm1lbg== 34595\nIG5vc3Rybw== 34596\nzrvOrQ== 34597\nIFBvd2Rlcg== 34598\n4LmA4Lir 34599\nIOyeiOycvOuptA== 34600\nIGdlcsOnZWt0ZW4= 34601\nIFBpa2FjaHU= 34602\n0LXQvNC+0L0= 34603\nT0xM 34604\nIHBsYW5ldGFyeQ== 34605\nIHNsb3dz 34606\nIGNsb2Nrd2lzZQ== 34607\nYWxpb24= 34608\nIOyM 34609\nIHZlcm4= 34610\nIGhvbW1l 34611\nIGVuZHBvaW50 34612\nIGlubm9jZW5jZQ== 34613\nIGVsZW1lbnRvcw== 34614\nIHNvcGhvbW9yZQ== 34615\nIG5vdGlvbnM= 34616\nIENvdWxkbg== 34617\ncHVy 34618\nIHphdA== 34619\nIG9ic2Vzcw== 34620\nIG1vdGl2bw== 34621\nIEt1Yg== 34622\nIERydWc= 34623\nQW50 34624\nIFBsYXllcnM= 34625\nIEh1bWFucw== 34626\nIG1lbGVl 34627\nIFdpbGRsaWZl 34628\nIFZQ 34629\nIHZvbGNhbmlj 34630\nIGNvbWlu 34631\nIEd1YW5n 34632\nIM+EzrnPgg== 34633\nINC+0YHQvtCx0LXQvdC90L4= 34634\nIFNpemU= 34635\nTGlzdGVu 34636\nIEFhYQ== 34637\nYXBwcm8= 34638\nIGJhcmJhcg== 34639\nIFBhcmtpbnNvbg== 34640\n0L3Rj9GC0Yw= 34641\nIHVuZGVyZXN0aW1hdGU= 34642\nIHN1YnN0aXR1dGlvbg== 34643\nIGNvc21ldGlj 34644\nIHdpbGxlbg== 34645\nIGJlaWRl 34646\nYW5uaQ== 34647\nIGNvbmRpdGlvbmVk 34648\nIERlYmJpZQ== 34649\nIGlzdG8= 34650\nIEVkd2FyZHM= 34651\n7JuM7JqU 34652\nINGC0L7Qsg== 34653\nIGFiYnJldmk= 34654\nIE3DvG4= 34655\nIFByaW5j 34656\nIExpYW5n 34657\nIHN0aW5r 34658\nIHJhZGlvYWN0aXZl 34659\nIGFjb250ZWM= 34660\nIHVuY29u 34661\nIFR1cmJv 34662\nIGtpc3Nlcw== 34663\n0LXRgtGA0L7Qsg== 34664\nIGZyb250aWVy 34665\nIFNweQ== 34666\nIEJlbGFydXM= 34667\nIENCUw== 34668\n4buX 34669\nYW1vdG8= 34670\n7ZWc642w 34671\nINGB0YLRgNC+ 34672\nIEVuZmlu 34673\nIGJyZWFkdGg= 34674\nIENhZmU= 34675\nIERhZsO8cg== 34676\nIEJvdXI= 34677\nYXJhcw== 34678\nIGJsdWVwcmludA== 34679\nYW7EsQ== 34680\nIGNvbnN0YW50cw== 34681\nIGF0dGFja2Vy 34682\nIEZvcm11bGE= 34683\nemHEhw== 34684\nIHNvd2ll 34685\nIGV5ZWJyb3c= 34686\nb2Jvb2s= 34687\nIHNldHplbg== 34688\nb25zaWRlcg== 34689\nYXduaW5n 34690\nIHPDtnlsZXll 34691\nIGludmFkZWQ= 34692\nIHByb25vdW5z 34693\nIGRvYnJ5 34694\nU2k= 34695\nINCl0L7Rgg== 34696\nIHZvbGxleWJhbGw= 34697\nIGxhbWVudA== 34698\naXNjaGVz 34699\nYXJtZQ== 34700\nYXBp 34701\nIFdpa2k= 34702\n0LvQuNGI 34703\nIGthc2lo 34704\nIHBlc3M= 34705\nINGE0L7Rgg== 34706\nIFN1bA== 34707\nIHBzZXVkbw== 34708\nIG1lbW8= 34709\nIOyXsOyKtQ== 34710\nINC00L7Qu9C70LDRgNC+0LI= 34711\nINC/0LXRgNC10Lw= 34712\nIFJlYWNo 34713\nbWlyYWw= 34714\nYWx0ZWQ= 34715\nIHN0YXR1dA== 34716\ncmVhZGluZw== 34717\nIHPDtnlsZWQ= 34718\nIExpbmRzZXk= 34719\nIEFobWFk 34720\n67aA6w== 34721\nINCh0LXQs9C+0LTQvdGP 34722\nIHByenlnb3Q= 34723\nIGh5c3Rlcg== 34724\nVVJF 34725\nIE5laWdo 34726\nUmVwb3J0ZXI= 34727\nIEJ1bnU= 34728\nIFRyZWF0eQ== 34729\nIFJhbms= 34730\nIEZhbWU= 34731\naW5pc2hlZA== 34732\nIGdlYXJlZA== 34733\nIGNvbXBvc2U= 34734\nb2RpYQ== 34735\nIExvbg== 34736\nIGplc3RlxZtteQ== 34737\nIERJUkVDVE9S 34738\nIGVsa2Fhcg== 34739\nIFZpZWw= 34740\n15DXqQ== 34741\neW50aGlh 34742\nIG3DqHJl 34743\nIFRvbWF0bw== 34744\nIGV4YXRhbWVudGU= 34745\nbmnEmQ== 34746\nIEZyZWk= 34747\nIERpZg== 34748\nIG9wZW5pbmdz 34749\nIGdyYXBoaWNhbA== 34750\nINGD0LTQvtCx 34751\nINCy0YHQvw== 34752\nIFdlZWtseQ== 34753\n0LXQstCw 34754\nIGhhbmdz 34755\nIHVuc2FmZQ== 34756\nIGVtYmxlbQ== 34757\nIEtvbGxlZ2lubmVu 34758\nYWxheQ== 34759\nIGtzaQ== 34760\nIGhpZGVz 34761\nIG9sbWF5 34762\nIGVudHN0ZQ== 34763\nIGFydGhyaXRpcw== 34764\nw59lcmRlbQ== 34765\nIGJpbm5lbg== 34766\nIGxpc3RlbnM= 34767\nIEhlc3M= 34768\nIExvdWlzZQ== 34769\nbGRlbg== 34770\n0LXQvdGB 34771\nIFZlcnNpb24= 34772\nIEFncmljdWx0dXJl 34773\n7Iqk66W8 34774\n0LzQsNC9 34775\n64Sk7JqU 34776\nIHdpbmVz 34777\nIElORg== 34778\ncnVs 34779\nIEpL 34780\nxLF5b3JsYXI= 34781\nc2hpZWxk 34782\ncmVhdGg= 34783\nIHRlcnVz 34784\nIEx1bQ== 34785\nIGFudGljaXBhdGlvbg== 34786\nIGFjY3VzdG9tZWQ= 34787\nIE1pbmE= 34788\nIHdpZWxk 34789\naW/DqA== 34790\nbWVyYQ== 34791\nIGNvdW50ZG93bg== 34792\nIGNsaW5n 34793\nIGNvbW1lbmQ= 34794\nIGZha3Rpc2t0 34795\nIGRlZmVuc2Vz 34796\nIGNvY2twaXQ= 34797\nINC60L7QvNCw0L3QtA== 34798\nIGRpc2h3YXM= 34799\nIFRoYW5vcw== 34800\nIGtpZG5leXM= 34801\nIHNlaGU= 34802\nIG1pY3JvYmVz 34803\nIGN1ZmY= 34804\nINCy0YvRgdC+0Lo= 34805\nIFNwaWN5 34806\n4K614K6w 34807\nY3VsdXM= 34808\nb3Jj 34809\naXhlcw== 34810\nIENyZWRpdA== 34811\nIHJhag== 34812\nIGJyaW5ndA== 34813\nIE5pc3M= 34814\nIGdyaW0= 34815\nIFNPTA== 34816\nIHRlbmlt 34817\nIFN1ZGFu 34818\nIFNwYXJ0 34819\nIHByb21vdGVz 34820\nIE5vc3Nh 34821\nINGB0L7RgdGC0L7Rj9C90Lg= 34822\nIOywqQ== 34823\nIHVuY29udA== 34824\nIExpYmVyYWw= 34825\nINCi0L7Qu9GM0LrQvg== 34826\nIFZpZWxl 34827\nIGt0w7NyZWo= 34828\nICoqKio= 34829\nTWF4 34830\nINCn0YLQvtCx0Ys= 34831\nMzUw 34832\nIO2YvOyekA== 34833\nIOu2hOuTpOydtA== 34834\nIHdhcnA= 34835\nIHRlbmdh 34836\nIHN5bXBhdGhldGlj 34837\nIGJpemk= 34838\nIFphY2s= 34839\naWVkbw== 34840\nIOuJtOw= 34841\ncGllbA== 34842\nINGC0L7Quw== 34843\nIHNjYWxlZA== 34844\nIFBFVEVS 34845\nIENPTU0= 34846\nIENhbWU= 34847\nIGNhdGFzdHJvcGhl 34848\nIHN3ZWF0eQ== 34849\naWdyYXRpb24= 34850\nIHN0dWZmaW5n 34851\nIM+Azr/Ou8+N 34852\nIERyaXZlcg== 34853\nenlzdA== 34854\nVGVjaA== 34855\nIGFzc2Vzc2Vk 34856\nIFN1cmZhY2U= 34857\nxLFyxLFt 34858\nc3Vy 34859\nbGVyd2VpbGU= 34860\nINC00L7Qsw== 34861\nIHNodXR0aW5n 34862\nIGZyYWN0aW9ucw== 34863\nINGB0L7Quw== 34864\nZXZlcnlvbmU= 34865\nIGVybg== 34866\nINCd0L7Qsg== 34867\nIGRlZmVuZGVycw== 34868\nIHZlcnN1Y2h0 34869\nIHBvbGl0eQ== 34870\nINCf0L7QvQ== 34871\ndmVyc3TDpG5k 34872\nIGJyb3dzZXJz 34873\nIHRyYW5zZm9ybWF0aXZl 34874\nIGRpY3RhdGU= 34875\nIExFR08= 34876\nIG5pbmd1bmE= 34877\n6rSR 34878\nIHBpeno= 34879\nIEhhcm9sZA== 34880\nIExvcGV6 34881\n2r7bjA== 34882\nYW7EsXo= 34883\nYXRjaGV0 34884\n2YrYqg== 34885\nIGxlcm5lbg== 34886\nIOq3gOyXrA== 34887\nIGhvdXNlZA== 34888\nIGNsZWFuc2U= 34889\nIFdBVA== 34890\nbGFyYXRpb24= 34891\nIGJ5dGVz 34892\nIHR1Y2tlZA== 34893\nIGZhdWx0cw== 34894\n0LTQvg== 34895\nRlg= 34896\nIOyWvOuniOuCmA== 34897\nIGRlZm9ybQ== 34898\nIGNvbnRyYWN0aW5n 34899\nIFRJTUU= 34900\naXJzZQ== 34901\nIG5lYmVu 34902\nIGNlcmM= 34903\nIEFybXN0cm9uZw== 34904\nIHRlc3Rlcg== 34905\nIHBhcmZhaXQ= 34906\nIGplYWxvdXN5 34907\nIHRveGlucw== 34908\nIGRpc2JlbA== 34909\n0YPRgNGL 34910\naW1wcmVzc2lvbg== 34911\nIHByb3N0YXRl 34912\nIGZpcmV3YWxs 34913\nIGNsYXNzaWNz 34914\n0LXRh9GM 34915\nIHNvY2lhbGlzbQ== 34916\nIGdyYWNpb3Vz 34917\nINGB0L3QvtCy0LA= 34918\nINC00L3Rjw== 34919\nIGJ1cm5lcg== 34920\nIE1pbm9y 34921\nIOyasOumrOs= 34922\nIGplZGVz 34923\nIGNvbnRpbnV1bQ== 34924\nIGhvdHM= 34925\nIG9jY3VycmVuY2U= 34926\nIGFkbWluaXN0ZXJlZA== 34927\nINC30LDQvNC10YI= 34928\nIGhlc2l0YXRpb24= 34929\nIGRyaWxscw== 34930\nZXJjYQ== 34931\nINCy0YLQvtGA0L7QuQ== 34932\nIHN0ZWFkaWx5 34933\nIGluc2FubGFy 34934\nIGloYW4= 34935\n7ZE= 34936\nIGhlbHBlcg== 34937\nIFNlbmlu 34938\n0L7QstCw0L3QuNC1 34939\nIEVSSUM= 34940\nYmxh 34941\nIEFjYWRlbWlj 34942\nIGh1bWFuaXRpZXM= 34943\nYmxhY2s= 34944\ndW1weQ== 34945\nb3J0ZXg= 34946\nIOygiOs= 34947\nINil2YY= 34948\nIGRpc2Nsb3Nl 34949\nIEVsaWphaA== 34950\nIM67zq0= 34951\nIFF1ZXI= 34952\n2KjZhA== 34953\nVGVsbA== 34954\nYXJsZQ== 34955\n0ZbRgA== 34956\nIGF1Z21lbnRlZA== 34957\nIOu5hOyKtw== 34958\nIGFuZHJvaWQ= 34959\n4KSk 34960\nYXJtYQ== 34961\nIHN6ZXI= 34962\nZ2VvcmQ= 34963\nIGdlZWs= 34964\nIHlldXg= 34965\nIHBvbmc= 34966\nIHRvcnR1cmVk 34967\nIEJhdGg= 34968\nemln 34969\nYXNvbmFibGU= 34970\nIG5ldHM= 34971\nIGJhcnU= 34972\nIEZsYXQ= 34973\nIFZhdGVy 34974\nIFRlcnJvcg== 34975\nIEF2bw== 34976\nIGNlcmVtb25pZXM= 34977\ncm9l 34978\n2YHYsw== 34979\nT3Bz 34980\nIGh5dmlu 34981\nIGFwcmVzZW50 34982\nb2xvcg== 34983\nINC40LPRgNGL 34984\nb3J0b24= 34985\nIOq3uOuerA== 34986\nIGxvb2tpbg== 34987\nIFRZ 34988\nIE1pbnQ= 34989\nQWRk 34990\nIG1pdGU= 34991\nIFNtb2tl 34992\nIG5vdGE= 34993\nIG1vc3M= 34994\nIEFiZW5k 34995\nIOy7qA== 34996\nIGV4YWdnZXJhdGVk 34997\nZmlyZXM= 34998\nIHJlZGlzdA== 34999\nZmZpdGk= 35000\nIG9wZW5uZXNz 35001\n6rCQ7J20 35002\nZW5kZXU= 35003\n0LXQvdC90L7QuQ== 35004\nV2F0Y2g= 35005\nIGF2YXRhcg== 35006\nIFBleQ== 35007\ndXJ1bg== 35008\nIHNlbnph 35009\nIOyngOyXrQ== 35010\nIE5hdG9taWFzdA== 35011\nIGVtZXJnZW5jZQ== 35012\ncmF5cw== 35013\nIGNyYWZ0ZWQ= 35014\nZ2FyeQ== 35015\nw7xuZw== 35016\nLSI= 35017\nIGhhY2tlZA== 35018\nIHN0cmF5 35019\nZW5jaWU= 35020\nZW1v 35021\nIGNvbWVu 35022\nIEvEsXo= 35023\nIEphc21pbmU= 35024\nIEhpbmRp 35025\nbWFuYXM= 35026\nIGluZmluaXRlbHk= 35027\nZW1vbg== 35028\n7J24642w7JqU 35029\namFr 35030\nIHJvYXJpbmc= 35031\nw6lyaXF1ZQ== 35032\nc3dlaXNl 35033\nIFJvbGV4 35034\nIFN0dWFydA== 35035\nYm5i 35036\nIGRpYWdub3Nl 35037\nIGNvaGVyZW50 35038\nIE1K 35039\nIHBpa2U= 35040\nbGF2 35041\nIG9yY2hlc3RyYWw= 35042\n0LDRgdGC0Lg= 35043\nIHRlcm1pbmFy 35044\nIGdhdGhlcmluZ3M= 35045\nIGNvbXBsaWFudA== 35046\nIHVwZ3JhZGluZw== 35047\nIHJlZ3VsYXRvcg== 35048\nIGxhbsOn 35049\nIG1lcmNoYW50cw== 35050\ndGF3YQ== 35051\nIG1vbml0b3JlZA== 35052\nIHJlbmRyZQ== 35053\nIHVudGVyd2Vncw== 35054\nYW5ndWFyZA== 35055\nZ2FyZA== 35056\nIEJlbG93 35057\nZHVpbm8= 35058\nINCm0LU= 35059\nIGltcGVkYW5jZQ== 35060\n7Jyh 35061\nIGFrdHVlbGw= 35062\nIFZhdGlj 35063\nIHN0ZXdhcmRz 35064\nIGJyaWdodGVzdA== 35065\nIGtlbm4= 35066\nIGthdQ== 35067\nIE1hdHJpeA== 35068\nIEJhcms= 35069\nIPCfkQ== 35070\nIHRhcGVy 35071\nIGNhc2lubw== 35072\n16jXlA== 35073\neXNpY2Fs 35074\nIGJ1aWxkZXJz 35075\nIGN6xYJvd2ll 35076\nIE5lcGFs 35077\nICEi 35078\nIHRlcm1l 35079\nIGlubnljaA== 35080\nIG1hdGhz 35081\nIGRyYWZ0ZWQ= 35082\nIEJhbGs= 35083\nIGhlc2l0YW50 35084\nIHZvbHRhcg== 35085\nIHJldml2ZQ== 35086\nINGE0LjQu9GM0LzQsA== 35087\nIGFzc2Fzc2lu 35088\nIFNvbHV0aW9ucw== 35089\nIGR1ZWw= 35090\nIGJlYXJpbmdz 35091\n4LiE4Liw 35092\nIHJvb2tpZQ== 35093\naWthdA== 35094\nIGJpc2N1aXRz 35095\nIGNvcmRz 35096\n0YPQstCw0YLQuA== 35097\nQVJJTg== 35098\nIHByb2dyZXNzaW5n 35099\nIEdpcg== 35100\nIHBlbmV0cmF0ZQ== 35101\nIFN0b3JhZ2U= 35102\nZWlnaHQ= 35103\nINGC0YDRgw== 35104\nIGRvbsOtdA== 35105\nIHNpemlu 35106\nIG91dGRhdGVk 35107\nINC90LDRiNC4 35108\nIGFmZmly 35109\nIHNwb29ucw== 35110\nIG9uaQ== 35111\nIGZsYW5r 35112\nIEdvbA== 35113\naMOj 35114\nIHDDqXJp 35115\nIGhvbm9yYWJsZQ== 35116\nIEJyZWF0aGU= 35117\nc2NlbmVz 35118\nIG9idmlhbWVudGU= 35119\n0LjQutGB 35120\nINep157X 35121\nIHNtb290aGll 35122\nnojr 35123\nIGRpbWU= 35124\nIO2WiOyWtOyalA== 35125\nIGFwcGVs 35126\nIENhdGhvbGljcw== 35127\nIHNpbmdsZXM= 35128\nIGxhdGVu 35129\nIMOnw7xua8O8 35130\nIFZhZGVy 35131\nIHZhcmTEsQ== 35132\nIElzdGFuYnVs 35133\nZ3LDqQ== 35134\nIEVsc2E= 35135\nw6ts 35136\nIGludmVjZQ== 35137\nIGNyYW5l 35138\nIG9iZQ== 35139\nIFNoYXJr 35140\nIHNtYWNr 35141\nIHJlc3RvcmluZw== 35142\nLlw= 35143\nIOu5oOs= 35144\nIGZhZGVk 35145\ndW1iZXJz 35146\nU2luZ2luZw== 35147\nIGRlcHJlc3Npbmc= 35148\ndGhlc3Q= 35149\nIFdhaHI= 35150\nIG11bHRpdHVkZQ== 35151\n0YDQsNCy0YHRgtCy0YPQudGC0LU= 35152\ncmlqaw== 35153\nZWth 35154\nIGNvbXBsZXRlcw== 35155\nIFdlbGxz 35156\nIHJveQ== 35157\nIFByYXk= 35158\nIEthbGF1 35159\naXppbg== 35160\naWHFgmVt 35161\nIGxvY29t 35162\nIE5hc2h2aWxsZQ== 35163\nIFBlbnRhZ29u 35164\n66+4 35165\nIE5FVw== 35166\nxIXEhw== 35167\nw61zcw== 35168\nIG1hcnJ5aW5n 35169\nIGZldWQ= 35170\n7ZmV 35171\nKSE= 35172\nIE9wZXJhdGlvbnM= 35173\n0YPRlA== 35174\nIG1vamU= 35175\nIGluc3RydWN0ZWQ= 35176\nIOuIhOq1rA== 35177\nINeU15I= 35178\nINC/0L7QvNC+0YnRjNGO 35179\nIHNhYmlh 35180\n7JWY7Ja07JqU 35181\ncGxhbmU= 35182\ncHJp 35183\nINC/0L7Qu9C90L7RgdGC0YzRjg== 35184\nIEtpdHR5 35185\nIHByw7Nwcmlv 35186\nZWRlcmU= 35187\nIGludGVyZXNhbnRl 35188\nINC00LU= 35189\nIGNvbmRlbnNlZA== 35190\nIGF2ZW50 35191\nVE9S 35192\nIGdyZWFzeQ== 35193\nQVJL 35194\nb3J0YQ== 35195\nQUo= 35196\nIGRpc3JlZw== 35197\nIGNvcnJlY3Rpb25z 35198\nIHN0ZXJv 35199\nIGluZmx1ZW56YQ== 35200\nIGRlc3Nlcw== 35201\nIGJhbGxvdHM= 35202\nIG1lZ2V0 35203\nIG1hZmlh 35204\nIGLDtmw= 35205\nbm9zdA== 35206\nINGB0YLQsNGC0Yw= 35207\nIHJlc3BvbmRlcg== 35208\nIGhpbnRlbg== 35209\nZ3Jhdg== 35210\n4Lit4Liw 35211\neW5jaHJvbg== 35212\nIHZpZW5z 35213\nIHNhbW8= 35214\nIGR0 35215\ncGFubnQ= 35216\nIMWbd2lhdA== 35217\nINC30LDQv9C40YE= 35218\nIG1lcmdlZA== 35219\nIGtlcA== 35220\nIG1pc2xlYWRpbmc= 35221\nIGRpZ2Ftb3M= 35222\nIGFtbW9u 35223\nY2hldA== 35224\nIOqwgOyguA== 35225\nIHVuaQ== 35226\nIOuQmOuKlOuNsA== 35227\nINC90LDQv9GA0LDQsg== 35228\nINC60L7RgtC+0YDQvtCz0L4= 35229\nIGFuaW1hdGU= 35230\n15XXkNc= 35231\n0LXRgNCy 35232\nIG1pbmNlZA== 35233\nIGthdW0= 35234\nz4DOtQ== 35235\n0LvQtdCz 35236\nZXhpc3Rpbmc= 35237\nIHBsYXRhZm9ybQ== 35238\nIEtSSVM= 35239\n7Jug 35240\nIEZhbWlsaWVu 35241\nIExpYnlh 35242\nIGJpb2RpdmVyc2l0eQ== 35243\nIGlkaW90cw== 35244\naXJkaQ== 35245\nIHN6eWI= 35246\nIFJvbGxpbmc= 35247\nw7xjaHQ= 35248\nINGD0LTQuNCy 35249\n0YHRg9C0 35250\nIHJlYWxpemFy 35251\nIGNhbm5lZA== 35252\nINGA0LDQvQ== 35253\nIG1ldGFib2xpYw== 35254\nIEJlZWY= 35255\nIGtpbGth 35256\n0LvRjtGB 35257\nIHJlZ2lzdHJ5 35258\n0LzQvtGC0YDQuNGC0LU= 35259\nIHZpZWzDpA== 35260\nIG9kYw== 35261\nIGNvbmRlbW5lZA== 35262\nZmFs 35263\nIERpbA== 35264\nd2/Fm2Np 35265\nQXc= 35266\nIHN0YXRpc3RpY2FsbHk= 35267\nIHNvZ2Vu 35268\nIEJFVEg= 35269\nIHNoYXZpbmc= 35270\nb2NhbA== 35271\nIEZ1bm55 35272\nIHBlYWNlZnVsbHk= 35273\nIGFkZGljdGl2ZQ== 35274\nIEluc2VydA== 35275\nbGF1Zg== 35276\nIGV4cGVyaWVuY2lh 35277\n0LjRgtC10LvRjw== 35278\nw61nZW4= 35279\nw6FnaW5h 35280\nIGFiZG9tZW4= 35281\n7ZWc64uk 35282\naWN1cw== 35283\naW1hbmE= 35284\n7I2o 35285\nYXJjaGluZw== 35286\nIGtvbmtyZXQ= 35287\n7JWY6w== 35288\n0LXQutCw 35289\nb3VmbA== 35290\naXZlbA== 35291\nIG51ZGU= 35292\nw6h0cmVz 35293\nIG1vbnNpZXVy 35294\nIGNsYXNo 35295\nIHRoZXJhcGlzdHM= 35296\nIGN1YmVk 35297\nIHJldHJvdXZlcg== 35298\nIHdhdmVmb3Jt 35299\nIHBvdGVt 35300\nIEZvcm1lcg== 35301\naXNpw7Nu 35302\nINeQ150= 35303\ndW5kb3M= 35304\nIE1laW51bmc= 35305\n2LXZhA== 35306\nIEp1ZGU= 35307\nIG7DpXI= 35308\nIExlb25hcmRv 35309\nIENyaXN0bw== 35310\nIEdPVA== 35311\n0YHRgtGA0YPQug== 35312\nTEFO 35313\nIGfDpW5n 35314\nIGTDqWI= 35315\nIEZyYW5rZnVydA== 35316\nIGNyYXBweQ== 35317\nIGxpbA== 35318\nYW5uw6ll 35319\nINC80LXRgdGC0LU= 35320\nUkVU 35321\nIE5lcg== 35322\nIENPU1RB 35323\nIGplZGVt 35324\nIGN1cnRhaW5z 35325\nIGl0ZXJhdGlvbnM= 35326\nIHVuYXY= 35327\nIHBsYXF1ZQ== 35328\nb3J1bQ== 35329\nIM62 35330\nIG7Dum1lcm9z 35331\nIGRlc2Fw 35332\nsr0= 35333\nIGNvbXBpbGVk 35334\nIHJlZmxl 35335\nIHJhbmtpbmdz 35336\nIHJlcGFpcmVk 35337\nINCd0LDQv9GA 35338\nIGRvd25sb2Fkcw== 35339\nIGFybW91cg== 35340\nINeZ15XXqteo 35341\nIGxvbmdldml0eQ== 35342\nIFRPTkVS 35343\nINC60L7QvNC80LXQvdGC0LDRgA== 35344\nIGN6ZWdv 35345\nIG5vdGlmeQ== 35346\nIGFpcnBvcnRz 35347\nIGVuZHVyaW5n 35348\nbGV0dGU= 35349\nIGFwcGFyYXQ= 35350\nIGhhYmls 35351\n4buHYw== 35352\nbmFk 35353\nSUNP 35354\nIEJyYWg= 35355\nIHNlZ8O6bg== 35356\nIGdvdmVybm9ycw== 35357\na2FoYQ== 35358\nIFNjaGx1c3M= 35359\nIG9kcG93aWVk 35360\naXJ0aW5n 35361\nIHJlbXBs 35362\nIEFib3JpZ2luYWw= 35363\naWRlbnRhbGx5 35364\nIGVuaGFuY2luZw== 35365\nbGljdGluZw== 35366\nIEhhd2FpaWFu 35367\nIHN0cml2aW5n 35368\nIE5pZXQ= 35369\nIHpuYWN6eQ== 35370\nIG9iZWRpZW5jZQ== 35371\nIG7DpWdvdA== 35372\nIGV4cGlyZWQ= 35373\nIDE5MTg= 35374\ncHJlc2VudGVk 35375\nIHByb3dhZA== 35376\nIFRlcnI= 35377\nIFByaW5jZXRvbg== 35378\nIG1vcmdlbg== 35379\nIGF0dHJhY3Rpbmc= 35380\nIFNpZ21h 35381\naWduZXI= 35382\nIFJlY2h0cw== 35383\nIFBla2k= 35384\nIG1ldGh5 35385\nIGhhbW0= 35386\nIGRpcmVpdG8= 35387\nIGRlbGVnYXRpb24= 35388\n0LjQstCw0Y7Rgg== 35389\nIGdpbg== 35390\nWW91bmc= 35391\nIGRlcGVuZGVuY2llcw== 35392\nIEJyYWRsZXk= 35393\nYnVkcw== 35394\nIGZpcw== 35395\nIHB5dGFuaWU= 35396\nIGludGVyY29ubmVjdGVk 35397\nIGVtYmFpeG8= 35398\nIFNhcw== 35399\nIHJ1aA== 35400\nIFNpY2h0 35401\nU3Vy 35402\nIHN1cGVyYg== 35403\nIFNhYmJhdGg= 35404\nIERhbmdlcg== 35405\na29s 35406\nIGhvdQ== 35407\nc3VwcA== 35408\nIE5hY2lvbmFs 35409\nIHN1Y2Nlc3Npb24= 35410\nIHbDoQ== 35411\nIE1hw59uYWhtZW4= 35412\nIEplc3NpZQ== 35413\nIElkYWhv 35414\nZm9yZXN0 35415\nhZg= 35416\nINee15M= 35417\nINij2Yo= 35418\nIHN3ZWV0aGVhcnQ= 35419\nIG5lYXRseQ== 35420\nIEV2YW5nZWw= 35421\n6rOh 35422\nIFN1aXRl 35423\nw7pibGljYQ== 35424\nINGD0LvQuA== 35425\nIEFubm91bmNlcg== 35426\nbGlnaA== 35427\nIHNlbnNhdGlvbnM= 35428\nIHNoZWx0ZXJz 35429\nIGhhcnQ= 35430\nIHNxdWVlemluZw== 35431\nIFJpdmVycw== 35432\nIENvb2tpbmc= 35433\n7LGF 35434\ncGVyc29uYWw= 35435\nIG1hbm9z 35436\n0ZHRgtGB0Y8= 35437\nd2lq 35438\nIGdvZ2c= 35439\nIE1pbGxp 35440\nIEZQ 35441\nw7xuc3Q= 35442\nIExT 35443\nIHNwcmF5aW5n 35444\nIGZhdXg= 35445\nIGF1dG9ncmFwaA== 35446\nb2xvZ2lj 35447\nIHRvcm1lbnQ= 35448\nIGVuY3J5cHRlZA== 35449\n4buF 35450\nIGVzdHJl 35451\n4LE= 35452\nIHN0dW1ibGVk 35453\nIGFpZGVy 35454\nIHNhYmVu 35455\neHRlcg== 35456\nIENpdGllcw== 35457\nIFTDvHJr 35458\n64ul 35459\nY2hpbmU= 35460\nIHRvcHBpbmc= 35461\nIHBvaXNvbmVk 35462\nIFJvbWFuaWE= 35463\n15PXmQ== 35464\ngOuhnA== 35465\nINC/0L7RgNGP0LQ= 35466\nIGNoaXJwaW5n 35467\nIOyZhOs= 35468\n15HXog== 35469\nIGN1YW50bw== 35470\nIGRvbmF0aW5n 35471\nIFJlZ2VudA== 35472\nIEJlcnVm 35473\nIGRpc3RyYWN0aW5n 35474\nIHN0YW1pbmE= 35475\nIERhcnJlbg== 35476\nIOy2lQ== 35477\nbGlzdHM= 35478\nZGFs 35479\nY2h1c3M= 35480\nIGVjb25vbWlzdA== 35481\nb3JndA== 35482\nIGlzdGl5b3J1bQ== 35483\nIFN1cnByaXNl 35484\nIEhhbw== 35485\nIOy1nOqzoA== 35486\nIEdX 35487\nIElubmVy 35488\nIHF1aWVyZW4= 35489\nIG1pbmRlZA== 35490\nIHN1cGVyY29tcHV0ZXI= 35491\nIGRpYWdyYW1z 35492\n7Yqc6w== 35493\n6rKg7Ja0 35494\nINC+0LHRitGP0YE= 35495\nIGVzdGFiYW4= 35496\nIGRlc3Ryb3lz 35497\nIEJyZWFraW5n 35498\nIGthcsSxxZ8= 35499\nIHJlYnVpbGRpbmc= 35500\nnOuMgA== 35501\n0LvQuNCy0L4= 35502\nIFNhdWNl 35503\nIEZ1c2lvbg== 35504\n15XXntc= 35505\nIFF1aW5u 35506\nIGdhdWNoZQ== 35507\nINmI2KM= 35508\nIMg= 35509\nIHRlY2hubw== 35510\nIGRpc3BhdGNo 35511\nIGHFn2s= 35512\nIGVpbnplbA== 35513\nIEdtYWls 35514\n554= 35515\nIOqwnOyduA== 35516\nINGB0LXQvNGM 35517\nIGpvdXJuZXlz 35518\nIGlodA== 35519\nIGZpYnJl 35520\nIGRyYW1hcw== 35521\nb3VjaGVk 35522\nIHJlbmFtZQ== 35523\nINC+0L/QtdGA 35524\nIHBvbw== 35525\nIERydQ== 35526\nINC40YLQvtCz 35527\nIHphc3Q= 35528\nIGNveg== 35529\nIHp1Y2No 35530\nIG9idGFpbmluZw== 35531\nIGNvbW11dGU= 35532\nIHN1Ym1lcg== 35533\nIFZpc2g= 35534\nIFJhYmI= 35535\nb2dn 35536\nIGh1dA== 35537\n7ZaI7Ja0 35538\nZXJlbWk= 35539\nIM68zrE= 35540\nIGRpc2t1dA== 35541\nINCx0YPQug== 35542\nIGltcGFpcmVk 35543\nZGVwZW5k 35544\nINmI2Kc= 35545\nINGA0YPQug== 35546\nINCx0LDRgA== 35547\nIG94aWRhdGlvbg== 35548\nIHNpdHVhw6fDo28= 35549\nyZlu 35550\ndcOnw6Nv 35551\nIHNhZ3Rl 35552\nIFNFUg== 35553\nIENha2U= 35554\nIHR1cm1lcmlj 35555\nIEthaw== 35556\nYnVuZw== 35557\nIEvhuZvhuaPhuYdh 35558\nIHBvaXNvbmluZw== 35559\nIHNsaXBwaW5n 35560\nIFNheXM= 35561\nw7JuZw== 35562\nwqs= 35563\nIENsYXVkaWE= 35564\nIENoYXJhY3Rlcg== 35565\n0L3QuNGG 35566\nY29hdA== 35567\nIHByb2dyZXNzZWQ= 35568\nIEZlcmd1cw== 35569\nIOyYpOuK 35570\nIG9hdA== 35571\nb3JkYWJsZQ== 35572\nIExleQ== 35573\nIEhlcmF1cw== 35574\nIHJlc3VsdGFkb3M= 35575\nIEtheWxh 35576\nIHJpZmY= 35577\nIGNoZWdvdQ== 35578\nIHhp 35579\nIHNwYWNpb3Vz 35580\nIHJlY29nbmlzZWQ= 35581\nIGVjaA== 35582\nIFRpZQ== 35583\nIGxhdW5jaGVy 35584\nSmlt 35585\nIHN1cHByZXNzaW9u 35586\nIEltcG9zc2libGU= 35587\nIGd1aXRhcnM= 35588\nIEZvdXJpZXI= 35589\n0LjRh9C10YHQutC40Lk= 35590\nIFRoZXJhcA== 35591\nIEthZg== 35592\nY2VudGVyZWQ= 35593\nINGB0L7QvtGC0LLQtdGC 35594\nIGtsaW0= 35595\nIGNhcmJvaHlkcmF0ZXM= 35596\naWduYW50 35597\nIEFzdHJvbg== 35598\nIGVtcGxl 35599\nIGRyYXN0aWM= 35600\nINC80LjRgNC1 35601\n0LLQuNC9 35602\ndXc= 35603\nIHByZXR0aWVy 35604\nIGRvbnV0cw== 35605\nIEF0aGVuYQ== 35606\nIGRpc3NlcnQ= 35607\nIHBsYW50ZQ== 35608\nIHVyYW5pdW0= 35609\n7J2M6w== 35610\nYXLDqQ== 35611\nIHJ6ZWN6 35612\nIGRpc3BsYXlpbmc= 35613\nIHNhcmM= 35614\ncsOjbw== 35615\nIHRhbXBvY28= 35616\nIHBoaWxvc29waGVycw== 35617\nIFJlY2h0 35618\nIGNvbWVudGFyaW9z 35619\neXNl 35620\nIOycpA== 35621\nIG1pc2U= 35622\nIEdpbg== 35623\nINC90L7QvA== 35624\nIEZST00= 35625\nbGluZXI= 35626\nYXRpZg== 35627\nIHNwb8WCZWM= 35628\neGE= 35629\nINGC0YDRg9C0 35630\nIHdhZw== 35631\n6riw7JeQ 35632\nIE1H 35633\nIG9mZnNwcmluZw== 35634\nIFVuZGVyc3RhbmRpbmc= 35635\nT1JB 35636\nIHdoaXJyaW5n 35637\nIHN1cnJlbmQ= 35638\nIHBva2Vy 35639\nIG1vbnVtZW50cw== 35640\nIOKZqQ== 35641\nIG9yZ2FuaXNlZA== 35642\nIFNvemlhbA== 35643\nIEZhY3Rvcnk= 35644\n0YXQsA== 35645\nIHJlc2VtYmxl 35646\n0LfQtA== 35647\nIGV4cGxvc2lvbnM= 35648\nIHBheXJvbGw= 35649\nIG9tbg== 35650\nIEpvcmdl 35651\nzrnPgw== 35652\nIGZyYWN0dXJl 35653\nIHBlcnNlY3V0aW9u 35654\nIGRlbWFpcw== 35655\nRUNI 35656\nLCk= 35657\nIGNyaWFy 35658\nIEpPU0g= 35659\nIGRlbW9ncmFwaGljcw== 35660\nIDE2MDA= 35661\nIGN1cnJlbmNpZXM= 35662\nIFRpcHM= 35663\nIFJlZmVy 35664\nIERhbmNpbmc= 35665\nIGluY29uc2lzdGVudA== 35666\nIGRlaA== 35667\nIGltbWVucw== 35668\nIG1laXN0 35669\nIGltcGF0aWVudA== 35670\nIGJlaGF2ZXM= 35671\nIOuCtOyaqQ== 35672\nIGJhY2tzdG9yeQ== 35673\nIGFncmVlaW5n 35674\nIMWB 35675\naWhpbg== 35676\nIHRlbXBlcmF0dXJh 35677\nIEJhY2tncm91bmQ= 35678\nIG51dHplbg== 35679\nIOuFuQ== 35680\nIE3DpG5uZXI= 35681\nIGNvbGxhYm9yYXRpb25z 35682\nIEtvcw== 35683\nIG5pZ2h0bWFyZXM= 35684\n65Ox 35685\nIFF1ZWVuc2xhbmQ= 35686\nIGFzc29jaWF0ZXM= 35687\nIEtvaw== 35688\nIGZhY3RvcmlhbA== 35689\nIEh5dW5n 35690\nIOq3uOuLpOydjA== 35691\nIGZpbGhv 35692\nIGVsw6l0 35693\nIO2WieuztQ== 35694\nsLE= 35695\nIGdlZnVuZGVu 35696\nIHNlbWljb25kdQ== 35697\nIGNvdW5zZWxvcnM= 35698\nIFVwcGVy 35699\nIEF1Yg== 35700\naWNrZXJz 35701\nVmVy 35702\nIG5vcnRod2VzdA== 35703\nIE1haW50ZW5hbnQ= 35704\nIExha2Vz 35705\n0LDRj9Cy 35706\naW50w6k= 35707\n7LC9 35708\nINCz0LDQtw== 35709\nIGdpb3Ju 35710\nIGRpZ2l0YWxseQ== 35711\nIENpcmN1aXQ= 35712\n7LyA 35713\nIGNoZWVyZnVs 35714\nIFBldGVyc29u 35715\nIERhbmlzaA== 35716\nYXRpdm9z 35717\nIGxpa2Vu 35718\nIGhhcmJvcg== 35719\n0LDQu9C40YHRgg== 35720\neGU= 35721\nIGN1cmxz 35722\nIFJob2Q= 35723\nRW5k 35724\nIEVU 35725\nIGFjcXVhaW50 35726\nIEtlbHZpbg== 35727\nIHRyaWY= 35728\nIEF3YXk= 35729\n7J6Q64qU 35730\ndnM= 35731\nIHDDoWdpbmE= 35732\nIGlubGV0 35733\nIFNhbnRvcw== 35734\nIOyasOyZgA== 35735\nIHlhcMSxeW9yc3Vu 35736\ndGhlbWU= 35737\nIHNvdWZm 35738\nIGluamVjdGVk 35739\nIHDDs8W6bmllag== 35740\naXZlcnNv 35741\nYW1wZWQ= 35742\nIGRhaGVy 35743\nIGRhZ2dlcg== 35744\nINC70Y7QsdC40Lw= 35745\nIHR1bW15 35746\nIGVubGlnaHRlbmVk 35747\nY2VudHM= 35748\nIERhaA== 35749\nIGN1ZXN0 35750\nSUxZ 35751\nINeR16g= 35752\nIGJhbmdpbmc= 35753\nIEVtaWw= 35754\nIENsZXI= 35755\nIEJvcmRlcg== 35756\n0LjQttGD 35757\nIHByZXNlbnRlcnM= 35758\nIFNUVUQ= 35759\nY29pbnM= 35760\nIO2ZjQ== 35761\nIHBlcmtz 35762\nIHBhcmFw 35763\nIGNlcnRhaW5lcw== 35764\nIExvcmU= 35765\nw7ZzdA== 35766\nIE1BUlRJTg== 35767\nIGJpb3M= 35768\nIHdoZXJlYnk= 35769\ndmVydHM= 35770\nIE1pcmFuZGE= 35771\nIHN0aXA= 35772\nYW5kZXo= 35773\n15vXnA== 35774\ndWppbg== 35775\nIOq+ 35776\nIGFsbGVyZ2llcw== 35777\ncGxhdGU= 35778\nIHlhcMSxbA== 35779\nIHVuZGVydGFrZQ== 35780\nIOuCmOqwgA== 35781\nUGFydA== 35782\nIGvEsXrEsW0= 35783\naGd1cnU= 35784\nIEpvaG5z 35785\nIGV5ZWxhc2hlcw== 35786\nIGRyYWluZWQ= 35787\nIHN0w6Vy 35788\nIEphZGU= 35789\nIGNhbGVuZA== 35790\nZmlsbQ== 35791\nIG1lc2E= 35792\nIGx1ZHppZQ== 35793\nIGF0dHJhY3Rz 35794\nIGp1aWNlcw== 35795\nINC60LjQuw== 35796\nIG5pZXV3ZQ== 35797\nIG1lbmNpb24= 35798\nIGlnbml0aW9u 35799\nIGJsYWRkZXI= 35800\nYW5kYWFn 35801\nIEV4dGVuc2lvbg== 35802\n7YKo 35803\nZmVlZA== 35804\nINmI2Yc= 35805\nIHNwdW4= 35806\nIHTDpHQ= 35807\n0L7RgNC+0YI= 35808\ndHlhcmQ= 35809\ncm9uaWNz 35810\nIEh1Z2U= 35811\n0YPQttC0 35812\nc3RyaW5n 35813\nIHVuanVzdA== 35814\nIHByYXdu 35815\nIGZyb3N0aW5n 35816\nIGRpc2FwcGVhcmFuY2U= 35817\naW9zYQ== 35818\nIGNhcmRp 35819\nIFByaWVzdA== 35820\nIGNpZW50w61maWM= 35821\nINCS0LDRgQ== 35822\nIOu2gO2DgQ== 35823\nIHRoaWV2ZXM= 35824\nIHBoeXNpcXVl 35825\nIEV1Z2VuZQ== 35826\nINCx0LvQuNC3 35827\nIG1vbm9wb2x5 35828\nIGJpb2dyYXBoeQ== 35829\nIGhvxZ8= 35830\nIHTDtg== 35831\nbWFj 35832\nIHNob2Nrcw== 35833\n7IS46w== 35834\naGl0 35835\nIHNudWc= 35836\nIGluY2w= 35837\nIGRlZGlj 35838\nIHVsdHJhcw== 35839\nINC40LfQstC10YHRgg== 35840\nIHV0aWxpemF0aW9u 35841\nINGB0L7QstC10YDRiNC10L3QvdC+ 35842\nIHNlcnZp 35843\nc3RhZw== 35844\nMTgw 35845\nIHNld2Vy 35846\nIENob2ljZQ== 35847\nIGRpc2NoYXJnZWQ= 35848\nIEpE 35849\n0L7Qu9C10YI= 35850\nINC60LLQsNGA0YLQuA== 35851\nIHRlbGVzY29w 35852\nIEplxZtsaQ== 35853\nIE5hbmE= 35854\nY2FsZQ== 35855\nINGC0L7QvQ== 35856\nbW1t 35857\nIGdlaGFidA== 35858\n64Kg 35859\n4LiZ4LiZ 35860\nIGV0aGVy 35861\nIHplbg== 35862\nIHJlc2VhcmNoZWQ= 35863\nIEN6eWxp 35864\nd29ya2Vycw== 35865\nIOqyveywsA== 35866\nIHNoZXJpZmY= 35867\nYWxsbw== 35868\nIHRpcG9z 35869\nIHByb3NlY3V0aW9u 35870\nIGZyb2dz 35871\nIGZhbHQ= 35872\namQ= 35873\nIO2MlA== 35874\nIGZpbHRlcmVk 35875\nIE9mdA== 35876\nIOyN 35877\nIGRpc2Zy 35878\nIE11c3Rhbmc= 35879\nIHdvYWg= 35880\nIFJFQUxMWQ== 35881\nINC80L7Qs9C70Lg= 35882\nIGVudHJhZGE= 35883\nINC40LPRgNCw 35884\nIG1peGVz 35885\nINCw0LLRgtC+0LzQvtCx 35886\n0Jk= 35887\nIHNoaW4= 35888\nIHBhcmFub3JtYWw= 35889\nIHNvbWVwbGFjZQ== 35890\nIGRpc2hvbg== 35891\nZXRhYW4= 35892\nIGZ1ZXJ0ZQ== 35893\n2bk= 35894\nIGRvb20= 35895\n7Iic 35896\nIGV4aXN0ZW50aWFs 35897\nIGJ1bGQ= 35898\nIFNESw== 35899\nINC/0YDQsNCy0LTQsA== 35900\nIHR1cm5vdmVy 35901\nIOyXrOq4sOyXkA== 35902\nIOCkuQ== 35903\nIG1vZGVsZWQ= 35904\nIGJ1Z8O8bg== 35905\nIGV4cGVyaW1lbnRhdGlvbg== 35906\nIG1vcm5pbmdz 35907\nIG1lZG8= 35908\nU3Rldmll 35909\nIHBsYXlhYmxl 35910\nIGFpcmxpbmVz 35911\nZ21lbnRz 35912\nIOq4sOu2hA== 35913\nIFRvbWI= 35914\nIE1WUA== 35915\nQVVESUVOQ0U= 35916\nIGNoZWNrb3V0 35917\nIHBhc3N0 35918\nIGJlaXNwaWVs 35919\nIExpbmtz 35920\naGVhdnk= 35921\nIHF1ZXN0aW9uYWJsZQ== 35922\nIOyTsOs= 35923\nIHNpbGw= 35924\nIG1hbmlwdWxhdGVk 35925\nIExvcmVu 35926\nIOycvA== 35927\nIHZlcmdl 35928\nw6Fr 35929\nSUVT 35930\nIHNhYm90 35931\nIEN1c3RvbWVy 35932\nYWxlxbx5 35933\nIG5vbWluZWU= 35934\nIEdhZA== 35935\nIG5vdXZlbGxlcw== 35936\nIFNQRQ== 35937\naXN0bGluZw== 35938\nIG92YWw= 35939\n0L7QsdGA0LDQtg== 35940\naWZ0eQ== 35941\nIGJlemVs 35942\neWV0 35943\nIGZyZWlnaHQ= 35944\nIEhhbsSxbQ== 35945\ncsOtYQ== 35946\nIHpvbmluZw== 35947\nIGluZGVt 35948\nIELDvA== 35949\nIGZlbWluaXNt 35950\nIHZvaXg= 35951\nIG9maWNpYWw= 35952\nIGRpeW9ydW0= 35953\nu5A= 35954\nIGFyb3Nl 35955\nIHBhcmFy 35956\n7J247KeA 35957\nIE1hcnRpbmU= 35958\nIExlY3Q= 35959\nIHJlc3Rlcg== 35960\nIGRyb3duaW5n 35961\ndXlh 35962\nY2lkYQ== 35963\nIEFyaWVs 35964\nIDAy 35965\nINeU15Q= 35966\nIFdlcnQ= 35967\n0KLRiw== 35968\nIHdpZG93 35969\nIHBhcmNobWVudA== 35970\nIGNvdHRhZ2U= 35971\nIFhM 35972\nIFNsYWNr 35973\nIE5FUw== 35974\nIHJvYmU= 35975\nIGdpbW0= 35976\nIGNhbWluaG8= 35977\nIEhhcnBlcg== 35978\nIGNpdHJ1cw== 35979\nIGZpcmVmaWdodGVycw== 35980\nIGRvcGFtaW5l 35981\nZWxldHM= 35982\nIGRlbW9jcmF0 35983\n7KCc66Gc 35984\nIHBsYXliYWNr 35985\nb2o= 35986\nINC/0YDQvtC6 35987\nIFN1bGxpdmFu 35988\nc2VtYmxl 35989\nIFdvcnRo 35990\nIE11c3RhZmE= 35991\n4Liy4Lij 35992\nIG1ldHM= 35993\n0LvQvtGB0Yw= 35994\nIGluZXJ0aWE= 35995\nIHVuaWZvcm1z 35996\nw6lyaW8= 35997\n15XXqNeU 35998\nw6ludA== 35999\nIOCukg== 36000\nINGB0LDQvNGL0YU= 36001\nIHZvdWxhaXM= 36002\nIFppbW1lcg== 36003\n6rKg6w== 36004\nINC90L7RgQ== 36005\nZW5jaWFz 36006\nIHJlbGFjacOzbg== 36007\nIOqxuOs= 36008\nIGZhY3Rpb24= 36009\nIGdvc3A= 36010\n0L/QvtC70L7Qtg== 36011\nbmFw 36012\naGFr 36013\nIHByb2NlZWRpbmdz 36014\nIOyGlA== 36015\n7JWE64uI 36016\nIOyekOq4sA== 36017\nIHdlcmQ= 36018\nIHNvZg== 36019\nIHNjaGxpbQ== 36020\nIGZsYXZvcmVk 36021\nIHF1YWRyYXRpYw== 36022\nIEJvb3Q= 36023\nIHB1YmxpY2l0eQ== 36024\nIENhcm8= 36025\nID8i 36026\n0L3QuNGG0LA= 36027\nbWFuaWE= 36028\nIFNVUg== 36029\nIEJVUg== 36030\nbGFuY2U= 36031\nw6l0aWNh 36032\nIHpvYmFjenk= 36033\nIHRyaW8= 36034\nc2FtYQ== 36035\nIHRhxZ8= 36036\nIGFzeW1t 36037\ncmVzc2Vy 36038\nINiq2Lk= 36039\nINC/0LXRgQ== 36040\nIGJlZ2lubmluZ3M= 36041\nbGFkxLFt 36042\nINCx0YvRgdGC0YA= 36043\nIG1vbw== 36044\nIEdlbmV2YQ== 36045\nZXJ1cw== 36046\nYm9yYWg= 36047\nIHJlZnVzaW5n 36048\nYnVsbA== 36049\nIFdhaXRpbmc= 36050\nIEluZGl2aWR1YWw= 36051\nIGFub255bQ== 36052\naW1lbnM= 36053\nIG1lZGlkYXM= 36054\nIGZyYWdyYW50 36055\nIGRpcmVjdGVtZW50 36056\nIOyVhOuniA== 36057\ndXJpYQ== 36058\nIHNwaGVyaWNhbA== 36059\nIGFiZ2U= 36060\nIFZpY3Rvcmlhbg== 36061\nIHNwZWN0YWNsZQ== 36062\nIFJvZHJpZ3Vleg== 36063\nIG9jdXA= 36064\nIE7DpHI= 36065\nbWFya3M= 36066\nbmd1bG8= 36067\nIEx1Y2k= 36068\nIHNob3V0ZWQ= 36069\nIHJlZ3VsYXRvcnM= 36070\nxJ9pbmk= 36071\nIGRpc2VudA== 36072\nINGA0YvQvQ== 36073\n64Ko 36074\nIOyCtOs= 36075\nIHByb2Jsw6htZXM= 36076\nIEZpbmdlcg== 36077\nYXNzZW1ibGU= 36078\nIHBlYXI= 36079\nIGRyb2l0ZQ== 36080\nIEV2ZXJ5d2hlcmU= 36081\ndGFt 36082\n0L7RgtC40LI= 36083\n0LLQvtC5 36084\nb3JkaW5hdGU= 36085\nIExhaw== 36086\nIG3hu5tp 36087\nIFRlbGV2aXNpb24= 36088\nIGV4cG9uZW50aWFsbHk= 36089\nYXZhcw== 36090\nIGJsZXY= 36091\nIE1U 36092\nQ29ubmVsbA== 36093\nIOq1reuvvA== 36094\nINGB0LLQvtC40Lw= 36095\nIGFjaGE= 36096\nIER5bmFzdHk= 36097\nSmlu 36098\nIHRvcmU= 36099\nIGZsb3I= 36100\nINC80L3QvtCz0LjQtQ== 36101\nb3dhbg== 36102\nYmFo 36103\nIOyjhA== 36104\nIENlbGE= 36105\nIOy1nOq3vA== 36106\nIHBlcm1ldHRyZQ== 36107\nIGFicmFz 36108\nIHZlcnN0ZWhlbg== 36109\nIGVzY29ydA== 36110\nIFRoZW0= 36111\nw6Rya2U= 36112\ncG9ydGVy 36113\nIGthaGthaGE= 36114\nIGhlY3Q= 36115\nIGRhdQ== 36116\nd2Fo 36117\nb2x2ZQ== 36118\nIEFnZXM= 36119\nc2NoYWZ0 36120\nIFN0ZWxs 36121\nbmVsbGU= 36122\nIEVuc3VpdGU= 36123\nINCS0YHQtdC8 36124\nIGNyw6lk 36125\nIFBQ 36126\nbG9yZHM= 36127\nZ3J1bnRpbmc= 36128\nIGNvbnRyYWN0aW9u 36129\nR290 36130\nIGFjcXVpcmluZw== 36131\nIHNvcHI= 36132\nIHBvaXNvbm91cw== 36133\nUk5B 36134\nIGFuYXI= 36135\nIEhvZg== 36136\nJyk= 36137\nIHJlbWFya2FibHk= 36138\nIGludGVybmFjaW9uYWw= 36139\nw7xja2U= 36140\naW5xdQ== 36141\nIGR1eQ== 36142\nIGJlYXN0cw== 36143\nIExBTg== 36144\nIHByZWNlZGVudA== 36145\nIFJQTQ== 36146\nIHNlbG9u 36147\nIG1vcnRl 36148\nIGNvbWXDp291 36149\n0Y/Qu9Cw 36150\nIGludGVycHJldGluZw== 36151\nIEJ1cmtl 36152\n0YLRgNCw 36153\nIOydtOufrA== 36154\nIHBlc3NpbQ== 36155\nIE5vaw== 36156\n7Yyd 36157\nRmVtYWxl 36158\nIOyLpO0= 36159\nmYA= 36160\nIHN0aW11bGF0aW9u 36161\nIHNsaWNr 36162\nIOqwgOuKlA== 36163\nINC60LDQtw== 36164\nIEhCTw== 36165\nIHBhcGllcg== 36166\nIGvDtm5udGVu 36167\n0YPQsdC70Lg= 36168\nIENvbnN0YW50 36169\nU1BFQUtJTkc= 36170\nIGt0w7NyxIU= 36171\nIGNvc21ldGljcw== 36172\nIFRyZW5k 36173\nIHJvYmJlcnk= 36174\nIHRpdHQ= 36175\nIGdqb3J0 36176\nIGRpZXRhcnk= 36177\noIw= 36178\nIEtpcmJ5 36179\nINC/0YDQuNC80LXRgNC90L4= 36180\nIHF1YWxpZmljYXRpb24= 36181\nIOyViQ== 36182\nIGNhYmluZXRz 36183\nIGh0dHA= 36184\nIEVyaWNh 36185\nIGRpc2FkdmFudGFnZXM= 36186\nIGNoYXR0ZXJpbmc= 36187\neXo= 36188\nZmVpdA== 36189\nIGd1aWxk 36190\nIEVURg== 36191\nIERyYWdvbnM= 36192\nIEhFUkU= 36193\ndmVudGg= 36194\n2YTYp9mF 36195\nIG1hcmNow6k= 36196\nRGFt 36197\nIHBob3Rvbg== 36198\nIGVzdGFibGU= 36199\nTWFn 36200\nIG9saGFy 36201\nIGNvdXBsaW5n 36202\nIEhpbGZl 36203\nIFdpemFyZA== 36204\nINC80LDQu9C+ 36205\naGVscA== 36206\nIGzDrW5lYQ== 36207\nIOyr 36208\nIHN0YW5kYWxvbmU= 36209\nIG1vcmFsZQ== 36210\nIHp3ZWl0ZQ== 36211\nw6RocnQ= 36212\nIGRvdHRlZA== 36213\nIGRyaXBwaW5n 36214\nIEZsYWc= 36215\ncm9ja2V0 36216\ncmF0ZWd5 36217\naXJpbQ== 36218\nIO2VmOuptOyEnA== 36219\nIHNvZ2VuYW4= 36220\nIFVubw== 36221\nIFNjaHV0eg== 36222\nIGVzdGlsbw== 36223\nIFN1YnM= 36224\nIERhaXN5 36225\n0J3QtdGC 36226\nJy4uLg== 36227\nIHBsYXRpbnVt 36228\nIGJpcmw= 36229\nIFNvdmk= 36230\nIHZpb2xhdGU= 36231\n0YPQtdGC0YHRjw== 36232\ncmlsbA== 36233\nIHRyYXo= 36234\nIHNuaXA= 36235\nIGN1bXBs 36236\n4Lit4LiB 36237\nIGN1aw== 36238\nIFBhcmxhbWVudA== 36239\nIGh5cGVydA== 36240\nIHB1bHA= 36241\nIHRvbmd1ZXM= 36242\nYXR0bw== 36243\nIGJ1c2Nh 36244\naWhu 36245\nRVJP 36246\nINmK2Lk= 36247\nIHZhcmlhcw== 36248\nIE1hcmlhbg== 36249\nIGJvdW5kZWQ= 36250\nIHBpdGNoaW5n 36251\nIGRlZmljaWVuY3k= 36252\nIEJsZXNzZWQ= 36253\nIEV4ZXJj 36254\ndWNocw== 36255\nIG5oxrBuZw== 36256\nIHJhcGVk 36257\naGFsZXM= 36258\nIG1hbGE= 36259\ncGlj 36260\nIDQwMQ== 36261\nxZtuaWVq 36262\nYXJpbmE= 36263\n65Ok7J2E 36264\nb3R0aQ== 36265\nINC00L7Qu9Cz0L4= 36266\nIHRyYWNrZXI= 36267\nIFNoZWxieQ== 36268\nIHZhbmlzaGVk 36269\nIGJha2VyeQ== 36270\nS2FwxLE= 36271\nSmVzdXM= 36272\nIEtS 36273\nSk8= 36274\nhbg= 36275\nIGRpc2Nz 36276\n7ISv 36277\n7KeA6w== 36278\n15nXpg== 36279\nZW1hcnk= 36280\nS2VuZHJh 36281\nIHnDvGs= 36282\nw7xja3Q= 36283\nIHZheg== 36284\nIGt1cA== 36285\nYWt0dQ== 36286\nINGB0L/QsNGB0LjQsdC+ 36287\nIGFpaw== 36288\nIG51cnNlcnk= 36289\nIGVuZGFuZ2VyZWQ= 36290\nw6ptZW1lbnQ= 36291\nZW1hdGljcw== 36292\nIHJlc3BvbmRlcnM= 36293\nIFJlcHJlc2VudGF0aXZlcw== 36294\nIHNjdWxwdHVyZXM= 36295\naWdrZWl0ZW4= 36296\nIGRlcGw= 36297\nIGludGVycHJldGF0aW9ucw== 36298\nIGRlYWRsaW5lcw== 36299\nIDE5NDI= 36300\nw5c= 36301\nIHN1Z2Fycw== 36302\nZW11 36303\nbGl2ZWx5 36304\nIHJlY3JlYXRpb25hbA== 36305\nIGRpc3RvcnQ= 36306\nIHVuZGVyc2NvcmU= 36307\nIHVucXVvdGU= 36308\nIHNhZmVzdA== 36309\nIHN3b2xsZW4= 36310\nIGFuYWx5c2Vz 36311\nIGNvbW1lbmPDqQ== 36312\nYW5kaW4= 36313\nINCl0L7RgNC+0YjQvg== 36314\nIGRpYXJy 36315\nemllc3Q= 36316\nIHRvb3RoYnJ1c2g= 36317\ndWF0aW9ucw== 36318\nIGNhZGU= 36319\nIGJhY2tsYXNo 36320\naGluZA== 36321\nIHJpc3F1ZQ== 36322\nemVzcw== 36323\nIOydtOyVvOq4sA== 36324\nIGVzcGVyYXI= 36325\nIHRyYW5zbGF0aW9ucw== 36326\naW9uZWQ= 36327\nZ3JvYW5z 36328\nINC/0YPRgg== 36329\nIGdlbmV0aWNhbGx5 36330\nIGhhcHBpZXN0 36331\nIHdlcms= 36332\nYXRvb24= 36333\nIG11c2k= 36334\nIGZ1bsOnw6Nv 36335\nIOyeheuLiOuLpA== 36336\nINGA0LDQuQ== 36337\nIGJldm9y 36338\nQkxBTks= 36339\nIHJlcGVudGFuY2U= 36340\nUHV0 36341\nIHBvdHJ6ZWI= 36342\nIHNhbGE= 36343\nIGNhbXBh 36344\nV0VS 36345\nIGRlY8OtYQ== 36346\nIHPDqWN1cml0w6k= 36347\nIEFwcHJlY2lhdGU= 36348\n0YfQuA== 36349\nIFJhbmRvbQ== 36350\n67OE 36351\na2Fo 36352\nIG3Dtmo= 36353\nIHPDpGdlcg== 36354\nINeZ15vXldec 36355\nIDE5MA== 36356\neHR1cmVz 36357\nRXU= 36358\nIGfDpA== 36359\nINeR16o= 36360\nIENyb2F0 36361\nYXBv 36362\nUExF 36363\nIHBlcnNpc3RlbmNl 36364\nIGJsZW5kcw== 36365\nIHRyZWZmZW4= 36366\nIFNhbnRpYWdv 36367\neWRpYQ== 36368\nYWxkbw== 36369\nIFRlbnNvckZsb3c= 36370\nIER1YWw= 36371\nIGNoaWZm 36372\n7Je0 36373\nIGNvbnRyYWN0ZWQ= 36374\nIHNlZ3JlZw== 36375\nIEZhaXJ5 36376\nIHdpc2VseQ== 36377\nIHZ1bG5lcmFiaWxpdGllcw== 36378\nIGhhbmRoZWxk 36379\nIGdhZGdldHM= 36380\nIGJvxZ8= 36381\nIFBvcHVsYXI= 36382\nIGN1cnZhdHVyZQ== 36383\n66y4 36384\nIE1BUlk= 36385\n7J207Io= 36386\nIGZvcm11bGF0aW9u 36387\nIGNlbGVyeQ== 36388\nIGJsdXJyeQ== 36389\nIFRT 36390\nYWxleg== 36391\nIHdz 36392\nIHByb2dyYW1t 36393\nIFN0YWNr 36394\nIEpJTQ== 36395\n0L7QstCw0LvQuA== 36396\nxLFsbA== 36397\nIHDDqHJl 36398\nIEthbnll 36399\nIERlbGF3YXJl 36400\nIGRhdW50aW5n 36401\nINCx0LXRgQ== 36402\nIFN0dXBpZA== 36403\nYmln 36404\nZmZpY2lhbA== 36405\nIHByZWNpcGl0YXRpb24= 36406\nIHBsdW5n 36407\n4bulYw== 36408\nYnVyc2U= 36409\nIGRhcmxl 36410\nIGNyaXBw 36411\nIHBpb25lZXI= 36412\nIGRpc3B1dA== 36413\nIHNlYW4= 36414\nIHJlc2lzdG9y 36415\nIGFsbGVpbg== 36416\naXBwbGVz 36417\nYXJlbA== 36418\nIGVuZG9ycw== 36419\nenVzdA== 36420\nINGA0LXQsdGP0YLQsA== 36421\nZWRlZA== 36422\nIOy5tOuplOs= 36423\nIGxsZXZh 36424\nIGtlbm50 36425\nINCx0LDQuw== 36426\nIERvY3VtZW50 36427\nIEtuaWdodHM= 36428\nIGJ1Y2tsZQ== 36429\nIOyJrA== 36430\nIGFsaw== 36431\nIEV2ZXJ5ZGF5 36432\nYXR0ZXJz 36433\nIHRvaWxldHM= 36434\nIGp1Z2Fy 36435\nIOyeiOyngA== 36436\nIGdlbmF1c28= 36437\nIExhbmRlc3JlZ2llcnVuZw== 36438\naWpl 36439\nIHRyYWlsZXJz 36440\nIFRpZ2Vycw== 36441\nIGdpdHRp 36442\nIGZvcmdpdmluZw== 36443\nIGNvbmN1cnJlbnQ= 36444\nIFZ1 36445\nIO2Kue2eiA== 36446\nIEJST1dO 36447\nb3VuZGVk 36448\nIjs= 36449\nIHRyZW1i 36450\nIHRpZXQ= 36451\nINGA0LXQttC40Lw= 36452\nIG51dHNoZWxs 36453\n0LXQu9C40Yc= 36454\nIGxvc2Vycw== 36455\ncmljdGluZw== 36456\nIHJlZGVlbQ== 36457\nZGVmaW5lZA== 36458\nTmljZQ== 36459\nIGJyb2FkYmFuZA== 36460\nS08= 36461\nIHRlYXNpbmc= 36462\nIHBhcnRpc2Fu 36463\nxLFtYQ== 36464\nIOyerOuvuA== 36465\nIEpvdXJuZXk= 36466\nIHNsb3Blcw== 36467\ndW5pbmc= 36468\nZ3J1bnRz 36469\nIHTDpGxs 36470\nIHVuY292ZXJlZA== 36471\nIG15xZtsxJk= 36472\nIEVzdGhlcg== 36473\nIEhlYWx0aHk= 36474\nIOuwkQ== 36475\ncsOpZQ== 36476\nIHBvbGFyaXphdGlvbg== 36477\nIGZsYXY= 36478\nIGNhbWJpYXI= 36479\nIHly 36480\nIFJhbmNo 36481\nIHNwbGl0cw== 36482\nIHRyb3V2w6k= 36483\nIHJlY29yZGVy 36484\nIGTDqXBhcnQ= 36485\n2YjYqA== 36486\nIEtyeQ== 36487\nIGludGVyZXNzYW50 36488\nIGVkZXJpbQ== 36489\nxZt3aWFk 36490\naWxhdGVyYWw= 36491\nd3JpZ2h0 36492\nIHBvdXJyYQ== 36493\nw6p0ZXI= 36494\nIGNhbWVs 36495\n4Z4= 36496\nIHJhcGlkZW1lbnQ= 36497\nIG1lag== 36498\nIHN0aWZmbmVzcw== 36499\nQURBUw== 36500\nIGRpZmZlcnM= 36501\nIGFsb3Q= 36502\nIFNpZw== 36503\n0Y/RgtC10LvRjA== 36504\nIGFic3RyYWN0aW9u 36505\nIGtlaW5lcg== 36506\nZ3J1cHA= 36507\nIFNoZXJsb2Nr 36508\n7ZiU 36509\nIGNpdGU= 36510\nIG92ZXJmbG93 36511\nIHThuqFp 36512\nw7pjYXI= 36513\nYnVsYQ== 36514\nIGNvbmp1bnRv 36515\nIENJ 36516\nIG1vZGVyYXRvcg== 36517\nIGluZGlyZWN0bHk= 36518\nIGFsbGVpbmU= 36519\n4oI= 36520\n0YjQuNCx 36521\nINCx0LDQsQ== 36522\nIGRhbmFjaA== 36523\nIDE5Mzk= 36524\nIHByb21ldA== 36525\nIGRlc3RpbmF0aW9ucw== 36526\nIElsbHVzdA== 36527\nzrnOus+M 36528\nIHNhYmVz 36529\nIGhlaA== 36530\nIEdlc2V0emVudA== 36531\nIE1peg== 36532\n0LXQvdC60L4= 36533\nIE15cw== 36534\n0Kw= 36535\nIEp1ZGFpc20= 36536\nIG11c3RhY2hl 36537\nIHN0aW1tdA== 36538\nIEdhemE= 36539\nIHZvbHRl 36540\nIG51bw== 36541\nIG3Ds24= 36542\nIENvbXB1dA== 36543\n4Li54LmI 36544\nIFJhZGk= 36545\nIGV4Y2VwdGlvbmFsbHk= 36546\nIGFzc3VtZXM= 36547\naW5mb3Jt 36548\nIHNocmluZQ== 36549\nIGltcGxpY2F0aW9u 36550\nIEZpdHo= 36551\nIS4= 36552\nIGx0 36553\nIGFsbG95 36554\nIGV0aGlj 36555\nIG1vbmFzdGVyeQ== 36556\n7Iuc7KOg 36557\naWNhw6fDo28= 36558\nIGNvb3JkaW5hdGluZw== 36559\nIE1vdG8= 36560\nIG92ZXJsb29r 36561\nIGNob2lz 36562\nIGFudGliaW90aWM= 36563\nIE1pbm5l 36564\nIEJK 36565\nIEFwYQ== 36566\nb3JpYW4= 36567\nIHNwaWxsZWQ= 36568\nSmFt 36569\nIGh1c2JhbmRz 36570\nIGNyZWF0aW9ucw== 36571\nIGHDsQ== 36572\nw7xzc2Vs 36573\nIOydtOyaqQ== 36574\nIGFuYWx5c2U= 36575\ncm9zZQ== 36576\nIHB1bmNoZWQ= 36577\nIHByZXNxdWU= 36578\nIGFzdHJvbm9teQ== 36579\nIHNjaHdpZXJpZw== 36580\nIEVib2xh 36581\nIGNpcw== 36582\nIGFjZXQ= 36583\nIEZY 36584\nZW5kcmU= 36585\nIOydjOyVhQ== 36586\nIHdlYnBhZ2U= 36587\nIGZyZWFrZWQ= 36588\nIGxhdHRl 36589\nIOy/oA== 36590\nIOuouOs= 36591\nTmV2ZXI= 36592\nR3Jh 36593\n7ZmU66W8 36594\nZXllZA== 36595\nIOuwnOudvA== 36596\nIGVzcGVyYQ== 36597\nIGFwYXJlY2U= 36598\ncmHDp8Ojbw== 36599\nIGRpc3J1cHRpdmU= 36600\nIEpvaW50 36601\ndXJvdXM= 36602\ncmVhcw== 36603\nIHF1ZXLDrWE= 36604\nIGRpc3RyaWJ1dGlvbnM= 36605\nIGV4cG9uZW50 36606\n7LmY66W8 36607\nIGRs 36608\nemhvdQ== 36609\nIEhlYXJpbmc= 36610\nIENyYXc= 36611\nIGZsb2F0cw== 36612\nb3VuY2Vk 36613\nTGFi 36614\nV29ybGQ= 36615\nIGJ1cmRlbnM= 36616\nIGF1dGhvcml0YXJpYW4= 36617\nIEJvbHQ= 36618\nINC+0LTQvdGD 36619\nIHBpZ2Vvbg== 36620\nIGRpc3RyYWN0aW9ucw== 36621\nIEhlcmF1c2ZvcmRlcg== 36622\nIHplc3Q= 36623\nZXNj 36624\nIHNoYWtlcw== 36625\nYXRhcw== 36626\nINmF2LQ= 36627\naG9sZXM= 36628\nIHRoaW5rZXJz 36629\nYWx0YQ== 36630\nIGFyY2hl 36631\nIFN1aw== 36632\nYW5oYQ== 36633\nIHRlbXB0aW5n 36634\nIHlvdXR1YmVy 36635\nIHbDrA== 36636\nIGR6aWHFgmE= 36637\nIFZhdGljYW4= 36638\nUGFyaw== 36639\nIHN1cGVycw== 36640\nIE5pa2tp 36641\n64qQ6w== 36642\nb3Jhbmc= 36643\ncmFtaWVudA== 36644\nIOqwluqzoA== 36645\nIGRlc3NlcnRz 36646\nIGF2ZXJl 36647\nIEdyZWdvcnk= 36648\nIOuTpOyWtOyY 36649\nIGNvc3Rpbmc= 36650\nIENsaW5pYw== 36651\nIHJlYmVscw== 36652\nIE1vYg== 36653\nIGJ1bmxhcg== 36654\nIFlvdXJz 36655\nZXJ0aW1l 36656\nIHJldGFsaQ== 36657\nbWFyYQ== 36658\nYXR1cw== 36659\nYWxsZXM= 36660\nINC00YA= 36661\nINC00LjRgQ== 36662\nIGRpc2NvdW50cw== 36663\nIEdVWQ== 36664\nINC60LDQutC+0LU= 36665\nIEV4cGVyaW1lbnQ= 36666\ncmVtZW50 36667\nIFhpYW5n 36668\nIGJhdGU= 36669\nV0U= 36670\nIHNwZWNpYWxpemU= 36671\nIGRlaXR5 36672\nIExva2k= 36673\nbWFn 36674\nIE5pdA== 36675\nV2VzdA== 36676\nIG1hdGVybmFs 36677\nIHF1aXM= 36678\nYnJva2Vu 36679\nIGxhc2Vycw== 36680\nIGhha2s= 36681\nIEFuZ2Vscw== 36682\nIG1hc3Rlcnk= 36683\nYW50aXM= 36684\nVGlmZmFueQ== 36685\nZWVl 36686\n55E= 36687\nb3JlbQ== 36688\nIGluYWNj 36689\nIGp1cmlzZGljdGlvbnM= 36690\nIEthcmRhc2g= 36691\nSWw= 36692\nIFNpbm4= 36693\nIGF0aGxldGljcw== 36694\nY8SZ 36695\nIGxvb3NlbHk= 36696\nIGRpZXRh 36697\nQWc= 36698\nID8/ 36699\nIOuMgO2RnA== 36700\nIHN1cGVydg== 36701\nIG51dHJpdA== 36702\nIGRyaWZ0aW5n 36703\nIOyEoOyDneuLmA== 36704\nINC/0L7QvdGP0Ls= 36705\nIFZpY3Rvcnk= 36706\n2YTYqQ== 36707\n15XXoNeU 36708\nINC/0LjRiA== 36709\nIHNoYXZlZA== 36710\nIG1lc3VyZQ== 36711\nb25kZW4= 36712\n2YPYsQ== 36713\nIGV4aWxl 36714\nIERlc2Rl 36715\nIFBpbnRlcmVzdA== 36716\nIGF0dGFjaG1lbnRz 36717\nIGhvbWJyZXM= 36718\nIGZpbmVz 36719\nIOyEuOyDgQ== 36720\nIHNsZWVwcw== 36721\nIFRhY28= 36722\nIElSQQ== 36723\ncmlvcw== 36724\nIG9sbA== 36725\nZXRlcw== 36726\nIHVudXQ= 36727\nZmFzaGlvbmVk 36728\nIHRyZWJhbGw= 36729\nIE5lYXJseQ== 36730\nINGA0LXQsNC70YzQvdC+ 36731\nIGNoaWw= 36732\nxJ9h 36733\nIE1FTA== 36734\ncm9zY29w 36735\nIENH 36736\nIHZlbmdl 36737\nIGRpc2h3YXNoZXI= 36738\nYWxnaWM= 36739\nIG1vZGlmaWVy 36740\nIGVtYmFzc3k= 36741\ndGltZXI= 36742\nZW1pY3M= 36743\nIGludHJpY2F0ZQ== 36744\nIGV2ZXQ= 36745\nIOuMgOuwlQ== 36746\nIGlzb3Q= 36747\nINC90LDRg9GH 36748\nIFF1aXo= 36749\ncmVzbw== 36750\nzrTPjg== 36751\nIHllbGxlZA== 36752\nIGZlZGVy 36753\nRUxMRVI= 36754\nIGV4Y2VlZGVk 36755\nb25hcw== 36756\naWNhbm8= 36757\nINC20LjQstC+0YI= 36758\nIE1hbw== 36759\nIEthenV0bw== 36760\nIOOFi+OFi+OFi+OFiw== 36761\nIGZyb250bGluZQ== 36762\nIEh1bmdhcmlhbg== 36763\nIMO8YmVyYWxs 36764\nYXdhdA== 36765\nIGdyaXBz 36766\nacOnw7Vlcw== 36767\nYXJueWE= 36768\nIM2h 36769\nIHNlaWQ= 36770\nIGFuYWs= 36771\nIGFjYWJvdQ== 36772\n7ZWR 36773\nIG5vdG9yaW91cw== 36774\nIEdvZHppbGxh 36775\nIG92ZXJjb21pbmc= 36776\nIFBlbmQ= 36777\nIG9sYWJpbGly 36778\nw7xsbWU= 36779\nIGVyaGFsdGVu 36780\n6re5 36781\nIE1ldGVy 36782\nIHN0YWFu 36783\nT2w= 36784\nIGNoYXRz 36785\nIEJ1ZW5vcw== 36786\nw612ZQ== 36787\nYWx1YWJsZQ== 36788\nIHN0cmF0ZWdpY2FsbHk= 36789\nIGNvbXByaXNlZA== 36790\nINC/0LXRgNGB0L7QvdCw0LY= 36791\nIHdhbm4= 36792\nIENlbg== 36793\n0L3QuNGC0LU= 36794\nn4E= 36795\nINGC0L7QsdC+0Lk= 36796\naWFk 36797\nIGthcmRlxZ9pbQ== 36798\nIENvbmdyZXNzbWFu 36799\ncmVhbWluZw== 36800\naG9tbWU= 36801\nIGNvbW11bmF1dA== 36802\nIGFsY29ob2xpYw== 36803\nIHBpY2tsZWQ= 36804\nIGFjb3Jk 36805\ncG9zaXRpb24= 36806\nZWfDs2w= 36807\nIHRyb3VibGluZw== 36808\nIE1hcmNoZWc= 36809\nIHp1bWluZGVzdA== 36810\nIHNlYW1sZXNzbHk= 36811\nIG9sdW4= 36812\nIFRWcw== 36813\nINC/0YDQsNC60YLQuNGH0LXRgdC60Lg= 36814\nIGJhY2tlbmQ= 36815\naWRhYmxl 36816\nIGdhZGdldA== 36817\nIGZhw6dv 36818\nIE1hcmNoZWdpYW5p 36819\nIOuwpA== 36820\nIGFjY2lkZW50YWw= 36821\nIExQ 36822\nIGVsZGVzdA== 36823\nIEFkbWlyYWw= 36824\nIG7Eg20= 36825\nbGV2ZXI= 36826\nIHBhc3RlbA== 36827\nIGZvbmRv 36828\nQ29ubmll 36829\nIHRlcmNlcg== 36830\nIHBhY3Q= 36831\nIE1vbnRl 36832\nIG1lYXRz 36833\nIFNNUw== 36834\nIEF1c3RyYWxpYW5z 36835\n57w= 36836\nUmhldHQ= 36837\nIGV4YWN0ZW1lbnQ= 36838\nIOu5vA== 36839\nIE1PRA== 36840\n56E= 36841\nIFJhcHQ= 36842\nIE5vY2g= 36843\nIGFib3J0 36844\nIE5hdmFs 36845\nIEZ1amk= 36846\nSU5URVI= 36847\nINC90L7QstGL0Lk= 36848\nIG1pZWpzY2U= 36849\nIElDVQ== 36850\nIEdyYWR1YXRl 36851\nIEdsZW4= 36852\nYXJkaQ== 36853\nIMiY 36854\nIHNvbGRlcg== 36855\nIHByb2Zlc3Npb25z 36856\nIG9ydGhvZw== 36857\nb21u 36858\naW50cm9kdQ== 36859\nIERlbmlzZQ== 36860\n7J6Q66W8 36861\nIGNvcnJlc3BvbmRlbmNl 36862\nQU1B 36863\nIGluZmxpY3Q= 36864\nIGZhbmQ= 36865\nIEfDvA== 36866\nINGH0LXRgg== 36867\nIHRyYWNlZA== 36868\nIHBhdGVudHM= 36869\nIGFtYnVzaA== 36870\nIGxvdHRh 36871\nZmZlcg== 36872\nIFdhZ25lcg== 36873\nIGltcGVyc29u 36874\nIGV4dHLDqm1lbWVudA== 36875\n2YLYqg== 36876\nY29uZHVjdA== 36877\nQXR0 36878\nIE11ZWxsZXI= 36879\nIEFsaWNpYQ== 36880\nIGN5Yw== 36881\nIGhhY2tlcg== 36882\nIHR5cw== 36883\nIGhhaWw= 36884\nINC30LDRj9Cy 36885\nIHBhc3Nv 36886\nIOy2lOqwgA== 36887\nIM6I 36888\nIHBhY2thZ2Vk 36889\nIEN5bnRoaWE= 36890\naGVldA== 36891\nIE5pc3Nhbg== 36892\nIFF1ZXN0bw== 36893\n6ag= 36894\nZGlk 36895\nIM68zrnOsQ== 36896\nIEVsbGlz 36897\nIEFuYWx5c2lz 36898\nY2Vtb3M= 36899\nIGFzZWc= 36900\nIE15c3Rlcg== 36901\nIENhbw== 36902\nIHR1dg== 36903\nIEluZHVzdHJ5 36904\n7KO86rOg 36905\nb3RhbA== 36906\nIHBlcXVlw7Fv 36907\nYnJhcw== 36908\nIGNvbXByZWhlbmQ= 36909\nIFNpbXBzb24= 36910\n0YHRgtCy0LjQtQ== 36911\nb2NyYWN5 36912\n0LjRh9C10YHQutC4 36913\nIE11c2g= 36914\nIExhdXJpZQ== 36915\nIHRyaWFuZ3VsYXI= 36916\nIFByZXNlbnRz 36917\nIEt1bmRlbg== 36918\nIElzcw== 36919\nIERlY2s= 36920\n4buDbg== 36921\nIERhcmtuZXNz 36922\nIGluZmxhbW1hdG9yeQ== 36923\nZXJlbWlhaA== 36924\nIHdhcm1lZA== 36925\ndmV5YXJk 36926\nIE1lbW9yeQ== 36927\nZXR0eQ== 36928\nIHRheHBheWVycw== 36929\n4LiT 36930\n2KE= 36931\nIHByYWN0aXNl 36932\n64us6w== 36933\nIGRyaWxsZWQ= 36934\nbcO8xZ8= 36935\nbG9nbw== 36936\nIEZhY2g= 36937\npOuhnA== 36938\nIMO8YnJpZ2Vucw== 36939\nIGtvbm50ZW4= 36940\nIG5vcm1hbG1lbnRl 36941\nIGFyZ3Vlcw== 36942\naWxpbmd1YWw= 36943\nsOulvA== 36944\nZWdhbA== 36945\nIHRyYXZhaWxs 36946\nb3Z5 36947\n0LDRgtC+ 36948\nIHJ1dGg= 36949\nIExpZ2h0cw== 36950\nIGNvbnNpc3RlZA== 36951\n15HXqNeZ150= 36952\nIHN0ZXJlb3R5cGU= 36953\nIHBheWVy 36954\nIFJlZQ== 36955\nIEFpcmJuYg== 36956\nIGRyb3duZWQ= 36957\nIFpvZQ== 36958\nIGNhbm9weQ== 36959\nIGJhcnI= 36960\nINC90L7Rhw== 36961\nIHBhZ2Fu 36962\nIGphcnM= 36963\nIHLDqg== 36964\nZXJ2ZXI= 36965\naWViZW4= 36966\nIGVzcGVjdA== 36967\nIEZp 36968\nIHVud2lsbGluZw== 36969\nIHRlY2huaWNpYW4= 36970\n4bq3dA== 36971\nbWVtYmVy 36972\nIENhbmFs 36973\n2LPZhQ== 36974\nIGxpZWJlcg== 36975\nIGluZmVyZW5jZQ== 36976\nIGhvbm9yaW5n 36977\nIENhbXBhaWdu 36978\nIGxpbmVhZ2U= 36979\nIFN0cmVzcw== 36980\nIHZpY3Rvcmllcw== 36981\nIGRlamE= 36982\n16M= 36983\nw6p0ZXM= 36984\nYmxpY2s= 36985\nINC80LXQvdC10LU= 36986\nb3Rocw== 36987\nIENvdXBsZQ== 36988\nSmFzb24= 36989\nIE5pY29sYXM= 36990\n0LXQutGB 36991\nbGli 36992\nIGhlcnJhbWllbnQ= 36993\nINeQ15XXnteo 36994\nINCy0LjQtNC40Lw= 36995\nbWlsbGltZXRlcg== 36996\nIHNpbGhvdWV0dGU= 36997\nIGRyaXZld2F5 36998\nIGNoZXJpc2g= 36999\n44Wg44Wg 37000\nIHJhbnNvbQ== 37001\nIGludGVyZGlzY2lwbGluYXJ5 37002\nIFBvcnRhbA== 37003\nIHRyYWc= 37004\ndGhvb2Q= 37005\nIHRlZGlvdXM= 37006\nIGdsb3NzeQ== 37007\nIHByw6lwYXI= 37008\nIENheQ== 37009\nIFRvb2s= 37010\nIEJvdHRvbQ== 37011\nIHppZw== 37012\n5as= 37013\ncmVwcmVzZW50ZWQ= 37014\n4LmA4Lil4Lii 37015\nIGRlc2Fycm9sbG8= 37016\n7ISc6w== 37017\nIHZpc2Nvcw== 37018\nIG1pbGxpZ3JhbQ== 37019\nIEd1bmQ= 37020\nIGZlcm1lbnQ= 37021\nZHJ1bQ== 37022\nIGRyYXdlcnM= 37023\nTGF1Z2g= 37024\nIHBlbG9z 37025\nIHBhdmVtZW50 37026\nIG1lbW9pcg== 37027\nYXZhaXQ= 37028\nIDIwNTA= 37029\npOulvA== 37030\nIHJhesOzbg== 37031\nIGZsb3VyaXNo 37032\nIHN0ZXJu 37033\nIENodW5n 37034\nIHNlcnBlbnQ= 37035\nIEdlbnRsZW1lbg== 37036\na29vaw== 37037\nIGx1dA== 37038\naW1wb3J0ZQ== 37039\ncGFyZW50 37040\nIHdzeg== 37041\nIHNjcmVl 37042\nIE1pdGFyYmVpdGVy 37043\nbXV0 37044\nIOyWmOq4sOulvA== 37045\nIHNlbWJsZQ== 37046\nIE9X 37047\nIGludmVzdGlnYXRvcg== 37048\nIENoZXJ5bA== 37049\nIEdlcmFsZA== 37050\nIHByZXJl 37051\nIGNvbXBhcmVz 37052\nbnl0 37053\nIGRpZmVyZW7Dp2E= 37054\nPy0= 37055\nIHF1w6E= 37056\n16jXmQ== 37057\nU2Vu 37058\nIGhlcHM= 37059\nIGdyYXR1aXQ= 37060\nIGNvbnNvcnQ= 37061\nIFNUT1A= 37062\nIFByb3Rlc3RhbnQ= 37063\nIGVsZWN0cm9kZQ== 37064\n4pc= 37065\nIHNlY3VyZWx5 37066\n0LjRh9C10YHQutC+0Lk= 37067\nIHTDpMOk 37068\nIHJlZ2lzdGVycw== 37069\nIEhlYXZlbmx5 37070\nb2dseQ== 37071\naXNzw6Q= 37072\nIFBoeXNpY3M= 37073\nIE1lcmtlbA== 37074\nIHLDqXY= 37075\nIGVyYXNlZA== 37076\nIFNhY3JhbWVudG8= 37077\nIGNvZmZpbg== 37078\nIGV4YWNlcg== 37079\nIGxhbno= 37080\nIHBvZXRz 37081\ndWxpZg== 37082\nIOy5mOs= 37083\nIE5lcmQ= 37084\nIE5DVA== 37085\nIEhvdXI= 37086\nbmVobWVy 37087\nnpjrj4Q= 37088\nIFByaW5jaQ== 37089\nU3c= 37090\nbWllcw== 37091\nYXJtZWQ= 37092\nIEJlYXRsZXM= 37093\nIHByb3BhZ2F0aW9u 37094\nIGV4Y2hhbmdlZA== 37095\nIGN1bXVsYXRpdmU= 37096\nIOynkeyXkA== 37097\nIGRlZmVhdGluZw== 37098\nYmVscw== 37099\nIHdlcw== 37100\nIE9keXNzZXk= 37101\nYXZpb3I= 37102\nIOychOyXkA== 37103\nIGJyaXQ= 37104\nIGhpam8= 37105\nREFZ 37106\nINin2YTYqtmK 37107\nINCh0LXRgNCz 37108\n0YPQutCw 37109\nZWRzacSZ 37110\nIGltcG9z 37111\nIGVsbGFz 37112\nIGZpcmVhcm1z 37113\nIE5S 37114\nINeR15A= 37115\nINCf0L7QutCw 37116\nYXdp 37117\nIOyEseqztQ== 37118\nIHB1cGlscw== 37119\nIFRhY2s= 37120\nIGZyYXNl 37121\nIFNoaXA= 37122\nIHN0YWQ= 37123\nIEdyZWF0ZXI= 37124\ndW51bg== 37125\naW1tdW5n 37126\nZ3Jvd24= 37127\nIE5YVA== 37128\nIEFtZXJpY2Fz 37129\nZm94 37130\nIG1hbnRlbg== 37131\nINGB0L7Qug== 37132\nIHJpa3Q= 37133\nbGVjdHJpYw== 37134\nZGVlcA== 37135\nINC30L3QsNC10YjRjA== 37136\nIGJlbnV0 37137\nIEluZnJhc3Q= 37138\nIEVtaXI= 37139\nINC+0YLQv9GA0LDQsg== 37140\nIEtpbWNoaQ== 37141\nIEZpbm5pc2g= 37142\ntOyggQ== 37143\naW5haXJl 37144\nIG9pa2U= 37145\nIGhvc3RhZ2U= 37146\nIEJ1dHRvbg== 37147\n2YLZig== 37148\nZWtpbmc= 37149\nIEthemFraA== 37150\nIGNvbWZvcnRpbmc= 37151\nIHNvZw== 37152\nIGdyZWV0ZWQ= 37153\nZ3VpdGFy 37154\ncGF5ZXI= 37155\nIHJlbGF0aW9uYWw= 37156\nIGNvbnN0cnVpcg== 37157\nb3BpYW4= 37158\nIFZvbHVtZQ== 37159\naWV0aA== 37160\n0YHRgtCy0L7QvA== 37161\ndXJyZWN0aW9u 37162\nbGnFm215 37163\nIGhlbWlzcGhlcmU= 37164\nIEJlYW4= 37165\nSUdO 37166\nIGvDtnTDvA== 37167\nIEZhbGxvdXQ= 37168\nIGJyYWNl 37169\nz4DOrA== 37170\nIEhBUw== 37171\nIGfDqQ== 37172\nIGNoYXJhY3Rlcml6ZQ== 37173\n4bq3Yw== 37174\nIE1pbGt5 37175\nIHR1bW9ycw== 37176\nIG51aXQ= 37177\nIEdheg== 37178\nIOyeiOuLpOuKlA== 37179\nINCz0LDRgA== 37180\nZXNzbWVudA== 37181\nIEFiZQ== 37182\nIOu9kQ== 37183\nIEVpbnNhdHo= 37184\nSklO 37185\nasOk 37186\nQ3J5 37187\nIFByb21pc2Vk 37188\nINGB0LXRgNC0 37189\nb2t1cw== 37190\nIHNjYWxhYmxl 37191\nINC/0L7RgdC80L7RgtGA0LXRgtGM 37192\nw7xja2xpY2g= 37193\nIHJlYWxpc20= 37194\nIG1heW8= 37195\nIGp1dmVuaWxl 37196\nIGhlYWRsaWdodHM= 37197\nIGfDtnLDvMWf 37198\nIFJlZm9ybQ== 37199\nIGhhbHZlcw== 37200\nY3puZQ== 37201\nIGJyZWFrdXA= 37202\nxbxlag== 37203\nIHLDpHR0 37204\nRGF5 37205\nIOydvOuzuA== 37206\nIG11ZXJ0ZQ== 37207\nIHR1bmVz 37208\nIFNtaWxl 37209\ncmVjb3Jk 37210\nIHJlY2hlcmNoZQ== 37211\nYXRpc2ZpZWQ= 37212\nIHBvemk= 37213\nIGNlbGVicmF0aW9ucw== 37214\naXNleHVhbA== 37215\nIFJPQg== 37216\ndGhpcmRz 37217\nIEZvcnR1bmU= 37218\nINGC0L7QuQ== 37219\nIGJyYW5kZWQ= 37220\nbG9v 37221\nIGR1ZA== 37222\nIHJhbmRvbWl6ZWQ= 37223\nIGNvbWJpbg== 37224\naWVyYW4= 37225\nY3plbmlh 37226\nIGN1cmF0b3I= 37227\nIGFydGVyeQ== 37228\nINGD0Yg= 37229\nINGH0LjRgg== 37230\nIHN1YnNpZGllcw== 37231\nIGJsb3Nzb20= 37232\nIFR3aWxpZ2h0 37233\nIGh5dsOk 37234\nIFBvbXBl 37235\nIENpc2Nv 37236\nINCf0YDQvg== 37237\nIGJpcmk= 37238\nIGdlcm4= 37239\nIHJlYnVpbHQ= 37240\nIHdjemU= 37241\nIGJlbmVmaWNp 37242\nIGRydW1tZXI= 37243\nIHNvbGlkcw== 37244\nIGRpeW9yc3Vu 37245\nbGF0ZWQ= 37246\nIG11ZGR5 37247\nIGhvbG9n 37248\nIGNsYXBz 37249\nIFJpbmdz 37250\nIE9rZXk= 37251\nIEJyYXZl 37252\nIHZhbHVhdGlvbg== 37253\nIG1pZ3JhbnQ= 37254\nIGludGVybWl0dA== 37255\nIGVpZ2VuZQ== 37256\naWxpYXJ5 37257\nbWFya3Q= 37258\na3I= 37259\nIFJpYg== 37260\n4buZaQ== 37261\nIGFjY3VzYXRpb25z 37262\nIGFyYWI= 37263\nd2FzaA== 37264\nIEJhcmR6bw== 37265\nIHVnaA== 37266\nZXN0ZXJz 37267\nb3BocmVu 37268\nIGFsaW1lbnRvcw== 37269\nIFV6 37270\n1oI= 37271\nIDY1MA== 37272\nINC/0YDQuNC10YU= 37273\nRkk= 37274\nIHNhbXBhaQ== 37275\nIHBhcmzDqQ== 37276\naGVzaW9u 37277\nIHPEsXI= 37278\nIGFwcGFyYXR1cw== 37279\nIGNvcnJlbGF0ZWQ= 37280\nIFByaW5jaXBhbA== 37281\nIGNvcnI= 37282\nIE9mZmljaWFs 37283\n0LjRh9C10YHQutC40LU= 37284\nIHRlcm1pbmFscw== 37285\nU2hvdWxk 37286\nIHZhY3Vu 37287\nIHN0ZWxsdA== 37288\nIG1vb2k= 37289\nZXR6dW5n 37290\nINC60YDQsA== 37291\nIGRhaQ== 37292\nINC/0L7Qtg== 37293\nVGVhbQ== 37294\nIFBQRQ== 37295\nINCe0YE= 37296\nIExlYWg= 37297\nIEl2eQ== 37298\neXN0 37299\nIHVoaGg= 37300\nIG5pZ2h0dGltZQ== 37301\nIHRyZW5keQ== 37302\nIHNlY3VyaXRpZXM= 37303\nIGNvbnRpbmVudHM= 37304\nIGZpcnN0aGFuZA== 37305\nIFZlcm9u 37306\nIOuCrg== 37307\nIGJyb3dzaW5n 37308\nIENhZGE= 37309\ndHJv 37310\nIHRyYW1w 37311\ncmVpYg== 37312\nIGVyc3RtYWw= 37313\naXJsZXI= 37314\nIHBzaWM= 37315\nIGdldGly 37316\nIE5Q 37317\nIGR6aWVjaQ== 37318\n0L7QsdGA0LDQtw== 37319\nIG1hZ2ljaWFu 37320\nIHNjcnV0aW55 37321\nIHNsYWI= 37322\nIE9U 37323\naXN0eQ== 37324\naXJpZXM= 37325\nb3Jlc3Q= 37326\nIHRhc2tlZA== 37327\nIG1vcmFsbHk= 37328\n7JW87KeA 37329\ndXN0ZXJlZA== 37330\nIGZvb2xz 37331\nIGlycmVzcG9ucw== 37332\nIGVpbmY= 37333\nIHZp4buHYw== 37334\nIHNjb3I= 37335\nIHBpbGxvd3M= 37336\nIEdlZ2Vu 37337\nIHR1dHRl 37338\nIHF1YXJ0ZXJseQ== 37339\nIGRpZG50 37340\nIEd5bQ== 37341\nIEV0aGVy 37342\nINir 37343\n0LvQuNGI0LrQvtC8 37344\nIHNpZ25hbGluZw== 37345\nIE5vZGU= 37346\nIERvbmNz 37347\nIHlhaA== 37348\nIEthbmFs 37349\nIGZhZGluZw== 37350\nZXRpbg== 37351\nIGluZmx1ZW5jZXJz 37352\nIG1lZGFscw== 37353\nIGVuZ2luZWVyZWQ= 37354\nIGZlcm1lbnRlZA== 37355\n6rKg7KeA66eM 37356\nIEJlZXRob3Zlbg== 37357\n157XqQ== 37358\naW5lbnRhbA== 37359\nIOyVjOugpA== 37360\nw7x0ZmVu 37361\nYWxueWE= 37362\nIG92ZXJl 37363\nIGRlbmt0 37364\n0LDQutGC0LXRgA== 37365\nIOKY 37366\nIG5lY2VzaXQ= 37367\nIGdlbmVyYXRvcnM= 37368\nZ3Jhc3M= 37369\nINC/0L7QtNGD0Lw= 37370\nbGllw59lbg== 37371\nQmFy 37372\nnOuPmQ== 37373\nINC00LXRgtC10Lk= 37374\nIHN1Y2tpbmc= 37375\nIHN0ZW5jaWw= 37376\nIHByaW1v 37377\nIEJyZWF0aA== 37378\nc3Ryb20= 37379\nIGltbWVuc2VseQ== 37380\nIGFwcHJlaA== 37381\n7KCV7J20 37382\nUG9w 37383\nIGpvbmc= 37384\nIEdpdWw= 37385\nIEFESEQ= 37386\nIGjDtnJlbg== 37387\nIGVsbw== 37388\naXZlbnQ= 37389\nIHJ1cw== 37390\nIG91dHJhZ2VvdXM= 37391\nIG1hc3RlcmVk 37392\nIOy7pA== 37393\n2YjZgQ== 37394\naXBlcw== 37395\nIFJ1ZHk= 37396\nSmFjb2I= 37397\nIGJ1bGxpc2g= 37398\nIHRhcHBlZA== 37399\nIGZhdWQ= 37400\naXpvcGhyZW4= 37401\nINGB0L7RhQ== 37402\nIERhcmxpbmc= 37403\nIDE5NjM= 37404\nIFByZXZlbnRpb24= 37405\nspQ= 37406\nIGFiZG9taW5hbA== 37407\nc3RvbmVz 37408\nIGF2YWllbnQ= 37409\n4buVaQ== 37410\nbWFrZQ== 37411\nIHNhcmU= 37412\nIEluc3RhbnQ= 37413\n0LrQsNC8 37414\nIGtlZXBlcg== 37415\nIGJsYW5rZXRz 37416\nIHN3ZWF0cw== 37417\nIE1pbm5lYXBvbGlz 37418\nIGdlbm9tbWVu 37419\nIGZhc3Rlbg== 37420\nIEJydXNzZWxz 37421\nIGNhZmV0ZXI= 37422\nIGFic29yYmluZw== 37423\nIGhhZ28= 37424\nIEVsbW8= 37425\nIGd1c3Rv 37426\nIFlhcA== 37427\nTcO6c2ljYQ== 37428\nIHRlcnQ= 37429\nIGJhbmRh 37430\nIG1pbHk= 37431\nIHRoZXJlYWZ0ZXI= 37432\nIFN0b2NraG9sbQ== 37433\nIENhcnNvbg== 37434\nIGNhbGlicmF0aW9u 37435\nYXZhxZ8= 37436\nYW5zYQ== 37437\naWtrZQ== 37438\nIGZvcmVzZWU= 37439\nIHF1YWxjaGU= 37440\nIGRlc3Rl 37441\n5qQ= 37442\nw7xuw7x6 37443\nIGZvcmdl 37444\nRGlz 37445\nZXN0ZW4= 37446\nIM60zrnOsQ== 37447\nIGVuY2Fwcw== 37448\nIEdlc3By 37449\nIGNoZXJjaGVy 37450\naWNrZXRz 37451\n0YLQvtGA0Ys= 37452\nQ3I= 37453\nINCi0LDQutC20LU= 37454\nIHJhYmJpdHM= 37455\nIERvdA== 37456\naGVpdGVu 37457\nIGNhdXNhbA== 37458\nIEZvc3Rlcg== 37459\nYWrEhWM= 37460\nIGJlcmVpdA== 37461\nIGF5dWRhcg== 37462\nc29uZw== 37463\nY29tYg== 37464\nIGZyaW5nZQ== 37465\nIGN5YmVyc2VjdXJpdHk= 37466\nIOucqA== 37467\nIGtpZXI= 37468\nIGJlc2Now6RmdA== 37469\nINC60L7QvdGG0LU= 37470\nIGZhY2lsaXQ= 37471\nIE5hbWVu 37472\nIGJpbGF0ZXJhbA== 37473\ndHg= 37474\nIFdpc3NlbnNjaGFmdA== 37475\nIG51YW5jZXM= 37476\nIHJpcHBpbmc= 37477\nIGZ5 37478\nIFNpY2hlcmhlaXQ= 37479\nIEdoYW5h 37480\nb2xvbg== 37481\nIHRvcHBlZA== 37482\nIE1vcm9jY28= 37483\nIHJhZGlhbA== 37484\nIExFRQ== 37485\nIEFuZHJlYXM= 37486\nZWRk 37487\nIOyXtOs= 37488\nIEFpcmxpbmVz 37489\nIHZhbG9yZXM= 37490\n6rec 37491\nSHk= 37492\nINC30LDQtNCw0Yc= 37493\nIEtlbmRhbGw= 37494\nINGF0LDRgA== 37495\nIFZhbXA= 37496\nIHB5dGhvbg== 37497\nIG1hbmFnZWFibGU= 37498\nIEdlbnRl 37499\nb2lzZQ== 37500\naWNpYXJ5 37501\nIGltcG9zcw== 37502\nIEJ1bm55 37503\naWVzdGE= 37504\nQW5kcmV3 37505\nIHNlcnQ= 37506\nIENlYw== 37507\nenphcmVsbGE= 37508\nIGF1dG9tb2JpbGU= 37509\nIFRpZXJl 37510\nYWxsb3dz 37511\nIOuwgA== 37512\nIFNjb3Jw 37513\nIEplbGx5 37514\nYWdhcmE= 37515\nIFN0cmV0Y2g= 37516\nIHJlZGVm 37517\nIGV4YWNlcmI= 37518\nIFNIQQ== 37519\nw6lm 37520\nb3JzYQ== 37521\nIGZsYXdlZA== 37522\nIE5vZWw= 37523\nPyE/ 37524\nIHByb2NlbnQ= 37525\nIG1lbnN0cnU= 37526\nINC/0YDQvtGH 37527\nIGluZmFudHM= 37528\n8J+OtQ== 37529\ncGF1c2U= 37530\nIFJhY2luZw== 37531\nIDE5NDg= 37532\nIHN1cGVyaW50ZW5kZW50 37533\naWRvcmVz 37534\naWR5 37535\nYnJhaGlt 37536\nIHVubHVja3k= 37537\nIHBlcms= 37538\nYW5jaQ== 37539\nIOunjOuCmA== 37540\nINCc0L7RgdC60LI= 37541\nIGZpbmFucw== 37542\nIGRpZmVyZW5jaWE= 37543\noIjsnbQ= 37544\nT1JZ 37545\nIFRhYw== 37546\n24zYpw== 37547\nIGRlc2Vt 37548\nINCy0LDQttC90L4= 37549\nIEpV 37550\nIOyeiOyeluyVhOyalA== 37551\nIM6d 37552\nIGluZm9ybWF0aW9ucw== 37553\nIEhFTA== 37554\naHN0 37555\nINC/0L7Qs9C+0LLQvtGA 37556\nIHZvaXR1cmU= 37557\nIHJldXM= 37558\nw6RuZGln 37559\nINC/0L7RhdC+0LY= 37560\namluZw== 37561\nIGRydQ== 37562\nYWx0cmE= 37563\nIHByb2R1aXRz 37564\nIGtpdGU= 37565\nIGV5ZWJhbGw= 37566\nIEJlbHQ= 37567\nIFJlc3RhdXJhbnQ= 37568\nIGdhbWI= 37569\nIHBvcnJpZGdl 37570\naXR0ZXJz 37571\nIGNvbnZlcnRz 37572\nIHlhcmTEsW0= 37573\nIG3DoXhpbW8= 37574\nd2lydHNjaGFmdA== 37575\nIO2VmOuCmOs= 37576\nIOykgA== 37577\nIGljZWJlcmc= 37578\nIHZvcmJlaQ== 37579\nIDI1Ng== 37580\nb2NyYXRpYw== 37581\nIHJlY2tsZXNz 37582\nb25uZXI= 37583\nIG3DunM= 37584\nIGxvZ2ljYWxseQ== 37585\nIFByaXNvbg== 37586\nIE5ldHo= 37587\nIHZhY2FudA== 37588\nIG5pbW10 37589\nIEhBUlI= 37590\nINC30L7Qsg== 37591\nIERlZQ== 37592\ncmluZ2U= 37593\nbmllc3Q= 37594\nIFJ1bGVz 37595\n7Iqk65+9 37596\nY3Vzc2lvbnM= 37597\nIGZsb3JhbA== 37598\nIGNvbnN0cmFpbmVk 37599\nIGRpZmZlcmVudGlhdGlvbg== 37600\nIFF1ZWJlYw== 37601\nINuB24zaug== 37602\nIHDDumJsaWNh 37603\naXRlbA== 37604\nIGFjY29tbW9kYXRpb25z 37605\nIEdyw7w= 37606\n7Zw= 37607\nIHBpY2tsZXM= 37608\n0LjRh9C10YHQutC40YU= 37609\nIGNvbW1pc3Npb25z 37610\nIEJhZWs= 37611\nIMOnb2N1xJ8= 37612\nIE1lZGl1bQ== 37613\nIHBlcmlvZGljYWxseQ== 37614\nIHdvbmRlcmZ1bGx5 37615\nIHN0YWZmaW5n 37616\n7JuQ6w== 37617\ncmlyZQ== 37618\nZmxl 37619\nIE1jTA== 37620\nINGC0LXQvw== 37621\nINC/0LXRgNC10Lo= 37622\n0L3QvtC70L7Qsw== 37623\nIO2BrOqyjA== 37624\nIHByb3NwZXJvdXM= 37625\nIFNwaXJpdHVhbA== 37626\nIENoaWNr 37627\nRElB 37628\nINCf0YDQuNCy0LXRgg== 37629\nIHBlcsOt 37630\n0YzRjtGC 37631\nIGNvbnN1bHRhbnRz 37632\nIEVhcmw= 37633\nIHJ1aW5pbmc= 37634\n0L7RgNC1 37635\nIHBlbnNlcg== 37636\nIHRha2llag== 37637\nIHN0cmVuZ3RoZW5lZA== 37638\nIExpcXVpZA== 37639\n0L7QvdC10YY= 37640\n0LDQstCw0YLRjA== 37641\nIGNhbWVy 37642\nIGRpc2FncmVlbWVudA== 37643\nIGJhdGhpbmc= 37644\nIFlvc2g= 37645\nYWFs 37646\ncHJlY2hlbg== 37647\nUklTQURBUw== 37648\nIHN1cGVyc3Rhcg== 37649\n0LvRj9GC0Yw= 37650\nIG5pYg== 37651\nIFRoZXJt 37652\nIERBTklFTA== 37653\nIHBhdw== 37654\nIGxpcXVpZHM= 37655\nIGNhcGFjaXQ= 37656\nYXJrZW4= 37657\nIHZhZ2luYQ== 37658\nIG1hc2hlZA== 37659\nIGVtZXJnZXM= 37660\neXNjeQ== 37661\nIHVucmVsYXRlZA== 37662\nIEd1aWxk 37663\nIGludmVydGVk 37664\naXRpdmVz 37665\nVHJh 37666\nIGJlZ3I= 37667\nIGFsdGU= 37668\n7KeV 37669\nINGA0LDQt9GA0LDQsdC+0YI= 37670\nZmluZGVy 37671\nINC00LDQu9C10LU= 37672\nINCx0LvQsNCz0L7QtNCw0YA= 37673\nd2Fsa2Vy 37674\nIGNyYXRlcg== 37675\nYXNzYWRvcnM= 37676\ncmVuY2Vz 37677\naW5za2k= 37678\nIEtJTQ== 37679\nIEVsbGlvdA== 37680\nMjAxNw== 37681\nIFNy 37682\naW5rYQ== 37683\nYW5vdg== 37684\nIOyemOuquw== 37685\nIHByb3ByaWV0YXJ5 37686\nZGlzcGxheXN0eWxl 37687\nINGB0LjQvA== 37688\nINC40LfQsQ== 37689\nIFBhbmVs 37690\nIGluc3RpbmN0cw== 37691\nIENvbW11bmljYXRpb25z 37692\nbWlkdA== 37693\nIOunjOuTpOyWtA== 37694\nINGB0LvQvtCy0LA= 37695\nIEdpbGJlcnQ= 37696\n0KLQsNC6 37697\ndm9vcmJlZWxk 37698\n0LXRjtGB0Yw= 37699\nYXJ5bg== 37700\ncXVleg== 37701\nIGRhcnQ= 37702\n0ZbRiA== 37703\nIEh1dA== 37704\nU2Fs 37705\nIHNvdXRoZWFzdA== 37706\nIHBlc3RpY2lkZXM= 37707\nIGhlbGljb3B0ZXJz 37708\nIGVuZHVyZWQ= 37709\naWFkYQ== 37710\nIGJyZXdpbmc= 37711\n7Jes6w== 37712\nINGB0LLQvtCx0L7QtA== 37713\nIFNhaW50cw== 37714\nIEZyYW7Dp2Fpcw== 37715\nIEVjb25vbWljcw== 37716\nIGRpc2xvYw== 37717\nb3Bob2JpYQ== 37718\nQ2FtZXI= 37719\nIG5lZ290aWF0ZWQ= 37720\nINGB0YLQsNC70Lg= 37721\n7Iqk7YE= 37722\nb2dpZQ== 37723\nIHRzdW5hbWk= 37724\nIHBlZWxlZA== 37725\nIG1vdGl2YXRpb25z 37726\nb3N0YXQ= 37727\nZmxhbg== 37728\nIERBQw== 37729\nIGthdg== 37730\nJ1JF 37731\nIFBlYXJzb24= 37732\nYmJl 37733\nY3plbmll 37734\nIGF0ZW7Dp8Ojbw== 37735\n7Ya166C5 37736\nINGD0LTQsNGA 37737\nIGludHJvZHVjdG9yeQ== 37738\nIEljaQ== 37739\n64yA6w== 37740\nYWthdA== 37741\nIHRyZW5jaA== 37742\nIHByb2NlZWRlZA== 37743\nIENvaW4= 37744\nIGRlcmVjaG8= 37745\nIFJlZGU= 37746\n0LDQvdC90YvQuQ== 37747\nIGluY2FyY2VyYXRlZA== 37748\nIFJpY2htb25k 37749\nUm9jaw== 37750\nIFBhdg== 37751\nIEthcm1h 37752\ndWdlcw== 37753\nIGNvbnRlw7o= 37754\n67mE 37755\nIOq3uOunjA== 37756\nIEdvbmU= 37757\nIHdzcMOzxYI= 37758\nIFJhaG1lbg== 37759\ndW5rZW4= 37760\nIOykkeyalO2VnA== 37761\nIGli 37762\nIGF0dGFjaGluZw== 37763\nSGF5 37764\nIHN1a2E= 37765\n7I25 37766\nIHBpdm90YWw= 37767\nIFJlc3BlY3Q= 37768\nw61kYQ== 37769\nSUI= 37770\nIFZlcmFudHdvcnQ= 37771\nd2lldA== 37772\nIGZvcmVuc2lj 37773\n0YDQuNGB0YI= 37774\nINC/0YDQuNC90YbQuNC/0LU= 37775\nIG1hcmtpbmdz 37776\nIGtldHRsZQ== 37777\nIE9wZXJh 37778\nIERvY3RvcnM= 37779\nIHNocmVkZGVk 37780\nIHJlY3Vlcg== 37781\nIHZpZ2ls 37782\nIEZhaWw= 37783\nIGVudHJldg== 37784\nINC00YPRiA== 37785\nIG91dGJyZWFrcw== 37786\nIM+Azr8= 37787\nIHJvZ3Vl 37788\nYW5nbGVk 37789\nIHllYXJseQ== 37790\nIENyZWVk 37791\nIHdhbQ== 37792\nIGxvdHVz 37793\n6rO86w== 37794\n44CB44CB 37795\nIFNwaXQ= 37796\nIEl0dQ== 37797\nIHN0cmFpbnM= 37798\nIHN0YW1wZWQ= 37799\nIHBsYWludA== 37800\nIHBvdGlvbg== 37801\nIGNvbnNvbGlkYXRpb24= 37802\n0L7Rh9C60YM= 37803\nIHZsb2dnaW5n 37804\nIHNsYXRl 37805\nIEF1ZnQ= 37806\nIEluY29y 37807\n4burbmc= 37808\np5A= 37809\nZW5o 37810\nIGhlacOf 37811\nIGRvbWVzdA== 37812\nIFN0cm9t 37813\nYWtpcw== 37814\nIGZyYWdlbg== 37815\nIGZpbmVy 37816\nIFN1Zw== 37817\nIHVwaGlsbA== 37818\nIMOpw6lu 37819\n4oCmKQ== 37820\nINGB0L7Qvw== 37821\nIENvcmV5 37822\nIHNpZWJpZQ== 37823\nIG11c2U= 37824\nIGNsb3Zlcw== 37825\nIHBvdXM= 37826\nIEZpbmFueg== 37827\nIFJvdXRl 37828\nYW1hdA== 37829\nIG11dHVhbGx5 37830\nINCy0L3Rg9GC0YDQuA== 37831\nIFNlbGVuYQ== 37832\n65Q= 37833\nIEdhdXNzaWFu 37834\n67aA7YSw 37835\nINeR15s= 37836\nIGVqZXJj 37837\na2Vh 37838\nIEdlcnJ5 37839\nIFNpYw== 37840\nIDE5NjY= 37841\naWVzZQ== 37842\nIGZvc3NpbHM= 37843\nIGVzdGFk 37844\nIEthbmU= 37845\nY2nEhw== 37846\nIOycoO2KnOs= 37847\nINC/0LDQvA== 37848\nIENydWlzZQ== 37849\naW50w6lyaWV1cg== 37850\nIGJla2FubnQ= 37851\nIFBvZGU= 37852\nIGRlbWFuZGVy 37853\nUmVt 37854\nIGludmFkZQ== 37855\nIGRlY29yYXRpbmc= 37856\ncm9waWM= 37857\nIGNvd2JveQ== 37858\nIFBob3Rv 37859\nb3BvbGl0 37860\nIOy7rOufrOs= 37861\nIHJlYXA= 37862\nIGhhbmR3cml0aW5n 37863\n4LmE4Lij 37864\nIOua 37865\nINio2LnYrw== 37866\nIE10 37867\n2YA= 37868\nIHNwYWNlc2hpcA== 37869\nIG5hdGlvbmFsaXNt 37870\nIGNvdW5jaWxz 37871\nIEdyaWZmaW4= 37872\nIEFobWVk 37873\nIGNsaWNo 37874\nIE9M 37875\nd2w= 37876\nIFBpbG90 37877\nIGFjcm9ueW0= 37878\nIGdlbHM= 37879\nIGVsZWN0cm9seQ== 37880\n6JM= 37881\nINC80L3QvtC5 37882\nIGVwaXNvZA== 37883\nIERpZXNlcw== 37884\nIEFUUA== 37885\nIGVkaXlvcnVt 37886\nIGV4cHJlc3Nlcw== 37887\nIGV4aGliaXRz 37888\nQ29tbQ== 37889\nINC60YDRg9C/ 37890\nIG1hdGFy 37891\nIDIwMjU= 37892\nIEFydGVt 37893\ndmFzaXZl 37894\ncsOg 37895\nIGJlxZ8= 37896\nIGxpemFyZA== 37897\nIGZpbGxl 37898\nIOyniOusuA== 37899\nINC80L7RiQ== 37900\nIHTDvHI= 37901\nIGN1bHByaXQ= 37902\nIHdvdmVu 37903\nIEFOWQ== 37904\nbmlt 37905\nIHRheQ== 37906\nIHByb21pbg== 37907\nIGFjb21wYQ== 37908\nIGlkw6k= 37909\nIGJvaWxlcg== 37910\nIFRoZW1lbg== 37911\nIGF2ZW51ZQ== 37912\nIE11ZA== 37913\nINC90L7QstGL0LU= 37914\nIHdpdG5lc3Npbmc= 37915\nIGxhbmNl 37916\nIENIQU4= 37917\nIEJldmVy 37918\n2KrZhQ== 37919\nIGNoZW1vdGhlcmFweQ== 37920\nS2luZw== 37921\nIGLEmWTEmQ== 37922\nIGF0dWFs 37923\nIHRpdmU= 37924\nIHRhbGtpbg== 37925\nIHF1ZWRhcg== 37926\naWXDnw== 37927\nZWRlbA== 37928\nIOyWtOygnA== 37929\nIGpvZ2Fy 37930\nIMO2cg== 37931\nIHVuZGVydGFraW5n 37932\nIFN0cmVuZ3Ro 37933\nIG1pbGjDtWVz 37934\nIFdpbmU= 37935\nIE1vbHQ= 37936\nIHVuZGVybWluZQ== 37937\nIEFyY2hpdmVz 37938\ndmFuYQ== 37939\nbWVyY2lhbA== 37940\nTUM= 37941\nIGNhc3Rl 37942\n0L/RgA== 37943\nIGxlZ2lzbGF0b3Jz 37944\ndWxhdG9ycw== 37945\nw6puaW8= 37946\nIOuNsOs= 37947\nINGF0L7RgtC40YLQtQ== 37948\nINC90LXQug== 37949\nIHN1cm4= 37950\nIGNvbnNjaQ== 37951\nIFBPVw== 37952\nIGN1bGluYXJ5 37953\nIEtBVA== 37954\nIEZvbGtz 37955\n0YvQstCw0LXQvA== 37956\nINCy0L7Qug== 37957\nc2VydmljZQ== 37958\ncHRz 37959\nINC/0L7QsdC10LQ= 37960\nIHRlbnRz 37961\nIG5vcmQ= 37962\nU1RF 37963\nIHJlcHVibGljYW4= 37964\nIHd5aw== 37965\nIG1pbmlvbnM= 37966\nIG1lbWFuZw== 37967\namVzdA== 37968\nIGNvbXBhcmF0aXZl 37969\nIHR5bGU= 37970\nY2FyYm9u 37971\nYmVkaW5ndA== 37972\na3Nlbg== 37973\nIG5lZ2F0aXZpdHk= 37974\nIHNqw6Rsdg== 37975\nIGTDug== 37976\nIHJlY2FsbGVk 37977\nY3Jh 37978\nIFRhZGE= 37979\nINGA0YPQutC4 37980\nINC+0L/RgNC10LTQtdC7 37981\nIHByb2NyYXN0 37982\nIGpvZ29z 37983\nIE9v 37984\nIEhlYXJ0cw== 37985\nIMOpY2g= 37986\nIGtzacSFxbw= 37987\nIGNvYXJzZQ== 37988\nIFR1YmU= 37989\nIEdyZWVucw== 37990\nIMOpbg== 37991\nIGR1bWJiZWxs 37992\nINGC0Lg= 37993\nIHF1ZXJlcg== 37994\n2KfYrQ== 37995\nz4POtc65 37996\nINC/0YDQsNCy0LjQu9GM0L3Qvg== 37997\nINC/0LDQvw== 37998\nIGNvbXByYQ== 37999\nIHTDqXI= 38000\nIEFudGVz 38001\nIG9wdGltdW0= 38002\nIGJpc2N1aXQ= 38003\nzrrOuQ== 38004\nYWN6ZWdv 38005\nIOyLnOqwhOydtA== 38006\nIE1hcmluZXM= 38007\ndmVybw== 38008\nIHZhY2NpbmF0aW9ucw== 38009\nIHBldHR5 38010\ncml0ZXJz 38011\nINCw0Ls= 38012\nY291bnRyeQ== 38013\nIGNvdW50ZXJz 38014\nIGF0dGVuZGFudA== 38015\nIEh1aQ== 38016\nY2th 38017\n0YHRgtCy0LXQvdC90YvQuQ== 38018\nZ3V5 38019\nIHRyaWNrZWQ= 38020\nIFJFRA== 38021\nIHRocmlsbGluZw== 38022\nz4DOv865 38023\nIHBpZ2d5 38024\nIGFudW5jaQ== 38025\nT1JURVI= 38026\nIFZhbHVl 38027\nIHJvbmQ= 38028\nIEFEQQ== 38029\nIHBvc2Vy 38030\naG9yZXM= 38031\nIFJvbGFuZA== 38032\nk68= 38033\nIG5vaXI= 38034\nINep15DX 38035\n67Cc 38036\naWVtYW5k 38037\nINC/0L7RgtC10YA= 38038\n6rOz 38039\nIOqxsQ== 38040\nIGZvcm1hdHRpbmc= 38041\nIExlZA== 38042\nIGtpbGxlcnM= 38043\nIMSR4bqleQ== 38044\nIGhhYXI= 38045\nYWdhaW4= 38046\nITwv 38047\nIHNvbWV0aGlu 38048\nIGNvdWdoaW5n 38049\nIG5hdmU= 38050\nIHByb3NwZWN0aXZl 38051\nIEhL 38052\nIFJlc2N1ZQ== 38053\nbWF5YmU= 38054\nZ2dlcg== 38055\nINGA0LDQsdC+0YLRgw== 38056\n15XXnNed 38057\ndGFpbHM= 38058\n7ZWY7ZWY 38059\nIGV5ZWxpZA== 38060\nIGN1c3RvbWl6YXRpb24= 38061\nYXZpbGlvbg== 38062\nIHByb2NoYWlu 38063\nIGdsYXpl 38064\nU2lt 38065\nINC+0L/QsNGB 38066\nIG1vc3F1aXRvZXM= 38067\nIGZlbnQ= 38068\nIGNhcGFjaXRpZXM= 38069\nIGFwb3N0bGVz 38070\nIGFsdHVyYQ== 38071\nIOusuw== 38072\nIHNlcm9udA== 38073\nIEFueXRpbWU= 38074\npbTripQ= 38075\nIGNvc3BsYXk= 38076\nIHNwYWM= 38077\nIHNhbWVu 38078\ndWNj 38079\nacOocmVz 38080\nIHNpYmxpbmc= 38081\nIENvY2s= 38082\nIOuPhQ== 38083\nINC/0YDQtdC00YHRgtCw0LLQu9GP 38084\nIGluc3RhbGxtZW50 38085\nIGRpamU= 38086\nIE1DVQ== 38087\nIEVI 38088\nIE5pbmc= 38089\nIHByZXBhcmVz 38090\nIGh5cG9jcg== 38091\ncHR5 38092\nIGthZMSxbg== 38093\nIEZyb3plbg== 38094\naGF1bA== 38095\nIEt5bGll 38096\nIHNodWZmbGU= 38097\nIGVsZW1lbnRhbA== 38098\nIGF1w59lcg== 38099\nIEtOT1c= 38100\nIEFMSVNTQQ== 38101\nWkE= 38102\n7LKg 38103\nIHJlY2l0ZQ== 38104\nIHNjcmli 38105\nIDExNQ== 38106\nIHN0YXJyZWQ= 38107\nIGxlcXVlbA== 38108\nIGJyZXdlcg== 38109\nIE9wcG9ydHVu 38110\nIHLDpA== 38111\nIGNob3BzdGlja3M= 38112\nIEthaA== 38113\nIEV0aGlvcGlh 38114\nIGhhbmRtYWRl 38115\nIGVyZm9sZw== 38116\nIER6 38117\naXR0ZW5z 38118\n0LLQsNC7 38119\nzrfOvQ== 38120\nYnJpbmdlbg== 38121\nIHVucGx1Zw== 38122\nIG9mZnM= 38123\nIGhlcm1hbg== 38124\nbGllZA== 38125\nYXNvbmlj 38126\nIFNlcmJpYQ== 38127\nIEd1YXRlbQ== 38128\nIC4uLiI= 38129\nIGVycmVpY2hlbg== 38130\nIGFtYmlndW91cw== 38131\nIFdoaXRuZXk= 38132\nenVm 38133\nTUFORA== 38134\noLU= 38135\nIHNxdWVlemVk 38136\neWFz 38137\nIFNob2Nr 38138\nIHV0aWxpc2U= 38139\ndWtv 38140\nYm9sdA== 38141\nIG1vdGlm 38142\nIGlubWF0ZXM= 38143\nIGNvcnJ1cHRlZA== 38144\nIGNvbmNyZXQ= 38145\nIENyaXRpY2Fs 38146\nIFNpbmdpbmc= 38147\nINGE0YPQvdC6 38148\nbm92YQ== 38149\ncmViYmU= 38150\nZHQ= 38151\nVW5pcw== 38152\nIHdlYmNhbQ== 38153\nIGNhbW91Zmw= 38154\nS2Vu 38155\nIGxhd3N1aXRz 38156\nIENvbnN1bWVy 38157\nIHJlY29sbA== 38158\nIGtsZWluZXI= 38159\nIEZJRkE= 38160\nIDE5NjI= 38161\nIG1hbGFk 38162\nIOywvQ== 38163\nIMOldA== 38164\nIGluZmx1ZW5jZXI= 38165\nIEFydGlzdA== 38166\nc3Rp 38167\n4Lin4Lii 38168\neXPFgg== 38169\nIEJpYW4= 38170\niOuEpA== 38171\nIGZpcmVwbGFjZQ== 38172\nIEFwcGxpY2F0aW9u 38173\nIG1uaWVq 38174\nIGFjaWRpYw== 38175\nIE1vcm1vbg== 38176\nc3Nh 38177\nIHNuZWFreQ== 38178\nIG9qb3M= 38179\nIHZvdWQ= 38180\nIERhaQ== 38181\nIGdyYXNzcm9vdHM= 38182\nIFVuYmVsaWV2YWJsZQ== 38183\nIEdhYmU= 38184\nIEV4dHJlbWU= 38185\nIGhhc3NsZQ== 38186\nIGNvYg== 38187\nbXVtYmxpbmc= 38188\nUGFzcw== 38189\njOufrA== 38190\nIHN5c3RlbWF0aWNhbGx5 38191\nIHNldmVudGVlbg== 38192\nz4DOtc65 38193\n4pmh 38194\nINC60L7Rgg== 38195\nIHNlbmRpcmk= 38196\nIGJhdGhyb29tcw== 38197\nIFN0ZXJu 38198\nIEFyZHVpbm8= 38199\n6Lk= 38200\nY3JpYmluZw== 38201\nIHJlb3BlbmluZw== 38202\nIGNlcnY= 38203\ncGVl 38204\nQVJJ 38205\nIGNhZHJl 38206\nIEFuY2g= 38207\nTGVl 38208\nIE1BWA== 38209\nIG3DpG5u 38210\nIGNob3Jlcw== 38211\nIGFkZXNzbw== 38212\nIE5pZw== 38213\nIGRpc3NlcnRhdGlvbg== 38214\nIFZheQ== 38215\nU1RBTEs= 38216\n0LDQutCw 38217\nYXZhdA== 38218\nIHB1bmt0 38219\nIHBhZGRpbmc= 38220\nIFRlbXBs 38221\nIGVqZQ== 38222\nIO2EsA== 38223\nIGF6dA== 38224\nIOuMgO2GteuguQ== 38225\nIHJlYXJyYW5nZQ== 38226\nw6FjaA== 38227\nIOyCrOuejOuTpA== 38228\nIGZyZWFraW4= 38229\nY3JpcmU= 38230\nIOy7pOs= 38231\nIEV4cGxhaW4= 38232\nIM+Ez4nOvQ== 38233\nIGJvZGlseQ== 38234\nIExlaXN0 38235\nIHNpZ3Vp 38236\nIGJ1bmtlcg== 38237\nIGF6dWw= 38238\nIEhhdXNo 38239\nU3Vi 38240\nINCQ0L3QtA== 38241\nINC60YDQsNC5 38242\nIGlsbGVnYWxseQ== 38243\nIE11eQ== 38244\nIEZlaQ== 38245\nIEJhbmFuYQ== 38246\nIHNjaG9sYXJseQ== 38247\nIFByenk= 38248\nIE1vc3M= 38249\nIEZpbHRlcg== 38250\nIOyWtOuWoQ== 38251\nIE1heHdlbGw= 38252\ndGVuc2U= 38253\nIGxvbmdpdHVk 38254\nIGxhbmdzYW0= 38255\nINee16c= 38256\nc21pdGg= 38257\naXphZGE= 38258\nINC90L7RgNC80LDQu9GM0L3Qvg== 38259\nIFZvbGw= 38260\nIEVsZW5h 38261\nINGF0L7RgtGM 38262\nIERhYmVp 38263\nIGNvbnNlcnZhdGl2ZXM= 38264\nIHByw7Nwcmlh 38265\nIERpZXNlcg== 38266\nIEJyZW5kYQ== 38267\nb29raWU= 38268\nIGJhbmM= 38269\n7J207KY= 38270\n7JuD7J2M 38271\nIGtlaA== 38272\nIHdlZGRpbmdz 38273\nIHRodW5kZXJzdG9ybQ== 38274\nIENvb3JkaW4= 38275\n7IiY6rCA 38276\nIHByemVjaQ== 38277\nT1NTVEFMSw== 38278\nbWFhbg== 38279\nIOqxtOs= 38280\nINio2Yc= 38281\nIMW8YWQ= 38282\nIHlhY2h0 38283\nIGfDtnQ= 38284\nIGJsZWFjaA== 38285\nIHNob3J0ZW4= 38286\nINGB0YLQsNC70L4= 38287\ndXNhbg== 38288\nIOyekOyXsA== 38289\nIGRlcnM= 38290\neGlz 38291\njZTri4g= 38292\nIHF1YW50aWRhZGU= 38293\nIG9wcHJlc3NlZA== 38294\nINC30LDQutC+0L3Rhw== 38295\nINGH0LXRgtGL 38296\nINCd0LDQv9GA0LjQvNC10YA= 38297\ndWxw 38298\n2YLZiNmE 38299\n0L7Rh9C1 38300\nzqzOuw== 38301\nemVuaXU= 38302\nIGZvcm1hdGlvbnM= 38303\nIHNwYXJrZWQ= 38304\nIEVudHdpY2tsdW5n 38305\nYWxscw== 38306\nIHZpdmly 38307\nIGV4cGlyYXRpb24= 38308\nb3RpbmU= 38309\nINCn0LXRgA== 38310\nIFR1cm5pbmc= 38311\nIHRhcmlmZnM= 38312\nIG5hc3TEmXA= 38313\nIGFiaWRl 38314\naWtzaQ== 38315\nIGZsYXNoZXM= 38316\nIGRpc3B1dGVz 38317\nIOyytA== 38318\nIG1lcmFr 38319\nIGVub3Jtb3VzbHk= 38320\nemFobA== 38321\nIGbDvGhydA== 38322\n0LLQvtC9 38323\nINC30LDQstC40YE= 38324\nIHBlcnNldmVyYW5jZQ== 38325\nIGRpdmlkZW5kcw== 38326\nIGNvbnRlc3RhbnRz 38327\nIHByb3N6xJk= 38328\nIEZyYW5rZW4= 38329\nIGV4cGxvcmVy 38330\nIGJ1ZmZhbG8= 38331\n4oCV 38332\nIGVjb2xvZ3k= 38333\nIHNjYWxhcg== 38334\nIGNyYW4= 38335\nzrXPhM6xzrk= 38336\nxbx5xIc= 38337\nIOyalOs= 38338\nIGdpYQ== 38339\nIEdvZw== 38340\nIFByaXY= 38341\nIOunkOydhA== 38342\nIFJlYXNvbg== 38343\ncmFrdGlvbg== 38344\nIERlYm9yYWg= 38345\nIGtpdHRlbg== 38346\nIEVkaW4= 38347\ncGllag== 38348\nIOuLtA== 38349\nIG3DoXF1 38350\nIGJpZGRpbmc= 38351\nIGFmZmluaXR5 38352\nIGFpa2E= 38353\nZm9saw== 38354\nIENvbnNl 38355\nIGRldXRzY2hlbg== 38356\n6IY= 38357\nIGRlYml0 38358\nxLHEn8Sxbg== 38359\naXNlbA== 38360\nIOykkeq1rQ== 38361\nIOutkOqwgA== 38362\nIHRydXN0d29ydGh5 38363\nIFN0YXJ0ZWQ= 38364\nw7xyZA== 38365\nINC/0L7QvdGP0YLQvdC+ 38366\nIHNjaWVudGlmaWNhbGx5 38367\nUG9kcw== 38368\nQ1JPU1NUQUxL 38369\nIHByZWd1bnRhcw== 38370\nIGNhbG1pbmc= 38371\nIFByZW1pZXJl 38372\n15vXqQ== 38373\nINGF0L7Qu9C+0LQ= 38374\nIGNhcGl0YQ== 38375\nIHRvbWE= 38376\nIG11cm0= 38377\nIGZ1ZXJ6YQ== 38378\nIEhhbmk= 38379\nw7xm 38380\nYXJsb3M= 38381\nIGjDpHVm 38382\nIG9zb2J5 38383\namVnbw== 38384\nINC/0LjRgQ== 38385\nIGNhbG1seQ== 38386\naWRldA== 38387\nYnVjaA== 38388\nZ29uZQ== 38389\nIHZpc2Nvc2l0eQ== 38390\nIG1vZGFs 38391\nIGdlc2Ft 38392\nIEh6 38393\nIG11bmljaXBhbGl0aWVz 38394\nIGNpcmN1bGF0aW5n 38395\nb2xpbmE= 38396\nU2hv 38397\nIEJlbmVk 38398\nb2x1 38399\nIHJlc3Rz 38400\nIGzDpW5n 38401\nINCe0LTQvdCw0LrQvg== 38402\nIHByemV3 38403\nIHBlcHA= 38404\nIG1hcnJpYWdlcw== 38405\nIEJJRw== 38406\nYW5kYW4= 38407\nIG1hZ2ljYWxseQ== 38408\nIGJhYnlz 38409\nIOuMkw== 38410\nIGhhY2tlcnM= 38411\nQmFieQ== 38412\nIE1vbnN0 38413\nIGNpZXI= 38414\nIEFyYWJz 38415\nINC80LDQs9Cw0Lc= 38416\nIEluZG9uZXNpYW4= 38417\nIE1hcmt0 38418\nIGRhY2h0ZQ== 38419\nIFNjaMO8bGVy 38420\nIFZORA== 38421\nIHNwaWVsdA== 38422\nIHBlcmx1 38423\nINC/0YDQvtGF0L7QtA== 38424\nIHNhbHRlZA== 38425\nIGltcHJvdmlz 38426\nIEluc3Ry 38427\ndmVsbWVudGU= 38428\nIG5lc3M= 38429\nIGZ1bmd1cw== 38430\nIGNvbGxhYm9yYXRvcnM= 38431\nIFZpcnVz 38432\nZXN0YXI= 38433\nIHByb2plY3Rvcg== 38434\nINCf0YDQsNCy 38435\nIGFnaWxpdHk= 38436\n15nXoNeV 38437\nZXJlbA== 38438\nINCy0L7Qt9Cy 38439\nINCx0LDQtw== 38440\nIENhdGh5 38441\nxJ91 38442\nINCz0L7QstC+0YDQuNC7 38443\nYmlsaXR5 38444\nIExhbmM= 38445\nIEtpbWJlcmx5 38446\nIEJyaWVm 38447\nIHV0dmVjaw== 38448\nIGdvZ2dsZXM= 38449\nIHByZXNjaG9vbA== 38450\nQVRIRVI= 38451\nIG1vdGl2ZXM= 38452\nIEJvbmc= 38453\nRVg= 38454\nIGNoaWxseQ== 38455\nIEFkdmlzb3J5 38456\n4oCL4oCL 38457\nINC60L7RgtC+0YDQvtC8 38458\nIHRyYWl0b3I= 38459\nIGRlbWFzaWFkbw== 38460\nINGG0LXQvQ== 38461\nINC80L7QuA== 38462\nIG11bHRpZg== 38463\n7JSs 38464\nIEFsZXhpcw== 38465\nIHppZXQ= 38466\nIFJhbWE= 38467\nYnJhbmNl 38468\nIHNhbmN0aW9u 38469\naXRvdXM= 38470\n15XXmg== 38471\nIOuztOuC 38472\n0YHRgtCw0L3QvtCy 38473\nINGA0LXRgQ== 38474\nIENodXJjaGlsbA== 38475\nINC/0YDQtdC3 38476\nIElP 38477\nIEdlZQ== 38478\nIEdhdGhlcg== 38479\nYXRvcmk= 38480\nVHlsZXI= 38481\nINC90LXQvNC90L7Qtg== 38482\nIGLDpWRl 38483\nIEtpbGxlcg== 38484\nIHR1YmVy 38485\nIFJhbWFkYW4= 38486\n4b8= 38487\naWVodA== 38488\nIHN0cmFuZ2VseQ== 38489\n0LvRgw== 38490\nIHJlZGVzaWdu 38491\nIGluY3VtYg== 38492\nIGJlcmFiZXI= 38493\nIFZvbGtzd2FnZW4= 38494\nbWV0YWw= 38495\nZHp5 38496\ncGNpw7Nu 38497\nIOyViuyVhA== 38498\nIEdvb2RuZXNz 38499\n0LjQstCw0LXRgtGB0Y8= 38500\nYmFobg== 38501\nIEFudGFyY3RpY2E= 38502\n0LXQutGC0L7RgA== 38503\nIGhvbWVvd25lcnM= 38504\nemVpZ3Q= 38505\nIO2YhOyerA== 38506\n7KeA64+E 38507\nIGdlb2dyYXBoaWNhbA== 38508\ndGhpbmtpbmc= 38509\nIGdvc3Rh 38510\nIEltYW0= 38511\ndWxpZmxvd2Vy 38512\nZGFn 38513\nYW5udA== 38514\nYWtvdg== 38515\nIGRvd253YXJkcw== 38516\n7LK06rCA 38517\nQ1VCRQ== 38518\nINCa0YHRgtCw0YLQuA== 38519\nINC/0L7Qu9C+0LI= 38520\nIHBsYXRlYXU= 38521\n4bil 38522\nIGNobG9yaW5l 38523\nIGFjY2VsZXJhdG9y 38524\nIHNvbHZlcw== 38525\nIEdyYXNz 38526\ncGlhbm8= 38527\nINqp2Kc= 38528\nINio2Ko= 38529\nIFJvY2hlc3Rlcg== 38530\nINmH2Yo= 38531\nIGNvbGxlY3Rz 38532\njZTrnbw= 38533\nIENoZWVy 38534\nbGluZ2Vu 38535\nINGA0LDQt9Cz 38536\nIGFtw6lyaWM= 38537\naHRh 38538\nRUNU 38539\nIGFydGlmaWM= 38540\nIFBheVBhbA== 38541\naGFuYQ== 38542\nU3RlcGhlbg== 38543\nIEdlc3Q= 38544\ncGhhbHQ= 38545\nIHJlcGxpY2F0aW9u 38546\nIFdpbGxpZQ== 38547\nIG5ldXRy 38548\nIGlycmF0aW9uYWw= 38549\nIGRhZG9z 38550\nIEFpZA== 38551\na2Ft 38552\nYW50ZXI= 38553\nINC00YPQttC1 38554\nIGRldG9u 38555\nIGhhcmU= 38556\nIGJldHM= 38557\nYmFnYWk= 38558\nIHN0YWluZWQ= 38559\nIHBsYXVzaWJsZQ== 38560\nIHBlZWxpbmc= 38561\nIGNyw610 38562\nIGdyb3Rl 38563\n7Law 38564\npbTqsow= 38565\nYWx0ZXQ= 38566\nUGhvbmU= 38567\nRmls 38568\nU1FM 38569\nIGdlZmFsbGVu 38570\nIHNhw7pkZQ== 38571\nIFRhbWls 38572\nY291cw== 38573\nINCz0LvQsNCy0L3QvtC1 38574\nIGF0cmF2w6lz 38575\ndXNzaWE= 38576\nIHp3ZWl0ZW4= 38577\nIEVsdmlz 38578\nIG1vdmVy 38579\nIGxpbWl0ZQ== 38580\nYXJleg== 38581\npbTqs6A= 38582\nIEtyYW5rZW4= 38583\nw7xyZQ== 38584\nIOyViuyVhOyalA== 38585\nIHRow6BuaA== 38586\nIHByb2ZvdW5kbHk= 38587\nIGJlZHJvb21z 38588\nIHRvb3RocGFzdGU= 38589\nIEFjY2VwdA== 38590\nw6l0aWNv 38591\nIGvDvMOn 38592\nIEFyeQ== 38593\nYWRpbg== 38594\nIGdyYW51bGFy 38595\nZWN0ZWQ= 38596\nIG1lbmphZGk= 38597\nIGNvbXBldGVuY2U= 38598\nZG9j 38599\nIHNwYXJrbGluZw== 38600\nIOyii+ydhA== 38601\nIGNvbnN0cnVjdGluZw== 38602\nIGFtdXNlbWVudA== 38603\nIEluc3VyYW5jZQ== 38604\nIEZldWVy 38605\nIHJlbm92YXRpb24= 38606\nc3VjaA== 38607\ncGxhdA== 38608\nIHByb3N0aA== 38609\nIGJleQ== 38610\nIENvbXBsZXRlbHk= 38611\nIHpvZA== 38612\nYWxu 38613\nVmljdA== 38614\nIGNvbmZpcm1z 38615\nw6R0eg== 38616\n4pY= 38617\naGFtbWVy 38618\nINC30L3QsNC10YI= 38619\nIGFkbWlyZWQ= 38620\noOulvA== 38621\nIEZydWl0 38622\nZXJ0ZW4= 38623\nIG5pZWNl 38624\nIFRpbnk= 38625\nIHBsdW1iaW5n 38626\nZXJtYQ== 38627\nINC70LXQs9C60L4= 38628\nIHdpbmRzaGllbGQ= 38629\nINGB0LzQtdGA 38630\nIGJ6dw== 38631\nIGFib2xpdGlvbg== 38632\nIFNhZGhndXJ1 38633\nIHByZWFjaGVk 38634\nIENyZWF0aW5n 38635\ncGVyZWQ= 38636\nIHZvbG9udA== 38637\nIHF1aW50 38638\nIHByaW50ZXJz 38639\nIG5lZ3Jv 38640\nIGdyb3NzZQ== 38641\nIFRoeQ== 38642\nIEZlbGxvd3M= 38643\nIHN0YW5pZQ== 38644\nIG5ld2NvbQ== 38645\nIEh1ZQ== 38646\nIEZyZXVuZGU= 38647\nIENvbnN0cnVjdGlvbg== 38648\nIGFkdmVyc2l0eQ== 38649\nIG5lZ2F0aXZlcw== 38650\nIGhhemFyZG91cw== 38651\nIGNvbXBlbGxlZA== 38652\nIHdvaw== 38653\nIE95 38654\n0L/QsA== 38655\nqqjr 38656\nIHJlbmRleg== 38657\nIG92ZXJj 38658\nIHdlYXZpbmc= 38659\nINC40LTQtdGC 38660\nIHByb3NlY3V0b3Jz 38661\nIGF1ZGlvYm9vaw== 38662\nIGFuY2VzdG9y 38663\nIHVuZGVyZ29pbmc= 38664\nIHBvdW5kaW5n 38665\nIO2SgA== 38666\nIOy2pA== 38667\nIHR1bGVl 38668\nIOyXtOw= 38669\nIHpvYWxz 38670\nIG5laW4= 38671\nIG9rZQ== 38672\nIEpveWNl 38673\nIG51ZA== 38674\nIGRpbGlnZW5jZQ== 38675\nIExhYnM= 38676\nIHZlbnRz 38677\nIGFuY2VzdHJhbA== 38678\n4Lir4Lih 38679\nINC80YPQttGH 38680\nIG5vbcOpcw== 38681\nd2FsaQ== 38682\ncWluZw== 38683\nIE11bHRpcGxl 38684\nIENvbnN1bHQ= 38685\nIGlzdGVkaQ== 38686\nIERveQ== 38687\nYWthaA== 38688\nIGRpc2NpcGxpbmVk 38689\nIGFsdGVybmF0aW5n 38690\n55I= 38691\nIHZlcm1l 38692\nINC+0Yk= 38693\nIHRvdGE= 38694\nIFByYWc= 38695\nIHN3b3Ju 38696\nIGJlYmVy 38697\nIEF1ZmdhYmU= 38698\n7Jq06w== 38699\nIHl1cA== 38700\nIHJlY2xhaW0= 38701\nb251dA== 38702\nIGF1Y3VuZQ== 38703\nIGFtcGg= 38704\nIMWbd2ll 38705\nIGFh 38706\naXNjb3Zlcg== 38707\nIEFyZw== 38708\nY2llxbw= 38709\nIGRlc3Nhcw== 38710\nIFfDpGg= 38711\n4bu5 38712\nINC00LDQstC90L4= 38713\nIHNpbGVudGx5 38714\nYXJj 38715\nIO2bhOuztA== 38716\nIHR3ZWV0aW5n 38717\nIE9uZA== 38718\npqzrqbQ= 38719\nIGJvd2Vs 38720\n7IWo7Ja07JqU 38721\nT1NF 38722\nIHByb3Bpbw== 38723\nIEt1bnN0 38724\na3VuZw== 38725\nIGRvbm7DqWVz 38726\nIEhvcml6b24= 38727\nIEZyb2c= 38728\nIGFyaXN0 38729\nw6Js 38730\nINC60L7Qtg== 38731\nIHNlZ3VuZG9z 38732\nIFNob3J0bHk= 38733\nIENyb3dk 38734\naXJhbg== 38735\nIHfFgmHFm2Np 38736\nIExhYw== 38737\naWRlbnRl 38738\nIOqwgOyekA== 38739\nIGxlbg== 38740\nIFNVUw== 38741\nIE1vdG9ycw== 38742\nIFRyZW50 38743\nb21pZQ== 38744\nIHRyYW5zbWl0dGVy 38745\nIEFzc2Fk 38746\nIHBzeWNoaWF0cmlj 38747\nINC20LjRgtGM 38748\nIG91dGxpbmVz 38749\nIGVmZmVjdGl2ZW1lbnQ= 38750\nIFJlbGlnaW9u 38751\ncHJlaA== 38752\nINC00L7Qu9C20L3QsA== 38753\nIM2hwrA= 38754\nIENvbnNlcnZhdGlvbg== 38755\nIOG7 38756\nINC30LDQuQ== 38757\nIHJlc2lkZQ== 38758\nIGNvbXBsZXRv 38759\nS0VO 38760\nIOuCmOyYpOuKlA== 38761\nIHN1YnVyYmFu 38762\nIHLDqXBvbmRyZQ== 38763\nINGA0LDQt9C70LjRhw== 38764\nIGdhbGxlcmllcw== 38765\nIHJhcHQ= 38766\nKS4uLg== 38767\nIGNydWVsdHk= 38768\nIFZNd2FyZQ== 38769\n7Yis 38770\nIGhhecSxcg== 38771\nIGdyb3VwaW5n 38772\nIFJpZGVy 38773\nIHN5bGxhYmxl 38774\nIGJlaXNwaWVsc3dlaXNl 38775\nIHNhZmVndWFyZA== 38776\nIHBlbMOtY3VsYQ== 38777\nYXJ0aQ== 38778\nINCh0L4= 38779\nIGNoZWdh 38780\nINC60L7QvNGD 38781\nIHNlaXNt 38782\nIGhhcm1sZXNz 38783\nIFdhcnJpb3Jz 38784\nINC/0YE= 38785\nIHNoYW1lbGVzcw== 38786\nIEJhdW0= 38787\naW5zdGFsbA== 38788\nIHRvb2xraXQ= 38789\nIHBpcGVsaW5lcw== 38790\nIHB1c3N5 38791\nIGNvbmNlYWw= 38792\nIHByb3Rlc3Rpbmc= 38793\nb2Nob25k 38794\nIGR1YQ== 38795\nIFBvc2U= 38796\nIGhlbGl1bQ== 38797\nIFVY 38798\naWtsZQ== 38799\nIFN1ZmY= 38800\nIOyEuOqzhA== 38801\naW5nZXJz 38802\nINGB0LvRg9GH0LDQuQ== 38803\nIGRlc2NlbmRpbmc= 38804\nIG1vbnRhZ2U= 38805\nSGlnaA== 38806\nIOydtOyW 38807\nIElkaQ== 38808\nINeR16E= 38809\nIGV4cHJlc3NpdmU= 38810\nINC/0L7Qu9C10Lc= 38811\nIHBvbmU= 38812\nIGFkb2xlc2NlbnQ= 38813\n0LDQvdC90YvQtQ== 38814\nIGFzc2Fzc2luYXRpb24= 38815\nd2Vpc2Vu 38816\nZW1hdGljYWxseQ== 38817\nYXV0aA== 38818\nIHVyZw== 38819\nIGdhbmhhcg== 38820\nIGZ1bmRv 38821\nIFJob2Rl 38822\nINC40YHRgtC+0YDQuNC4 38823\nIGNvbXBhcnRpbA== 38824\nIGRpbWluaXNoZWQ= 38825\nIGFwcHJlbnRpY2U= 38826\nINCR0YPQtA== 38827\nIHBob3RvbnM= 38828\nIGPDs2Q= 38829\nb25haw== 38830\nIGFkZWxhbnRl 38831\nIGNodQ== 38832\nb3BpYw== 38833\nIGFpeMOt 38834\nZWRkYXI= 38835\nIENvbmdyYXRz 38836\nbW9y 38837\nIHJlc2VydmF0aW9ucw== 38838\nIFRvYnk= 38839\nIEtlcm4= 38840\nIHJhemVt 38841\nIGZvcmdlZA== 38842\nIGhvcnJpZnlpbmc= 38843\n2YrYuQ== 38844\nIEpvaW5pbmc= 38845\nIEF1dGg= 38846\nZGFo 38847\nIGNvbnNpZw== 38848\nIGludGltaWRhdGVk 38849\nIHBlcmlwaGVyYWw= 38850\nIG1lbm8= 38851\nIGRldGVjdGluZw== 38852\nIHRlb3I= 38853\nIHRhZ2dlZA== 38854\nIG5vc3RhbGdpYw== 38855\nIOuvuOyViA== 38856\nIHZlcmRp 38857\nIGxhYmVsaW5n 38858\n0L/QvtC0 38859\nYXN0ZXM= 38860\nIHZpc3Q= 38861\nIGN5dA== 38862\nIGZsaXBz 38863\n0YDQuNC3 38864\nYmFsYW5jZWQ= 38865\nINC+0YjQuNCx 38866\nIGRlc3Rpbg== 38867\nbGFzc2U= 38868\nZXJlaQ== 38869\nIGthbG8= 38870\nIGFycXU= 38871\nIHBsYW5v 38872\nIG9yZGluYW5jZQ== 38873\nIGNvbXBpbGF0aW9u 38874\nIFZvY8Oqcw== 38875\nIEVjbw== 38876\nIOy2lOyynA== 38877\nIGVuY2ltYQ== 38878\nIEdhcnJldHQ= 38879\nIENvcmQ= 38880\nw7Zsa2Vy 38881\nIEFycm93 38882\nIHByb3RvbnM= 38883\nLOKAiw== 38884\nIOyymOs= 38885\nIHNjYW5k 38886\nIGJlaWdl 38887\nY29uZw== 38888\nIGJpa2luZw== 38889\nIFRM 38890\n0YPQvdC0 38891\nIOyGlOyngQ== 38892\nIFZpbGxh 38893\nIEpBQ0s= 38894\nIMO2xJ9yZW4= 38895\nIHRlbWFz 38896\nIEt5dW5n 38897\nSmVubg== 38898\nIGN1ZA== 38899\nIGltcG9zaW5n 38900\nIGNvbW1hbmRtZW50cw== 38901\nIE1lYW5z 38902\nIETDpHI= 38903\nIHJlY29tZW5k 38904\nIGRpc3Bvc2l0aW9u 38905\n2KfZhw== 38906\nIHRodQ== 38907\nIHJlZHVjdGlvbnM= 38908\nIGRpdQ== 38909\nINeV15DX 38910\nINC40YHRgdC70LXQtA== 38911\ndGhyZW4= 38912\nIGxhZG9z 38913\nIFJC 38914\naXhlZA== 38915\nIOyP 38916\nRnI= 38917\nc3RpbGw= 38918\nIG9sbWFz 38919\nQ0hVQ0s= 38920\nIO2GoA== 38921\nIEluZGVwZW5kZW50 38922\n0JLQng== 38923\nIHBpdHM= 38924\nIHVuZGVydGFrZW4= 38925\nIGbDuHI= 38926\nIE5hdw== 38927\nIOyekeyXhQ== 38928\nIHNoZXBoZXJk 38929\nIGxhbmd1ZQ== 38930\nIEphYg== 38931\nIERydW0= 38932\nIEVsZWt0 38933\n4buRdA== 38934\nIOydtOyqvQ== 38935\nIGJlZ2lubmVu 38936\nIEZ1cnk= 38937\n4buDdQ== 38938\nc2VjdGlvbnM= 38939\nIHNwcmF5ZWQ= 38940\nIG3DoXI= 38941\nIFZvbHQ= 38942\nIFNlb25n 38943\n0LjRgtC10Ls= 38944\nZHVjdGlvbg== 38945\nYXNhbg== 38946\nIGp1ZGdtZW50cw== 38947\naW1hYW4= 38948\nnteq 38949\nIHNpZW50bw== 38950\nIEFDVA== 38951\nIEJI 38952\nZGV2 38953\nIOyii+yVhO2VmA== 38954\nIGpvcm4= 38955\nSVNUSU4= 38956\nIHJvYXI= 38957\nIGltbWVyc2lvbg== 38958\nYWZmbGVz 38959\nIHRyYWluZWU= 38960\nIEJpbGxib2FyZA== 38961\ncmVzc2Vz 38962\nIFdhcm0= 38963\nIFJvYmVydG8= 38964\nIHV0aWxpeno= 38965\nIElnb3I= 38966\nIHJhc2g= 38967\nIGFuYWx5dGlj 38968\naXJhbQ== 38969\nIHN5bW1ldHJpY2Fs 38970\nIGxpZmVzcGFu 38971\nIGVhdGVy 38972\nIEJsb29tYmVyZw== 38973\nYXRlcmlhbA== 38974\nIOuvvw== 38975\nIGlzdGVy 38976\nIGludmFsdWFibGU= 38977\nIGFzc2lzdGluZw== 38978\nIHNoYWNr 38979\nzrzOsc+EzrE= 38980\namlz 38981\nZW5peg== 38982\nINC/0YDQtdC00LvQvtC2 38983\nIGRlY2xhcmluZw== 38984\nIFZpa2luZw== 38985\nIEFzc2lt 38986\nIGV4cGVuZGl0dXJl 38987\nIHBvc2luZw== 38988\nIE9udW4= 38989\nIGluaWM= 38990\n0LDRjtGC0Yw= 38991\ncmV2 38992\nIG1pZWRv 38993\nIGZpbHRoeQ== 38994\nIElC 38995\nIERpc2NvdmVy 38996\naWNodGV0 38997\nbWlsbGlvbg== 38998\ntoTrk6TsnbQ= 38999\nIGFtYmlndQ== 39000\nIEZseW5u 39001\nYmFyZHppZWo= 39002\nIGluY29tcA== 39003\n0LDQstC90L4= 39004\nemlh 39005\nIGluZmx1ZW5jaW5n 39006\nIHdvcmxkbHk= 39007\nIFNhbGVzZm9yY2U= 39008\nemV0 39009\nIHBhcnRpY3VsaWVy 39010\nIEtvY2g= 39011\nIDE5NDM= 39012\nIHRvbmVy 39013\nINGN0LrRgdC/0LXRgA== 39014\nIHN1c2NyaQ== 39015\nIHRyaWdnZXJpbmc= 39016\nSUNFUw== 39017\n7Iqk6rCA 39018\nzrTOsQ== 39019\n0YDQsNCx0L7Rgg== 39020\nIGFmdGVyd2FyZA== 39021\ncGluZQ== 39022\nIElM 39023\nYXJldGg= 39024\nINC/0LDQuw== 39025\nIHNha2Vy 39026\nIDE5NDc= 39027\nQUY= 39028\ndXlvcnN1bg== 39029\nIOyKpOs= 39030\nIHF1YW50aWZ5 39031\nIG1lbnRvcnNoaXA= 39032\nIGxsZWdh 39033\nIFRhbWFyYQ== 39034\nIG9wdGltaXppbmc= 39035\nIGZyb250cw== 39036\nb3N0ZXJz 39037\nIGVzcXVlcg== 39038\nIHN1Ym1pc3Npb25z 39039\nIGFubmlo 39040\nIHN1Y3Rpb24= 39041\nbHVlbmNl 39042\nY2hpZWRlbg== 39043\nSU5HUw== 39044\nINeR15Q= 39045\nINGB0YbQtdC9 39046\nIHdpZWx1 39047\nIG9iamV0bw== 39048\nIGJvb2Jz 39049\nIEdlc2Now6RmdA== 39050\nIGVhcmJ1ZHM= 39051\nINGA0LDQvdGM0YjQtQ== 39052\nIHJvdXRpbmVseQ== 39053\nIGNvbGxhZ2Vu 39054\n0L7QtNGL 39055\nIENpbm5hbW9u 39056\nIGJhaXg= 39057\n2K/ZhQ== 39058\nZnJhZ2U= 39059\nINC60L3QvtC/ 39060\nIGRlY2VwdGlvbg== 39061\nIHVuZXhwZWN0ZWRseQ== 39062\nIHNtZWxsZWQ= 39063\nIGxvb3M= 39064\nIGhpZ2hsaWdodGVy 39065\nIOq4sOuzuA== 39066\nIEdsYXNnb3c= 39067\nb3dhbmE= 39068\nbW4= 39069\nIEplcmVtaWFo 39070\nIERhdGFi 39071\naWV0ZQ== 39072\nIGJhdw== 39073\nIHByb3BpYQ== 39074\nIHByb3ByaQ== 39075\nT09PT09PT08= 39076\naW5rZXI= 39077\nIHBlcnR1cmI= 39078\nIEZha2U= 39079\n7J207JY= 39080\naW1taW5n 39081\nIHVuZG9jdW1lbnRlZA== 39082\nIHRyYWJhamFuZG8= 39083\nIHJvYW0= 39084\nINC00L7Qu9C20L3Qvg== 39085\nIGFyYmU= 39086\nIGFuaQ== 39087\nYXRhbA== 39088\nIGFyYWRh 39089\nIEFuZGE= 39090\nIOybgA== 39091\nIEJyYW5jaA== 39092\nb2lyZXM= 39093\nIG91dHNpZGVy 39094\nZG9sbGFy 39095\naXNzZXM= 39096\nYmVhbnM= 39097\nIEdpZw== 39098\ncmFkb3M= 39099\nIFN1dA== 39100\nIExhbmNl 39101\nZWRzacSZYmlvcg== 39102\nIGNvbGE= 39103\nb25lbnRz 39104\nIHJlY29uc2lkZXI= 39105\nIG1vbmRv 39106\nIHVuc3VjY2Vzcw== 39107\nIEvDpA== 39108\nIHJlZ2Vs 39109\nIGJpc29n 39110\nZXR1cw== 39111\nIHVucmF2ZWw= 39112\nIHN3ZWV0aWU= 39113\nIHJlcHLDqXNlbnQ= 39114\nb3VyaW5n 39115\nIGdyb3VuZHdhdGVy 39116\nIEJldw== 39117\nIHNjcmF0Y2hlZA== 39118\nIGNhc3NldHRl 39119\nIGNpZGVy 39120\ncGlz 39121\nINGB0LDQvNCw 39122\nIGdsb2JhbGl6YXRpb24= 39123\nIGRlZ3JhZGF0aW9u 39124\nIGRlZ2VuZXI= 39125\nIFJvc2ll 39126\naWNrdA== 39127\nIG92ZXJ3ZWlnaHQ= 39128\nIE1FTQ== 39129\nIGd1YXJkaWFucw== 39130\nIGNvbnNlYw== 39131\nSG1t 39132\nINC/0L7RgtGA0LXQsQ== 39133\nIG1ldmE= 39134\nIGdyYWZmaXRp 39135\nIGZsaXJ0 39136\nIEJQ 39137\nIGp1c3Rv 39138\nIFRob3VzYW5kcw== 39139\nn6zsmrQ= 39140\nLio= 39141\nIFJBVw== 39142\nIGZsdW9y 39143\naXlp 39144\nYW50YWw= 39145\namVk 39146\nIFNoZW5n 39147\nIEVsaXNl 39148\nIENoYXJnZQ== 39149\n7J207Yq4 39150\nIGNvbmVz 39151\nbmllcw== 39152\nZ2lh 39153\nINC90LDRh9Cw0LvQsA== 39154\nIERoYXJtYQ== 39155\nIOuLpOyWkQ== 39156\nIGZhdm9ycw== 39157\nIFRydW5n 39158\naGV0dG8= 39159\nIHBvenc= 39160\nIGxvbmdv 39161\nIGtlbHU= 39162\nIGRpZ2VzdGlvbg== 39163\nIEVpZw== 39164\nIFRIRVJF 39165\nIHRpZXJz 39166\nIHN1bms= 39167\nIG15c3RpY2Fs 39168\nenVi 39169\nIMOJdA== 39170\nIGFudGljaXBhdGluZw== 39171\nIFZpbmU= 39172\nWVk= 39173\nIGNvbmNlbnRyYXRpbmc= 39174\nIEFncmVlbWVudA== 39175\nINC+0LrQvtC70L4= 39176\nIGxpZHQ= 39177\nIFlhbw== 39178\nINGB0LvQuNGI0LrQvtC8 39179\ncsOt 39180\nSVNUSU5DVA== 39181\nIE9GRklD 39182\nIHNvYWtpbmc= 39183\nIHNpaWhlbg== 39184\nIHJlZmVyZW5jaW5n 39185\nIFRhbXBh 39186\nYW5leQ== 39187\nIHJlc3B1ZXN0YQ== 39188\nIENvYWxpdGlvbg== 39189\nINGB0L7Qs9C70LDRgQ== 39190\nYW5raW5k 39191\nIOub 39192\nIFl1bW15 39193\n67Cw 39194\nIG9uYw== 39195\ndWnDp8Ojbw== 39196\nIHRoZW8= 39197\nIG11cmFs 39198\nIFRlYWNoZXJz 39199\nIHdhaXRz 39200\nIHJlbnRpbmc= 39201\nIEhhcm1vbg== 39202\nIGXFnw== 39203\nIE11bmljaA== 39204\n7Zmc 39205\n7Ja8 39206\nY2FyZHM= 39207\nIHJvdWdl 39208\nIG7Dqm4= 39209\nY2x1Yg== 39210\nIHVuc2Vlbg== 39211\nIGRlcHJlY2k= 39212\nIGNvbXB1dGVk 39213\nIHdpcGluZw== 39214\nIEVsbGk= 39215\naWRlbnRpZmllZA== 39216\nIGNsdXR0ZXI= 39217\ncm9sZXVt 39218\nIHRlbGVm 39219\nIGxldmVsaW5n 39220\nIFdvb2R5 39221\nIEd1cw== 39222\nIEJlbm5ldHQ= 39223\nIHNpdGlv 39224\nacWC 39225\nIHBvc3Nlc3Npb25z 39226\nIE5hdGFzaGE= 39227\nb2xkb3du 39228\nINGB0L7QvtCx0Yk= 39229\nIExpYw== 39230\nIOunjOuToA== 39231\nIGxvcnNxdWU= 39232\nd2Vo 39233\nINC80LDQvA== 39234\nbGl0ZXI= 39235\nYWRvbW8= 39236\nIGZpbmk= 39237\nz47Pgg== 39238\nINGD0LHQuNC5 39239\nIGluZGlzcA== 39240\nIHRlbGV2aXM= 39241\nIHDDoQ== 39242\nIENyZW8= 39243\nw61sbA== 39244\nIGd1cg== 39245\nIE1BTA== 39246\nINGA0LDQt9C90YvRhQ== 39247\nIHppZWhlbg== 39248\nIGZhc2hpb25lZA== 39249\nIGRlYmF0aW5n 39250\nIFNvdXA= 39251\nIFByb3ZpbmNl 39252\n6re466CH 39253\nIGltcHJvcGVy 39254\nIGltYWdlbg== 39255\nINGB0LTQtdC70LDQuw== 39256\nIGxvZ29z 39257\nIGV2ZW50bw== 39258\n4bqjbw== 39259\nbGFyZGE= 39260\nINC90LDQt9GL0LLQsNC10YLRgdGP 39261\nIHZlcmY= 39262\nIHNjcmVlbnNob3Rz 39263\n15XXk9ei 39264\nIEF1cm9yYQ== 39265\nIEJhbGk= 39266\ndGVyZWQ= 39267\nIGNvbnRhZ2lvdXM= 39268\nIGNvbXBhcnRpcg== 39269\ndmVuaWRvcw== 39270\ncmlrZQ== 39271\nINCy0YvQs9C70Y/QtNC40YI= 39272\nIGZyZWVkb21z 39273\nbmljYXM= 39274\noKTshJw= 39275\nIHJlZHV6 39276\nIEVjdQ== 39277\nIGFib25u 39278\nIFNFw5E= 39279\nIEJpdGNo 39280\nIHByb2pldG8= 39281\n0LjRh9C90L4= 39282\nZXR0cmU= 39283\nQU5OQQ== 39284\ndGhhbms= 39285\nIEFP 39286\nYXJuaXNo 39287\naWXDn2Vu 39288\nIHJpcHBsZQ== 39289\nIHBhbnRyeQ== 39290\nIEdI 39291\nzrPOsQ== 39292\nIOydtOuyiOyXkA== 39293\nIHZhbGlkYXRlZA== 39294\nIGJydXNoZWQ= 39295\nIEVtaW4= 39296\nIERhcnRo 39297\nZXNpbg== 39298\nLC4= 39299\nIHZhbGxl 39300\nIGplcnNleQ== 39301\ndWxhbg== 39302\nUmVhZA== 39303\nIFJhbmdlcnM= 39304\nIHNvb3RoaW5n 39305\nIGNvbXBsZW1lbnRhcnk= 39306\nIFZlcmtlaHI= 39307\nYWNha3Q= 39308\nIGJhdGh0 39309\nIE5E 39310\nU29u 39311\nIO2ZlOyepQ== 39312\nIEF2aQ== 39313\nIFNBTA== 39314\nYWlzc2U= 39315\nIHNlbWFpbmVz 39316\nIFN1cnY= 39317\nd2llcg== 39318\nINCy0LjQtNC10Ls= 39319\nIHNpZXRl 39320\nlOuPhA== 39321\nIFJhbXNheQ== 39322\nIFF1ZWVuc2Jvcm91Z2g= 39323\nIE1lbmdl 39324\nIEZvb2Rz 39325\nIHRoZW9sb2dpY2Fs 39326\nIFsj 39327\nINCy0L7QvdC4 39328\nIGltbWlu 39329\naW9zaXR5 39330\nIEFiZ2VvcmQ= 39331\nIEFjaG8= 39332\nIMOU 39333\nIHN0YWlucw== 39334\nIHJlYWxpc3RpY2FsbHk= 39335\nIGZhc2hpb25hYmxl 39336\nIENFT3M= 39337\nIFNraWxs 39338\nINCy0LbQtQ== 39339\nIGRldmVy 39340\nIFBsdWc= 39341\n5qo= 39342\nUG9k 39343\nIGxvYWY= 39344\nIGdlYnJhY2h0 39345\nIGFic29yYnM= 39346\nIEdyYW5ueQ== 39347\nIG1hbHdhcmU= 39348\nYWfEmQ== 39349\nIGNpdmlsaXphdGlvbnM= 39350\nIM+B 39351\nIGjDpGx0 39352\n0KHQog== 39353\nZ3JlYXQ= 39354\nIGxheWVyaW5n 39355\nc2luZ3M= 39356\nINCy0ZbQvQ== 39357\nIHJlY29nbml6YWJsZQ== 39358\nIHdvag== 39359\nIHdldGVu 39360\nzrPOvw== 39361\nU3R1ZGVudA== 39362\nIGTDqWZpbg== 39363\ncGxlYXNl 39364\nZW5jaA== 39365\nIGF0dGlj 39366\nIE90dGF3YQ== 39367\nIG9wdGVk 39368\nIGNhcHRpdg== 39369\nIG3Fgg== 39370\nIFlB 39371\nIFdhbmQ= 39372\nIGJvdW50eQ== 39373\nIDI3MA== 39374\nIHNwZWN1bGF0ZQ== 39375\nIGVuaGFuY2VtZW50 39376\nIGNvbW1vZGl0aWVz 39377\nIE1pbHRvbg== 39378\nZWo= 39379\nYWxvbQ== 39380\nRGFz 39381\nIGNvb2xkb3du 39382\n16jXkNec 39383\nINeQ16Q= 39384\nIHdjemXFm25pZWo= 39385\nIGVsb25n 39386\nIGRpb2Rl 39387\naW5hw6fDo28= 39388\nIElyaXM= 39389\nIEli 39390\nIHN1bW1vbmVk 39391\nIHJlc3Bl 39392\nIFJhY2g= 39393\nIMK7Og== 39394\nIHZ1cg== 39395\nIG1vdmltZW50bw== 39396\nIGZsdWVudA== 39397\nIEV2b2x1dGlvbg== 39398\nIEJ1dHQ= 39399\naWZpY2FjacOzbg== 39400\nlJTslrQ= 39401\nINGN0L3QtdGA0LM= 39402\nIG1hbmlwdWxhdGluZw== 39403\nIHBvc2l0aXY= 39404\n0LzQvtGB 39405\nIHdpeg== 39406\nIGludG94 39407\nzq3PgQ== 39408\n0LXQvNGB0Y8= 39409\naXZlc3Nl 39410\naW1pemk= 39411\nIOyauA== 39412\nIGtub2Nrcw== 39413\nIGNvbmdlc3Rpb24= 39414\nIElkZWFsbHk= 39415\nIEhvbGRpbmc= 39416\nIHBvYnJl 39417\nIEpVTA== 39418\nIOu2hOuTpOydgA== 39419\nIM6xzro= 39420\nIEZlcmd1c29u 39421\nIExhYm9yYXRvcnk= 39422\ncmljaHRlbg== 39423\ncm9waHk= 39424\ncHJvZHVjdGlvbg== 39425\nYXNzdW5n 39426\nSVRB 39427\nIHNpw6hjbGU= 39428\n16jXqg== 39429\nY2lzaW9u 39430\nINek15Q= 39431\nIElyZW5l 39432\nYW5jYQ== 39433\nIOyCrOqzoA== 39434\nIHBpbnBvaW50 39435\nIGRlc2lnbmF0aW9u 39436\nxZ9hbQ== 39437\nbMSxxZ8= 39438\nYWF0 39439\nIG7DpWdyYQ== 39440\nIG15dGhpY2Fs 39441\nIERlY2xhcmF0aW9u 39442\nIOyeoeyVhA== 39443\nIGJ5dGU= 39444\nLuKZqg== 39445\nRGVs 39446\nIO2NvA== 39447\nIG51dHJpdGlvdXM= 39448\nINGA0YPQsdC70LXQuQ== 39449\nU0FZ 39450\nTWFzdGVy 39451\nINGE0L7RgtC+0LPRgNCw0YQ= 39452\nIOuSpOyXkA== 39453\nIG5laA== 39454\nIGRva3VtZW50 39455\nIGN6YXN1 39456\nIGNvbnRpbnVh 39457\nIFNpbGVudA== 39458\nIHRlbnNvcg== 39459\nIHRhbnRh 39460\nIGlyZ2VuZHdv 39461\nIExFVA== 39462\nIFNoYWt0 39463\nbGFtYQ== 39464\nY2hsYWc= 39465\nIGRpbmdlbg== 39466\n0YHRgtGA0LA= 39467\nIGVocmxpY2g= 39468\nIE1hY2h0 39469\ncmVscw== 39470\nw6BjaWVz 39471\ndmlkZW8= 39472\nIG5hdHVyYWxl 39473\nIFNURVZF 39474\ndW1t 39475\nQkFDSw== 39476\nIDcyMA== 39477\nIG1vbWVuY2ll 39478\nIFN3YW4= 39479\nIHRlY2huaWNpYW5z 39480\nIGdlZWhy 39481\nIE1lbmQ= 39482\nUmVn 39483\nIHNjYWZm 39484\nIGFpZGU= 39485\nIOuztOuKlA== 39486\nIHByZXNzZXM= 39487\nbGVyZGU= 39488\nXCc= 39489\nIHVsdHJhc291bmQ= 39490\nIGRpc2NsYWltZXI= 39491\nIE1pdHM= 39492\nIEhvbGlkYXk= 39493\nIGV4dGVybmFsbHk= 39494\nIEZhdGU= 39495\nSU5P 39496\nIENhdHM= 39497\n67CV 39498\ndW1v 39499\nY29udHJvbA== 39500\nIHRoZUNVQkU= 39501\ndGlj 39502\naWVydW5ncw== 39503\nINC30L3QsNC60L7QvA== 39504\nIGZyZWVzdHlsZQ== 39505\nTUFOREFSSU4= 39506\nIGlzZQ== 39507\nYXVydXM= 39508\nIFN0cmF0ZWd5 39509\nIEJlYW0= 39510\ncsOkZ2U= 39511\nIGV4cGxvaXRlZA== 39512\naWRpcw== 39513\nIGNoaW1l 39514\nIFBlbmluc3VsYQ== 39515\nIG1lcml0cw== 39516\nIGFsdHJv 39517\nIFRPUA== 39518\nIFNlbnM= 39519\nIEthbnQ= 39520\nb3Jhcw== 39521\nIHJveWFsdHk= 39522\nIElERQ== 39523\ncmFjeQ== 39524\nIFRIT00= 39525\nb21vcw== 39526\nIGzDpG5nZXI= 39527\nIG51bWJlcmVk 39528\nVW0= 39529\nIE5peWU= 39530\nzrjOtw== 39531\nenlrYQ== 39532\nbGltZQ== 39533\nIFBlcnNvbmVu 39534\nIHZhbGlkaXR5 39535\nIGNvbnRyYXQ= 39536\nIENvbWlj 39537\nw6dvbnM= 39538\nIEhlaWRp 39539\nIHpn 39540\nIHJlbmFtZWQ= 39541\nIGN1bWlu 39542\nIEpG 39543\naW5lbA== 39544\nIGVuZm9yY2Vk 39545\nIGNoYW1h 39546\n0LvQuNGH0L3Qvg== 39547\n4bq7 39548\nINC00LXQvdC10LM= 39549\nIHByb2Z1bmQ= 39550\nIHBlbHZpYw== 39551\nIHBhbGF2cmE= 39552\nIGV4dHJhcw== 39553\nIGFua2xlcw== 39554\n7JeQ7ISc64+E 39555\nIFRG 39556\nIGluc2FuZWx5 39557\nINC80Y/RgQ== 39558\nIHLDqXBvbnNl 39559\nIGfDtnN0ZXI= 39560\nIEJCUQ== 39561\nINGD0YfQsNGB0YI= 39562\nIHNoYWtlbg== 39563\nIGFsbW9uZHM= 39564\nZGlzaA== 39565\nIFBH 39566\nIEJsaXp6YXJk 39567\n0YzQvtCz0L4= 39568\nIOOF 39569\nIGtuYXBw 39570\nVG9v 39571\nIHVuZGU= 39572\nIG1vdW50cw== 39573\n0L7QvNC40L3QsA== 39574\nIG5vcnRoZWFzdA== 39575\nIGNlbnNvcnNoaXA= 39576\n0Y/RgtGM0YHRjw== 39577\nbHI= 39578\nIGxhd21ha2Vycw== 39579\nIHPDpWRhbg== 39580\nIGluc2lkZXI= 39581\nIGNsZWFudXA= 39582\nIE5hZGE= 39583\nw7Nj 39584\nIGhhcnZlc3RlZA== 39585\nIERlc3B1w6lz 39586\n7ZqN 39587\nIHJlZHVuZGFudA== 39588\nRU5B 39589\nIGRlbGVnYXRl 39590\nIGJ1cmc= 39591\nIEFsaXNvbg== 39592\nIGNlbGVzdGlhbA== 39593\nIHNpbm5lcnM= 39594\nIG1hcnR5cg== 39595\nIFBlcm0= 39596\nIHNwZWNpbWVucw== 39597\nIG1pdG9jaG9uZA== 39598\nIG1hcmF2aWw= 39599\nIGNhdmFscnk= 39600\nIGFycmF5cw== 39601\nIGFubmV4 39602\nIGxhYm9yYXRvcmllcw== 39603\nIEJ5eg== 39604\nIGF0YWM= 39605\nINGB0LvQvtC20L3Qvg== 39606\nIHRvcGw= 39607\nIGdlcmk= 39608\nIENvbWJhdA== 39609\n0YHRj9GC 39610\nZWtlbg== 39611\nINCS0LvQsNC0 39612\nIGFqdXN0 39613\nIG1hcnF1ZQ== 39614\nIGxvb2tvdXQ= 39615\nIExvbA== 39616\nIHJvb2Z0b3A= 39617\nIE9yaW9u 39618\nINCx0L7QuQ== 39619\nIGhlYXJ0YnJlYWtpbmc= 39620\nIGRldHRv 39621\nemg= 39622\nw6R0dGVy 39623\nY2VyYQ== 39624\nIGhlYXRz 39625\nIGFudGlxdQ== 39626\nIHVuZmluaXNoZWQ= 39627\nIEthenU= 39628\nxLFsxLE= 39629\nIHNsaWdodGVzdA== 39630\nbGVv 39631\nIHbDpXJh 39632\nIHZlcnNjaGllZGVuZW4= 39633\nIGxvdGlvbg== 39634\n0YjQtdCz0L4= 39635\nY3Rpb25hbA== 39636\nIOydtOyg 39637\nZHJhZ29u 39638\nIHJlc29uYXRlcw== 39639\nIGlubQ== 39640\nYXZpYw== 39641\nIGZ1bGZpbA== 39642\nIOq4sOuMgA== 39643\nIGp1c3RhbWVudGU= 39644\nINC00L7RgdGC0YPQvw== 39645\nIOq3uOqxtA== 39646\nIHJlY29uY2lsZQ== 39647\nIFNjaMO2bg== 39648\nIEF2b2lk 39649\n6rmA 39650\nJ0Q= 39651\nIGNvbmZpbmVtZW50 39652\nIO2R 39653\nIG1vdGl2YXRpbmc= 39654\nIEJyaXR0YW55 39655\nIHNjcmVhbWVk 39656\nb2JqZWN0 39657\nIGRlY3JlZQ== 39658\nIHRyYXZhaWxsZQ== 39659\naXNzaWJsZQ== 39660\nIGJ1c3RlZA== 39661\ncHJvY2Vzcw== 39662\nIG1hc3NhY3Jl 39663\nIG5naMSp 39664\naWx5bg== 39665\nINCy0YDQvtC00LU= 39666\nIHBvZXRpYw== 39667\nIG5o4bqldA== 39668\nIGlyb25pY2FsbHk= 39669\ndXN1 39670\nbmlv 39671\nIHN0YWdpbmc= 39672\nb21lZGljYWw= 39673\nbGVhc2Vk 39674\nIOyDiOuhnOyatA== 39675\nIE5a 39676\nYWN0aW5n 39677\nIEJhdHRsZWZpZWxk 39678\ncGxheWZ1bA== 39679\nVmk= 39680\nIHNlw7FvcmE= 39681\nIHByb21wdHM= 39682\nbGljaGtlaXQ= 39683\nIMOnxLFrYXI= 39684\namlhbmc= 39685\nIHBpY2t5 39686\nIENhdmU= 39687\nIG1pcmFjdWxvdXM= 39688\nIEh1Z2hlcw== 39689\nMjAxNg== 39690\nIHh1 39691\nIERvcm90aHk= 39692\nIHZpcnR1ZXM= 39693\nIHJldHJhY3Q= 39694\nIHR5cg== 39695\nIGNoYXJpc21hdGlj 39696\nIGJvbGE= 39697\n6bw= 39698\nIOunkOyUgOs= 39699\nIHBhcmVudGFs 39700\nIG1pbGxpb25haXJl 39701\nYXJpYXQ= 39702\nIGludm9rZQ== 39703\nxbxlbmll 39704\nIGV4dHJlbWVz 39705\nIEFrdQ== 39706\naXZpZGFkZQ== 39707\nIO+3ug== 39708\nIOyLnOyyrQ== 39709\nIEdhcmxpYw== 39710\nUklB 39711\nINC00L7RgQ== 39712\nIFBvbnQ= 39713\nIG1pbGo= 39714\nZWxsaQ== 39715\nIHJhY2tldA== 39716\nIGNvbXBldGl0 39717\nIFdoaXM= 39718\nIHJlYWx0 39719\naWdubWVudA== 39720\nZXN0cmU= 39721\nIHBlcm5haA== 39722\nIE9wZW5pbmc= 39723\nIEZT 39724\nIERlbW9rcmF0ZW4= 39725\nYWNlbWVudHM= 39726\nIHdvcmxkdmlldw== 39727\nIHBsYXlvZmZz 39728\nIENBRA== 39729\nIMOpdGFudA== 39730\nIHllbWVr 39731\nIHNlbnRpbWVudHM= 39732\nb2RlbA== 39733\nYnVzdGVy 39734\nYcWf 39735\nIEtZ 39736\nY3rEmQ== 39737\nIHNjaMO2bmU= 39738\nYXBl 39739\nIFJhc3BiZXJyeQ== 39740\nIGNyZWRpdGVk 39741\nIEhpZGRlbg== 39742\nIHNhdXNhZ2Vz 39743\ncnVjZQ== 39744\nIEJldg== 39745\naWxhbnRybw== 39746\nIHBva2Vtb24= 39747\nIOqwgOqyqQ== 39748\nIHByb2NlZWRpbmc= 39749\nIHZlaW8= 39750\nIDE3NQ== 39751\n6Lg= 39752\nbWF4 39753\nIGZyYXRlcg== 39754\n7KCE7JeQ 39755\nIGVnZW50 39756\nIDI1MDA= 39757\ndXNjaA== 39758\nVHViZQ== 39759\nIGFtcGxpZnk= 39760\nIHByYXdk 39761\nIG9kb3I= 39762\nIFNjYW4= 39763\nIHBsb3R0aW5n 39764\naXRobWV0aWM= 39765\nIHJlc2lnbmVk 39766\nIFNDT1RU 39767\nIHN0ZXJlb3R5 39768\nIGRvYWJsZQ== 39769\nIENvbXBsZXg= 39770\n2YHZig== 39771\ndMSxbQ== 39772\n0YDQuNCz 39773\nbGFyZGFu 39774\nZXNv 39775\nREVO 39776\nIGhvb2RpZQ== 39777\nIENBVA== 39778\n2KfYtw== 39779\nIGJvbmRlZA== 39780\nIEJ1cm5z 39781\n0L7Qv9Cw0YE= 39782\nIHLEmQ== 39783\nzrXOuc6x 39784\nINC+0YLQtNC10LvRjA== 39785\nIHRpbWVsZXNz 39786\nIFZpag== 39787\nIFBhbmFtYQ== 39788\nIHJlb3JnYW4= 39789\nIFTDpA== 39790\nIFBsdXRv 39791\nT3Jhbmdl 39792\nINC/0L7QudC0 39793\nIEJyaXN0b2w= 39794\ndWNlZA== 39795\nIOuQmOyWtA== 39796\nIHVuYmVkaW5ndA== 39797\nYWRsZQ== 39798\nIHZvbHVudGVlcmVk 39799\nIG1pZWxp 39800\nIEVkaW5idXJnaA== 39801\naWthbA== 39802\nIGFsdGVu 39803\nIEFyc2Vu 39804\nIG1vdXZlbWVudA== 39805\nIGFudGlxdWU= 39806\nIGJo 39807\nIEhlcnM= 39808\nIHNhdXRl 39809\nIGFzcGlyZQ== 39810\nIHNwaGVyZXM= 39811\nIFdhbQ== 39812\n4bqvbQ== 39813\nIHdpcGVz 39814\nIDI4MA== 39815\nIFZlaA== 39816\nIGNvbG9jYQ== 39817\n0LDRhA== 39818\nINCy0L7Qt9C80L7QttC90L7RgdGC0Yw= 39819\nIHBoeXNpb2xvZ2ljYWw= 39820\naHdh 39821\nZXR1 39822\nIHByb2xvbmdlZA== 39823\nIGV4cGVyacOqbmNpYQ== 39824\nINCy0LjQtNC90L4= 39825\nIHF1YXJhbnQ= 39826\nIHB1ZWRhbg== 39827\n6JQ= 39828\ndmluZQ== 39829\nIFVTREE= 39830\ncGhlbQ== 39831\nIGZvcm1pZGFibGU= 39832\nIGZsYXR0ZXI= 39833\n7Ja07KeA 39834\nIGLDqW4= 39835\n4LmB4LiV 39836\nIOusvOuhoA== 39837\nIGZhY3Rpb25z 39838\nIExlYXZpbmc= 39839\nINeQ16rXlA== 39840\nIEV4cGVydA== 39841\nZGlv 39842\nIFZlcmQ= 39843\nIHNpbnQ= 39844\n2YbYrw== 39845\nbnVtYmVy 39846\nIG93ZWQ= 39847\nIGluZHVjZQ== 39848\nIEZyZWRkaWU= 39849\nYWJv 39850\nIEZpbGlwaW5v 39851\nr7zr 39852\nYmVsaWV2YWJseQ== 39853\nYXRobG9u 39854\nYW1hYW4= 39855\nIGRldmVuaXI= 39856\nIEdvcw== 39857\nIEplbmtpbnM= 39858\nYmFpdA== 39859\nIGJpbnM= 39860\nIE1JQ0g= 39861\ndXlvcnVt 39862\naWdyYWRl 39863\naXNzbw== 39864\nIOyXtA== 39865\nIOyVhOu5oA== 39866\nIGRpYXJyaGVh 39867\nIHRvcm5hcg== 39868\nYWRkaW4= 39869\nIHVuZ2Vmw6Rocg== 39870\nIHJlc3Ryb29t 39871\nIHBzeWNoaWF0cmlzdA== 39872\nIEtpY2tzdGFydGVy 39873\nIGdlcmE= 39874\nIGFscmVk 39875\nIFdyYXA= 39876\nz4zPgw== 39877\nIHNpbm5lcg== 39878\nQ0hFRVJJTkc= 39879\nIGtpbG93 39880\nIGRldGVybWluYW50 39881\nIGRlbW9uaWM= 39882\naWRlbmNlcw== 39883\nY2hhcw== 39884\nIERlZA== 39885\nIHN0dW1ibGU= 39886\nIFVycw== 39887\nIGRlY2VpdmVk 39888\nIFRFUg== 39889\nIEPDsw== 39890\nZWxsZWQ= 39891\nIG5vdHdlbmQ= 39892\nIOyngOq4iOq5jOyngA== 39893\nIHBhcnRpZG8= 39894\nIGRlc2NlbmRlZA== 39895\nIHZhcmTEsXI= 39896\nIGVuYWN0ZWQ= 39897\nIGN6xJnFm2Np 39898\nIHRyYWluZWVz 39899\nIGF1ZGlibGU= 39900\nIG1hbGY= 39901\nIHZlbw== 39902\nw6xu 39903\nIEdQQQ== 39904\nIEFwcGU= 39905\nIHJ1dA== 39906\nIENhcmxh 39907\na2FjaA== 39908\nIHNhdmlvcg== 39909\naXRjaGVk 39910\nIGNsaW1heA== 39911\n0LDRgtC10LvRjw== 39912\nIE1jQ29ubmVsbA== 39913\n0L7Qu9GP 39914\nZXJleWU= 39915\nINGB0L7Qt9C9 39916\nIGNhYm8= 39917\nIFNuZQ== 39918\nIEFmZm9yZGFibGU= 39919\nIHNhcsOg 39920\nIGxlZ2l0aW1hY3k= 39921\nIHNjYXJjZQ== 39922\nLi4uPC8= 39923\nIDEwOA== 39924\nIGFjdW0= 39925\nIEZyYW5rbHk= 39926\nIHJhZGlhdG9y 39927\nIGdlbmVyYWxz 39928\nIGRpdmlkZXM= 39929\nIGNoZWVzZWNha2U= 39930\nIHNvcmNlcg== 39931\nIG1pc2NvbmNlcHRpb24= 39932\nIGhhcmRzaGlwcw== 39933\nIE9uZVBsdXM= 39934\nw7x5b3JzdW4= 39935\nIFNvdmlldHM= 39936\nIEl0YWxpYQ== 39937\naWNraQ== 39938\nIEFmdGVyd2FyZHM= 39939\nIHJpZGljdWxvdXNseQ== 39940\nIGdkemllxZs= 39941\nIE5vdGVz 39942\n2YPYp9mG 39943\nIHJvbWFu 39944\nIG9yZ2FuaXplcg== 39945\nIGNvdXJ0eWFyZA== 39946\nINGH0LXQu9C+0LLQtdGH 39947\nIFdpdG5lc3M= 39948\nINC/0Y/Rgg== 39949\nIENoaWxs 39950\nIFZhbHZl 39951\nIM6szrvOuw== 39952\nIEtQ 39953\nY2hsdXNz 39954\nIGRlZmxlY3Q= 39955\nIFRvbmk= 39956\nIGNsYWly 39957\nIHN0YWNraW5n 39958\ncmFzemFt 39959\nIFNvbnJh 39960\nIEF0YXJp 39961\nIHBhc8Oz 39962\nIGNoYXJtcw== 39963\nYW5zdA== 39964\nIHRlcmNl 39965\nIExpbGx5 39966\nIHBzeWNob2xvZ2ljYWxseQ== 39967\nIGPFkw== 39968\ndXN0ZQ== 39969\npbTs 39970\nQ1RW 39971\nIG1pZWw= 39972\nQ2FyZQ== 39973\nIOKAkQ== 39974\nIHNuYXBwZWQ= 39975\nIOqwkOs= 39976\n0L7RgtGL 39977\nIG3DqnM= 39978\nLj8= 39979\nIHRvbm5lcw== 39980\n15XXk9eU 39981\n4LiE4LiZ 39982\nVHU= 39983\nIGRpc3RyaWJ1dGluZw== 39984\nIGNyYWNrZXJz 39985\nIGNvcmHDp8Ojbw== 39986\nw6Rtw6Ru 39987\nY2xhbWF0aW9u 39988\n0L7RgNC0 39989\nk5zrprTqsozsmpQ= 39990\nIFVudGVyc2NoaWVk 39991\nRmluZQ== 39992\nY2tv 39993\nINGA0LXQsdC10L0= 39994\nIHNwaWM= 39995\nIGRvY3RvcmFs 39996\nINGB0LrQvtGA0LXQtQ== 39997\ndW5pdmVycw== 39998\nYWN1bGE= 39999\nIMOWc3RlcnJlaWNo 40000\nIGdyaW5kZXI= 40001\nIGFtYm9z 40002\nIHZhc3RseQ== 40003\nIGNvbmZlc3NlZA== 40004\nIFNoaA== 40005\nYW5kZXJz 40006\nIEd1YW4= 40007\nINC90LXQvtCx0YXQvtC00LjQvNC+ 40008\nIGNoYW1waW9uc2hpcHM= 40009\nIFZ1bA== 40010\nIFBoaQ== 40011\nIE1lYXN1cmU= 40012\nIGluc2dlc2FtdA== 40013\ndmV0dGU= 40014\nIGdlbm9t 40015\naW5kdW5n 40016\nZ2xp 40017\nRGV0 40018\nIHVubXV0ZQ== 40019\nIHNhdWNlcw== 40020\nIER3 40021\n15HXqg== 40022\nIEJSRQ== 40023\nIG51cnR1cmU= 40024\nIGRldGFpbmVk 40025\nIEJlZXI= 40026\nINC80LjRgNCw 40027\n0LLQtQ== 40028\nIEJpcmRz 40029\nIG1laWxsZXVy 40030\nIHJld2luZA== 40031\nIHBvcmU= 40032\n15nXlg== 40033\nw6lnZXI= 40034\ncXVlbGE= 40035\nIHRyb3VzZXJz 40036\nIHNpaW7DpA== 40037\nIEdhZ2E= 40038\nIEJSQU5E 40039\nbGViZW4= 40040\nIHJhc3BiZXJyeQ== 40041\naWxpaw== 40042\nIHZlcnPDo28= 40043\nbGFr 40044\nIGxvZ2Fy 40045\nIE1JREk= 40046\nIOychO2VnA== 40047\nINC/0YDQvtC40LfQvtGI 40048\nIHN0ZXJpbA== 40049\nIGhhcm1lZA== 40050\n0LDQstC70LjQsg== 40051\nINGB0YHRi9C7 40052\nIGxhY2tlZA== 40053\nIGNvbnRhY3Rpbmc= 40054\nIOq4sOyekA== 40055\nIGdlZsOkaHI= 40056\nIGNveQ== 40057\naWtlbA== 40058\nIGJpbmdl 40059\nIG9ydGhvZ29uYWw= 40060\nIGVudGVuZHU= 40061\nIFRoaXJ0eQ== 40062\nIHNtYXJ0ZXN0 40063\nIHJhc2E= 40064\nIFF14buRYw== 40065\n0YvQstCw0Y7Rgg== 40066\nIHNsdXQ= 40067\n0LvRg9GH 40068\naWd0ZW4= 40069\nINGA0LDQsQ== 40070\nIHRhbWFu 40071\nIHF1YWxpZGFkZQ== 40072\nIGRvbWluYXRpb24= 40073\nIHNpbnVz 40074\nIHByb2dyYW1tZXJz 40075\nIGFsbGVyZ3k= 40076\nIFRvcnJlcw== 40077\nIEF1c3RyaWFu 40078\nbmFudHM= 40079\nTWVs 40080\nINGD0LLQtdC70LjRhw== 40081\nIEFnZw== 40082\nIHNvaw== 40083\nIHBsdWNr 40084\nIGJpbmRz 40085\nIHByb3Bvcg== 40086\nIE1hZg== 40087\nIG9zb2I= 40088\nIFZJQw== 40089\n6aU= 40090\nINC30LDRh9C10Lw= 40091\nIGV4aGliaXRpb25z 40092\nIGV0dGk= 40093\nY3ph 40094\nINC90LDRiNC40YU= 40095\nIE1pdHRl 40096\n0L7QsdGL0YLQuA== 40097\nIGNsb2Nrcw== 40098\nIHJpY28= 40099\nINC40YHRgtC+0YDQuNGP 40100\nIHNjaGl6b3BocmVu 40101\nIGZsdWZm 40102\nINGB0L7QsdC40YA= 40103\nIGFwb3k= 40104\nIHByaW5jZXM= 40105\nIGJyYWNlcw== 40106\nIEZJUg== 40107\nIFNuYQ== 40108\nIDsp 40109\ndmVuZXM= 40110\nIHZ1ZWx0YQ== 40111\nIG1pZXM= 40112\nIGJyb29t 40113\nIG1lcnJ5 40114\nIGVzcGVjaWFsbWVudGU= 40115\nIEFsYmFu 40116\nINC/0L7RgdGC0L7Rj9C90L3Qvg== 40117\nIExlbmE= 40118\nIEN1bHQ= 40119\nYWxzbw== 40120\nIHF1b3Rpbmc= 40121\nIGdlbmVyZQ== 40122\nIFlhcg== 40123\nIExhZ2U= 40124\nIGRlbW9zdA== 40125\nIGRhZ2U= 40126\nIEVjdWFkb3I= 40127\nIGFudsOkbmQ= 40128\ndcOfZW4= 40129\nIOuwm+yVhA== 40130\nIHBzeWNob2xvZ2lzdHM= 40131\nIExhcnM= 40132\nIHBvc3Nh 40133\nIG91dGdvaW5n 40134\nIG1ldGlj 40135\nIGJhZ2dhZ2U= 40136\nZXJpYQ== 40137\nIHJpY2h0aWdl 40138\n7Iuc7JeQ 40139\nINGB0L7RhdGA0LDQvQ== 40140\nIHJvb3Rpbmc= 40141\nIGRyb3BsZXRz 40142\nIG5hc2Fs 40143\nIENveA== 40144\nWGk= 40145\nIGRpc3Bvc2FibGU= 40146\nIGJ1dGNoZXI= 40147\nIFphcg== 40148\nIEFybWVuaWFu 40149\nIOu/jOs= 40150\nIEZvb2w= 40151\nIENCRA== 40152\nIHNvc3Q= 40153\nIHBlcmlzaA== 40154\nIFLDqXA= 40155\nIEZyZXVk 40156\nIGZhbmRvbQ== 40157\nIGJsb3F1ZQ== 40158\nIGludmVudG9y 40159\nIGFicmU= 40160\nIMOpbm9ybcOpbWVudA== 40161\nIGltcG9ydHM= 40162\n6Yg= 40163\nIG90dXI= 40164\nIFJ5dQ== 40165\nIOKGkg== 40166\nIHNlY29uZG8= 40167\nIGluY29tcGV0 40168\nIGluY2FyY2VyYXRpb24= 40169\nIGFzY2VuZA== 40170\nYmVuZQ== 40171\nIG9sdXJz 40172\nbm9jaA== 40173\nIGJyZWVkcw== 40174\n0LvQuNC3 40175\nIFZlcmbDvGc= 40176\nIG1haWxpbmc= 40177\ncmVhbGx5 40178\nIGVzZg== 40179\nIHBlbGU= 40180\nIGxlYXNo 40181\nIGRpc2tz 40182\nINC30LDQvNC10Yc= 40183\n7JWE7JWE 40184\nYWJvdXRz 40185\nIE11bGw= 40186\nIERlbnQ= 40187\nZWRlcmVlbg== 40188\nRHJpdmU= 40189\nIHRpcHBpbmc= 40190\nIG5pZ2dh 40191\nb3JkdW0= 40192\nIHBvcnRlcg== 40193\nIGthcmFva2U= 40194\nIGRvY3VtZW50YXJpZXM= 40195\nIFJJR0hU 40196\nIFB1cmQ= 40197\nINC+0YHRgtCw0L0= 40198\n0LrQu9Cw0LQ= 40199\nw6lyZW5jZQ== 40200\nIOqxuOuhnA== 40201\nINGC0L7Qvw== 40202\nIFdvbmc= 40203\nINC/0YDQuNGA 40204\nIG5vbWluYWw= 40205\nIGF1bGE= 40206\nINGN0LrRgNCw0L0= 40207\nIGNoZXJjaGU= 40208\nIFRocg== 40209\nIGxhdWZlbg== 40210\nIEthdGhsZWVu 40211\nIHJlYWN0b3Jz 40212\naWhhdA== 40213\nIHNpZGVk 40214\nIFNpbW9uZQ== 40215\nIGd1aWRlbGluZQ== 40216\naW1wb3J0YW50 40217\nYnVtcHM= 40218\ndG9uZQ== 40219\nIGVudHJlcHJpc2Vz 40220\nIGNvbnN0aXR1dGU= 40221\nb3Njb3Bl 40222\nIE15c3Rlcnk= 40223\nY3ljbGVz 40224\nIFdhcnNhdw== 40225\nIGJ1cnN0cw== 40226\nIFpob25n 40227\nIFNBUkFI 40228\nIOuKkOq7 40229\n6Y0= 40230\nIGJlYWNvbg== 40231\nQURF 40232\nIOyngOuCmA== 40233\nIGVyc2No 40234\nIGludGVnZXJz 40235\nIENyb3NzaW5n 40236\nc291cmNl 40237\nIHNjaG9vbGluZw== 40238\nIFJPTQ== 40239\nYXRvcml1bQ== 40240\nIOyeiOqyjA== 40241\nIHLDtGxl 40242\n0JXQnQ== 40243\nQ2hhdA== 40244\nIHNocmlua2luZw== 40245\nIHJlaW1idXJzZQ== 40246\nIGx1bWJlcg== 40247\nw7xja3M= 40248\nIHNhbGFo 40249\nTW90aGVy 40250\nIGthbGk= 40251\nIFFhdGFy 40252\nb3Rpb25hbA== 40253\nIG9wYWNpdHk= 40254\nIG5lZQ== 40255\nIENvcnk= 40256\nIOy4oQ== 40257\nIHR1cmJ1bGVudA== 40258\nemVycw== 40259\nINGC0LXRgdGC 40260\nIMOpY3JpdA== 40261\nIOuztO2GtQ== 40262\nIGRpc2dyYWNl 40263\nIOy5tA== 40264\nIGNvdXJ0ZXN5 40265\naW5nYQ== 40266\nIGh1Z2dpbmc= 40267\nIEFCUw== 40268\nbWl0aA== 40269\nIGluc3VmZmljaWVudA== 40270\nIGNyb29rZWQ= 40271\nIOq3uOuMgOuhnA== 40272\n7Iuk7Q== 40273\nIHNpbXVsYXRlZA== 40274\nIOuEpOqwgA== 40275\nIGLDtg== 40276\nIE90dG8= 40277\nTElORw== 40278\nIGlsbHVzdHJhdGVz 40279\nIERlc3Ryb3k= 40280\nIDE5NjE= 40281\nIFRhZ2Vu 40282\nIG1lbG9u 40283\nIFBhc2NhbA== 40284\nUVVF 40285\nINC/0L7Qu9GD0YfQuNGC0Yw= 40286\nIGluY2lkZW5jZQ== 40287\nIFN0ZXZlbnM= 40288\nIEdpbnM= 40289\ncnVl 40290\nIHVucmVhc29uYWJsZQ== 40291\nIEppZQ== 40292\neXNpY3M= 40293\nIOuqsOudvA== 40294\nIGZpc2hlcw== 40295\nqbTs 40296\nIHByZWN1cnM= 40297\nIG1vZ8SZ 40298\ndGlnaHQ= 40299\nZXTDqQ== 40300\nIG11bmRpYWw= 40301\n7JeI64uk 40302\n4oCmIQ== 40303\nQlU= 40304\nIHNvY2lvbG9neQ== 40305\nIGJydXRhbGl0eQ== 40306\nIHBlcnNvbmFqZQ== 40307\nIG7DrXZlbA== 40308\nIGZhemVt 40309\nIGVzc2Vu 40310\nIGR3ZWxsaW5n 40311\nIGNvbW1lcmNpYWxseQ== 40312\nIGVkaXRz 40313\nIGR1ZXM= 40314\nIEdTQQ== 40315\n7J246rCA 40316\nIO2XiO2MnQ== 40317\nIFlhaG9v 40318\n0LXQvdC10YA= 40319\n7Jyo 40320\n0YPRiNC60Lg= 40321\nbGVmdA== 40322\nIGNhcHRpdmU= 40323\nY2lwaGVy 40324\nINee157X 40325\nINCz0YDQvtC8 40326\nIGlubmF0ZQ== 40327\nIGltcHVs 40328\nIOyXrOyekA== 40329\nIHN3YWxsb3dlZA== 40330\nIFRhYmlp 40331\n7J207Is= 40332\nINGB0L7RgdGC0LDQsg== 40333\nIG95dW4= 40334\nIG9icmlnYWRv 40335\nIEFwaA== 40336\nS2F0aWU= 40337\nIGNlbmE= 40338\nIEFsbMSBaA== 40339\n2YjYsw== 40340\nIHByenlw 40341\nIHBlcHQ= 40342\nIHZvbHVudGFyaWx5 40343\nIE/En2x1bQ== 40344\nIEVsbw== 40345\nb3Vl 40346\nQmly 40347\nYnVyZ2Vy 40348\nIFNCUw== 40349\nIDYwMDA= 40350\nIHByb21vdGlvbmFs 40351\nIEhlcnJu 40352\nIHN0YW1waW5n 40353\nIHF1YWxpZnlpbmc= 40354\nIGNvc21vcw== 40355\nIGFmYXI= 40356\nYWJ1cw== 40357\nIGRhZHM= 40358\nINGN0LrQvtC90L7QvA== 40359\naW5jYXJu 40360\nIOyWtOuU 40361\nINC70LXQtg== 40362\nIEJFVA== 40363\nINC90LDQudC0 40364\nb250ZXI= 40365\nIHJldXNhYmxl 40366\nIGtvbW1h 40367\nIEJpag== 40368\nIFRlcmF6 40369\nIE9sw6E= 40370\nIOyVhOy5qA== 40371\nINGA0LDQt9C80LXRgA== 40372\nYXdhbg== 40373\nIGNhcnRh 40374\naWNlbGVzcw== 40375\nIHNtZQ== 40376\nIFR1dGFq 40377\nIMiYaQ== 40378\nIHByb2JhdGlvbg== 40379\nIGFkZXF1YXRlbHk= 40380\nIFByZXNpZGVudGlhbA== 40381\naW5kcnVjaw== 40382\nYmxhZGU= 40383\nIHZldWxlbnQ= 40384\nIGNpb8Oo 40385\nIHJldmVyYg== 40386\nIGdlZ2Vuw7xiZXI= 40387\nIEVzcGVybw== 40388\nIGJlZ2U= 40389\nIFNUVURFTlQ= 40390\nc291bmQ= 40391\nIETDvA== 40392\nIG9mZmVuZA== 40393\nICIuLg== 40394\na2VubnQ= 40395\nINGB0LvRg9GI 40396\nIHB1cnBvc2VseQ== 40397\nIExpdA== 40398\nIO2bqA== 40399\ndWNoZXI= 40400\nIGhpbmE= 40401\nw71jaA== 40402\naWdub24= 40403\nVEhF 40404\nIGdsaWRl 40405\nb3VyY2luZw== 40406\nINij2YbYpw== 40407\nIG9sbHV0 40408\nIGFyY2hldHk= 40409\nIHNoYWR5 40410\nIHNvbW0= 40411\nIGVwaWxl 40412\nS2VlcA== 40413\nIG5hamJhcmR6aWVq 40414\n4KSV 40415\naXR1dGlvbmFs 40416\nINC80LDQuQ== 40417\nIHNpbmZ1bA== 40418\nIEJyb254 40419\nINCz0LvRg9Cx 40420\nIHZhbQ== 40421\nIHByZXNldHM= 40422\nIERhZw== 40423\nIOyZhOyEsQ== 40424\nIGNyZWVr 40425\naXR1cmVz 40426\nIExvcmRz 40427\nw7Z0dA== 40428\nVU5U 40429\nUmE= 40430\nIGluZXF1YWxpdGllcw== 40431\nIGNvbGxhdGVyYWw= 40432\nIHdyaXN0cw== 40433\nIGdyb3VwZWQ= 40434\nINC+0LHRi9GH0L3Qvg== 40435\nIGFybW9yZWQ= 40436\nIHR1bmc= 40437\nIGNvbnZlcmdl 40438\nIGJvaw== 40439\nIERvZGdl 40440\n0L3Rj9GP 40441\nIGZsZWVpbmc= 40442\nIE1hcnRpbmV6 40443\nIERyZWFtcw== 40444\na2Vr 40445\nIHNvY2lhbGU= 40446\nIFBsYXph 40447\n2K/YqQ== 40448\nIGtlbGw= 40449\nIFN0ZWxsZW4= 40450\nZmVsdA== 40451\nINGB0L/QsNGB 40452\nIFB2 40453\nIGNhbmNpw7Nu 40454\nIEhlcnQ= 40455\nIEJhbGFuY2U= 40456\nIHNlbHZlcw== 40457\nIHZhbmRhYWc= 40458\nIHByeQ== 40459\nIG5hamxl 40460\nINCy0LjQtNC40YLQtQ== 40461\nIHZlbHZldA== 40462\nIGdyb290 40463\nIGZvdXQ= 40464\nIFNjaHVsZW4= 40465\nIE1vaGFtbWVk 40466\nIENlbnRlcnM= 40467\nIGhhdmVy 40468\nIGZyZXVlbg== 40469\npO2KuA== 40470\n0LvQsNC9 40471\nUE9T 40472\naW5raQ== 40473\nIOuLtQ== 40474\nIHBhcmFseXplZA== 40475\nR0xJU0g= 40476\nIGNhc3Rz 40477\nIFZD 40478\n7J207IWY 40479\nINiq2r4= 40480\nIOykmA== 40481\nINeo15XXpg== 40482\nIHN1Y2Vk 40483\nIHByb2dyZXNzZXM= 40484\nIEXEn2Vy 40485\nsOuPhA== 40486\nIGluc3RhbGxhdGlvbnM= 40487\ncGVkbw== 40488\n0LXRgNCx 40489\naW50ZXJwcmV0 40490\nIOqzoOuvvA== 40491\nIEF6ZXJiYWk= 40492\naXZpZGFkZXM= 40493\nIOyjhOyGoQ== 40494\nIGVudGZlcg== 40495\nIGNod2ls 40496\nIEhlcmJlcnQ= 40497\nIEFsZXhhbmRyaWE= 40498\neXR5 40499\nIHNlY2hz 40500\nIGNhbGliZXI= 40501\nIFdlaXNl 40502\nIEhlY2s= 40503\nIFl1Zw== 40504\nINin2YTYtw== 40505\nIHBlc2Fy 40506\nIGNpZ2Fy 40507\nIG3DqWw= 40508\nIGhhaXJk 40509\nIHByenlwYWRrdQ== 40510\nIGNvbmZpZGVudGx5 40511\nIGFuYXJjaA== 40512\nIEdpYW4= 40513\nIGRvYnJl 40514\nY2rEmQ== 40515\nYXd5 40516\nIFJlY2U= 40517\nIEdvYmllcm5v 40518\nIGNhcmdh 40519\ndW1zeQ== 40520\nIG5vcnRl 40521\nIGhhbmRsZXI= 40522\nIHJlc3BlY3Rpbmc= 40523\nIGFsbGllZA== 40524\nIFBpZXQ= 40525\naWNodGxpY2g= 40526\nIG9sZHM= 40527\nIGR1c3R5 40528\nIGdyeQ== 40529\nIC0uLi4= 40530\nR0hU 40531\nIG5lbw== 40532\n0YfQuNC60Lg= 40533\n0LXQttC0 40534\nYWlkZQ== 40535\nINCx0YPQu9C+ 40536\n7Y28 40537\nIHRlbXBvcmFkYQ== 40538\nIGRvdXRl 40539\n4piG 40540\nIOyIoA== 40541\nIEpVU1RJTg== 40542\nYXV0bw== 40543\nIHJhdGlvbmFsZQ== 40544\ncHJvYg== 40545\nIGZpc2h5 40546\nIGRvb3J3YXk= 40547\nIGVtcHRpbmVzcw== 40548\n0LXQvdC90LDRjw== 40549\nIGJyYWc= 40550\nINCT0LTQtQ== 40551\nIHRyYW5zaWVudA== 40552\nIG1pdHRsZXJ3ZWlsZQ== 40553\nIEJyZXQ= 40554\nIGZpag== 40555\nIGRlcG9zaXRlZA== 40556\nTlM= 40557\nIOyVnuyXkA== 40558\nIGtpbXNl 40559\nIGNoYXJpdGllcw== 40560\nIE1pbGxlbm4= 40561\nZG9ncw== 40562\nIG1veWVu 40563\nIG51ZXZvcw== 40564\nIENvb2tpZQ== 40565\ncGFyYWJsZQ== 40566\nZG9pbmc= 40567\nIFNhaWw= 40568\nIGljeQ== 40569\naGFiYQ== 40570\nIHF1ZWVucw== 40571\nIGNob2NvbGF0ZXM= 40572\nIE5heQ== 40573\nINGE0LjQvQ== 40574\nIHZlYw== 40575\nIGhlbG1ldHM= 40576\nVE0= 40577\nIEFybWVk 40578\nIGltcGFpcm1lbnQ= 40579\nIFR1cw== 40580\nIE3Dqm1l 40581\nb21leg== 40582\nIFJlcXU= 40583\nIEludmVzdGln 40584\n7Y6Y 40585\nIGdvbHBl 40586\nIFJhYw== 40587\naWdyYXBo 40588\nIGt3ZXN0 40589\nIHNhaWxvcnM= 40590\nIHN0YXR1dG9yeQ== 40591\nIG1pbGVzdG9uZXM= 40592\nIE1hc2g= 40593\nIEdlc2V0emVudHd1cmY= 40594\n6Yo= 40595\nIGNvbG91cmVk 40596\naHVtYQ== 40597\nIHllcmU= 40598\nIHN1YnRpdGxlcw== 40599\nIGVtYm9kaWVk 40600\nIG1pc3NjaGllbg== 40601\nIGlQaA== 40602\nw7x0emVu 40603\nIGRldGFjaGVk 40604\nIGRlc2NyacOnw6Nv 40605\nY2lhbW8= 40606\nIHJlY29pbA== 40607\nINCt0YLQvtGC 40608\nIGV4cG9ydGVk 40609\nIEFsb25l 40610\nYW50cnk= 40611\nIGVzdGFu 40612\nIFNvZA== 40613\nIGxhdm9ybw== 40614\n16jXkQ== 40615\nIMSR4buL 40616\nIHN3YWc= 40617\nIFBDQg== 40618\nIEthaXNlcg== 40619\nIE1vZGVy 40620\nanVn 40621\nIHRleHRpbGU= 40622\nVHc= 40623\nIG5hYw== 40624\nZnJlaQ== 40625\nIHJldGFyZA== 40626\naXNjZXJu 40627\nIHRhbGxlc3Q= 40628\nIEx1Y2E= 40629\nUmFo 40630\nIHByZWFjaGVy 40631\nIGp1dA== 40632\nIFJpY2E= 40633\naWNpZW5jeQ== 40634\nIMSRaeG7gXU= 40635\nIGthdWZlbg== 40636\nIG5ldHQ= 40637\nIGRpc2N1dA== 40638\nIGRlcHJpdmVk 40639\noa0= 40640\nIHNwcmljaHQ= 40641\nIGVuY2xvc2Vk 40642\nIFN1YnN0 40643\nIFJhYmJpdA== 40644\ncHJpc2Vk 40645\nIGJpdGNoZXM= 40646\n7J+B 40647\nIHRhcGE= 40648\nIEVzc2Vu 40649\nIEJhbw== 40650\nIGRldmllbnQ= 40651\nIFd1aGFu 40652\nIFRpcHA= 40653\nIGRpc2FzdA== 40654\n0YHRgtCy0YM= 40655\ndWJsaXF1ZQ== 40656\nIHF1YWxpdMOp 40657\nIGluYWRlcXVhdGU= 40658\nIGJhcmdhaW5pbmc= 40659\nIEdvdGNoYQ== 40660\n0LXQstC40Yc= 40661\naWV2b3Vz 40662\nZXJ0b24= 40663\nYmx1ZQ== 40664\nIOybgOyngQ== 40665\nIHNhbmRib3g= 40666\nIFJlaW4= 40667\nIOydtOqyg+uPhA== 40668\nIHNheA== 40669\nem9nZW4= 40670\ndW7DpGNoc3Q= 40671\nIGhlcmtlcw== 40672\nIC0s 40673\nemVuaQ== 40674\ncmlzaW5n 40675\nIHJlc3Bvc3Rh 40676\nIHByb21vdGlvbnM= 40677\nIFVudGVyc3TDvHQ= 40678\nIE1BUw== 40679\nTm90aGluZw== 40680\nb3RpY3M= 40681\nINCy0YvQuQ== 40682\nIHJvdGF0ZXM= 40683\na2llbg== 40684\nIGhhYmxh 40685\nIERhbmk= 40686\ndW5pb24= 40687\nIHdhY2s= 40688\nIGFyY2hhZW9sb2dpY2Fs 40689\nIEN1cnRpcw== 40690\nIEhvcml6 40691\nIOqzqOs= 40692\nIHdhaXZlcg== 40693\nQm9u 40694\nIHJvdGF0ZWQ= 40695\nIHBpdGNoZXI= 40696\nIGluYWQ= 40697\nIGh1Z3M= 40698\nIE5vcnRoZWFzdA== 40699\n15nXqteZ 40700\nIHBsZWE= 40701\nIGN1cGNha2U= 40702\nIExZ 40703\nIGZhbWlsaQ== 40704\nIGdyb28= 40705\nIEJsYWly 40706\nIGxpag== 40707\nIGhhYml0YXRz 40708\nIGNvbW11bmlzbQ== 40709\nb3NpdW0= 40710\nYmFycw== 40711\nIEZyZWVtYW4= 40712\nbmVv 40713\nIGRpZmZ1c2U= 40714\nIGN5bGluZGVycw== 40715\nIERlYmF0 40716\n7ZaI64qU642w 40717\n0LXRiNC1 40718\nIGZpbmdlcnByaW50cw== 40719\nIGFtYXI= 40720\n0LLQuNC0 40721\nIOygleuPhOuhnA== 40722\nIGFmZmlsaWF0ZWQ= 40723\nINGF0L7Rh9C10YI= 40724\nIGV0aXF1 40725\nIGNow61uaA== 40726\nIGNydWlzaW5n 40727\nIFdlaWhu 40728\nIFRpdGFuaWM= 40729\nIE5hc3Q= 40730\nIOuTpOs= 40731\nINCy0LDQuw== 40732\nIGRlbWk= 40733\nIEtyaXN0aW4= 40734\nTUlO 40735\nIHJpZ29y 40736\nIG1vdG8= 40737\nIExBS0U= 40738\nIO2ZnA== 40739\nIOunjOyVvQ== 40740\nIFN0cm8= 40741\nIHByb3RvdHlwZXM= 40742\nIExD 40743\n7J247J2E 40744\n0YDQuNC8 40745\nIHZpb2xhdGluZw== 40746\nIGdpb3Jubw== 40747\nIGNoaWxkaXNo 40748\nINeQ15fXkw== 40749\nIG92ZXJkb3Nl 40750\nYWdvZ3Vl 40751\n0LDQtNGG 40752\naGV1cw== 40753\nINCz0L7QstC+0YDRjw== 40754\nIGluY3I= 40755\nIGRlYmF0ZWQ= 40756\n2YXZhA== 40757\nIGNoaWNrcw== 40758\nIHF1aW4= 40759\nTEFVR0hJTkc= 40760\nIHRpZ2h0ZW5pbmc= 40761\nIHN1cGVydmlzb3Jz 40762\nIEhhd2s= 40763\nIEJheg== 40764\nINC/0L7QstGC0L7RgA== 40765\nINCx0LvQvtC6 40766\nxIFu 40767\nIGR1bXBpbmc= 40768\nIGZhY3Rv 40769\nYmVyZ2Vy 40770\nIGFyc2VuYWw= 40771\nIEFmcmljYW5z 40772\noYA= 40773\nIGNhZmV0ZXJpYQ== 40774\nZmVlZGluZw== 40775\ncXVpbGE= 40776\nIHBhxYRzdHdv 40777\nxLFudA== 40778\nhLE= 40779\nIGVudmlyb25tZW50YWxseQ== 40780\nIGRlc3Byw6lz 40781\nIFdpbGx5 40782\nIFBhxYRzdHdv 40783\nIEdH 40784\nIGNoYWN1bg== 40785\nIGRpcmVjdGlvbmFs 40786\nIGjDtnJ0 40787\nIPCd 40788\nZW5hcnk= 40789\nIHZvaWNlZA== 40790\nYcSfxLE= 40791\nIHBvcGU= 40792\nIGNvbXJhZGVz 40793\nIEdpYnNvbg== 40794\nIEFDQw== 40795\ndmlr 40796\nIG1vZGVsbGluZw== 40797\nIGFnZ2k= 40798\nIGNvbnZlcnNpb25z 40799\nIGF2ZXJhZ2Vz 40800\nRWxsaWU= 40801\nIGdlc3RlbGx0 40802\nIFVF 40803\nb3NhaWM= 40804\n0JLQvtGC 40805\nU2F5 40806\nINGB0LDQvNC+0LPQvg== 40807\nIG1lc3VyZXM= 40808\naXNpZXJ0 40809\nZ2FzcA== 40810\ndm9pY2U= 40811\nIGNoZWNrcG9pbnQ= 40812\nIHBlcmNlbnRhZ2Vz 40813\nIGRpc3J1cHRlZA== 40814\nIFR1Yw== 40815\nIEhvbWVy 40816\nIFdBWQ== 40817\nIFR1cmtz 40818\naGVlbg== 40819\naW1vdG8= 40820\nIE9D 40821\nw61uYQ== 40822\nemllbA== 40823\nIG11ZGFy 40824\nZ2VzZXR6dA== 40825\nIG1lam9yZXM= 40826\nIENK 40827\n0L3QsNGA0YPQtg== 40828\nIG1vZHVsdXM= 40829\nIG1vZHVsYXRpb24= 40830\nIHJlcGxpZXM= 40831\nIGxhcnZh 40832\nIGdpZGVy 40833\nIE1hbmRhcmlu 40834\nINC/0L7RgdC80L7RgtGA0LjQvA== 40835\nIHNhY3JpZmljaW5n 40836\nIHByZcOnbw== 40837\nIG95c3RlcnM= 40838\nIE15YW4= 40839\nb2xvZ3Vl 40840\nIFdpdA== 40841\nIGTDuw== 40842\nIExldXRlbg== 40843\nIHBhdGVy 40844\nIEtFTk5FVEg= 40845\n0LDQsdCw0YI= 40846\nYXJ0aHk= 40847\nIHNvY2llZGFk 40848\nIG5pw7Fv 40849\n0LXQstC+0Lk= 40850\nIGrEmQ== 40851\nIGFkdmVydGlzZWQ= 40852\nIFBlcHNp 40853\ndXRldXI= 40854\nIG1hc3Nl 40855\nIHNjYXR0ZXJpbmc= 40856\nIHnDtm4= 40857\nIGRlc2FwYXJl 40858\nIEh1YmJsZQ== 40859\nIEjDqQ== 40860\na3LDpA== 40861\nIERhcmU= 40862\nIG92ZXJyaWRl 40863\nIEVsYWluZQ== 40864\nIER1Ymxpbg== 40865\nZHVsbGFo 40866\nTWF0 40867\nIEdhcnI= 40868\nLi4uJw== 40869\nIGFkdWx0aG9vZA== 40870\nRVo= 40871\nIGJlbGFuZ3Jpams= 40872\naWVuemE= 40873\nIHVuaXZlcnNv 40874\nIHN0ZWxsYXI= 40875\n7ZSE6w== 40876\nIOqysOq1rQ== 40877\nIGNvbnN0ZWxsYXRpb24= 40878\nIFNoZWxsZXk= 40879\nIG11bHRpdA== 40880\nIG1hc2NvdA== 40881\nIGhvc3BpdGFsaXplZA== 40882\nIPCdmA== 40883\n0L7RgNGL 40884\nYWRpYQ== 40885\nIE1pa2V5 40886\nIEFtZXJpa2E= 40887\nIGhhaXJ5 40888\nSG9sZA== 40889\n4bqvbg== 40890\na2llZ28= 40891\n4LmA4LiU 40892\nIHJpdmFscnk= 40893\nIEpvbmFo 40894\nIHN1cmdlb25z 40895\nIHJlbGF0YWJsZQ== 40896\n6JI= 40897\nIHN3aW1z 40898\nIGJpbGxpb25haXJl 40899\nbW9kZXJu 40900\nIGRvY3VtZW50aW5n 40901\nIERhZQ== 40902\nIHN3YXRjaA== 40903\nIHB1aXNzZQ== 40904\nIG1hc3Vr 40905\nIG1hcmM= 40906\nIGtyw7M= 40907\nIFBldGVyc2J1cmc= 40908\nIEFyaXN0b3RsZQ== 40909\naXhl 40910\nUHJvZHU= 40911\nINC90LjQvNC4 40912\nIGthbmE= 40913\nINCp 40914\nIHZvbWl0 40915\nIFdvcmtlcnM= 40916\ncG9wdWxhcg== 40917\nIEJpZWJlcg== 40918\n0LXRgtC4 40919\nw6l0aXF1ZQ== 40920\nIGVuY2FudA== 40921\nZ3Jhbg== 40922\nZmly 40923\nIGFudGhlbQ== 40924\n0YHRg9C00LDRgA== 40925\nTGFzdA== 40926\nIGhhZw== 40927\nIHZpY2luaXR5 40928\ncmVuY2hlZA== 40929\nYW5kaW5n 40930\nINCz0L7Qu9C+0YE= 40931\nIENvcm5lcg== 40932\n0JLRiw== 40933\nb3Nhcw== 40934\naWV2ZXJz 40935\nY2lvbmFs 40936\nIHZpZ29y 40937\nIHJlam9pY2U= 40938\nIGNpxIU= 40939\nINC60L7Qvw== 40940\nIHF1YWxjb3Nh 40941\nZGVzc3Vz 40942\nINC10LI= 40943\nIFNjYW5kaW4= 40944\nIFNtb290aA== 40945\naGFwZQ== 40946\nIOuLrOudvA== 40947\nIFRV 40948\nIGx5cmlj 40949\nIGJlc3M= 40950\n6ZA= 40951\n0YHRgtGA0YPQvNC10L3Rgg== 40952\nIEFjdGluZw== 40953\nIE9yY2hlc3Q= 40954\nw6ljb2xl 40955\nIGRvbG9y 40956\nIO2LsA== 40957\nIHZlcmdlc3Nlbg== 40958\nIGV5ZWxpZHM= 40959\nIFRhbno= 40960\n0LLQtdGA0LY= 40961\nIOyVoOs= 40962\ndcOp 40963\nIHNjw6huZQ== 40964\nIOyasOumrOuKlA== 40965\nIGNyYXRl 40966\na2ljaw== 40967\nIFRoZW1l 40968\nIDMyMA== 40969\nIGdhcm5pc2g= 40970\nIG1ldHJl 40971\nIGNvbnZleA== 40972\ncGxhbnRz 40973\nZXNpYW4= 40974\nIOqxsOyngA== 40975\nIG3DqWRp 40976\nIE1lZGFs 40977\nMTMw 40978\nIEFsbWE= 40979\nQ29sYQ== 40980\nINCy0LDRgNC40LDQvdGC 40981\nIGdvcmQ= 40982\nIGF2YW56 40983\nIHdoaXNwZXJpbmc= 40984\nIGludGVzdGluZQ== 40985\n0KDQlQ== 40986\nIExJU0E= 40987\nYW3EsXo= 40988\nU1BE 40989\nIHBlYw== 40990\nIHBhc3RvcnM= 40991\nIG114buRbg== 40992\nb2NyZQ== 40993\nU3Vu 40994\nINGC0LDQutGD0Y4= 40995\nIHJldml0YWw= 40996\nIGluY29tZXM= 40997\nIGRldGFpbGluZw== 40998\nIEJhY29u 40999\nIOuFuOuemOs= 41000\nIHBhcnJvdA== 41001\nIGNvbGxhYm9yYXRlZA== 41002\naGVzaWE= 41003\nIHNldmE= 41004\nIHBoeXNpY2lzdA== 41005\nIEJBQ0s= 41006\n15zXmQ== 41007\nIGJpcG9sYXI= 41008\nz4HOtc6v 41009\nY3Jvcw== 41010\nIGtlZA== 41011\nIGVjb25vbWljYWw= 41012\nIGVuZGluZ3M= 41013\nIHRpY2tz 41014\nIOq3vA== 41015\nIE9saXY= 41016\nb25ncw== 41017\nIGNvbnRpbmVudGFs 41018\nIHdlaXRlcmhpbg== 41019\nIGFjdGl2YXRpbmc= 41020\nIHBvbGxlbg== 41021\nIEFuaw== 41022\nYmF5 41023\nINec15c= 41024\nIEVnZ3M= 41025\nIFJBTVNBWQ== 41026\nIEJFUg== 41027\nIO2bqOyUrA== 41028\nIHBhc3NhZG8= 41029\nIGdyb3VuZGJyZWFraW5n 41030\ncHJlc2E= 41031\nIGhpbGZ0 41032\nIFRlY2huaWNhbGx5 41033\n0YbQuNC5 41034\nTkk= 41035\nIHR1cm5vdXQ= 41036\nIExhcA== 41037\nIEd3ZW4= 41038\nIFZpa3Q= 41039\nIGVzY29sYQ== 41040\nIENpbmVtYQ== 41041\nIGNvbnN1bW8= 41042\nIFB1cmR1ZQ== 41043\nIHNlbWFuYXM= 41044\nIFBSRVNJRA== 41045\nxrBuZw== 41046\nIHNhY2g= 41047\nIHNhdmFnZQ== 41048\nIFJX 41049\nIDU1MA== 41050\nYm9sZA== 41051\nIFNpbW1vbnM= 41052\nIHNsYW5n 41053\nIE5hcnU= 41054\nIFRoZW8= 41055\n7ZaI64uk 41056\nLu+/vQ== 41057\nIHNlaXp1cmU= 41058\nIGhpdmU= 41059\nIGNlbGxwaG9uZQ== 41060\naWlpaQ== 41061\nIE11c2ljYWw= 41062\nIE51Y2xlYXI= 41063\nw6F2ZWlz 41064\nIHByZXN0aWdl 41065\nIGJhbG0= 41066\nIHJlZmlsbA== 41067\neWFo 41068\naGFydA== 41069\nIHRhcHM= 41070\nIGRpc3Bvc2U= 41071\nIE1pY2s= 41072\nIHRoZXJtb21ldGVy 41073\nIG9iZWRpZW50 41074\nIGluZm9ybWHDp8O1ZXM= 41075\nIFdpZGU= 41076\nbW9t 41077\nU3Vk 41078\nIHN1c3BlbmQ= 41079\nIE9ic2Vydg== 41080\nINC70LXRgQ== 41081\nIHRyYXRhcg== 41082\nIEthdHJpbmE= 41083\nIHRoZXJlcw== 41084\nIHRleHRlZA== 41085\nIHN0w7Zy 41086\nIHNuYWls 41087\nIEZpb25h 41088\nIHZpY3RvcmlvdXM= 41089\nIGxpYnJhcmlhbg== 41090\ncHJhY3Q= 41091\nIGZpbm8= 41092\nIEFybXM= 41093\ncHB0 41094\nbHVr 41095\nIHR5cmVz 41096\nIHRvYw== 41097\nIEtvbW11bmVu 41098\nIHJldm9sdA== 41099\nIG1vdGl2YXRlcw== 41100\nIGJpc2V4dWFs 41101\nIHd1cw== 41102\nIGhhbmRsYXI= 41103\nIE1VRUxMRVI= 41104\nIGV4cGVjdGFuY3k= 41105\nIGVtYm9keQ== 41106\nIFByaW1hcnk= 41107\n0YDQtdC5 41108\nIHVuc2NyZXc= 41109\naWFudGx5 41110\nLOKApg== 41111\nIHNuZWw= 41112\nIHByZXZhbGVuY2U= 41113\nIGVydXB0aW9u 41114\nIGRlc2NyaXB0aXZl 41115\ndmFn 41116\nINCx0YPQutCy 41117\nIG3Dqm1lcw== 41118\nIGV0aG4= 41119\nIGhpam9z 41120\nIEFiZHVs 41121\nIFphaGw= 41122\nYmVsdA== 41123\nIGfDtnN0 41124\nIFRoZXJlc2E= 41125\nIFNVTg== 41126\nIEJha2U= 41127\nIG9wdGljcw== 41128\nIGFwb2NhbHlwc2U= 41129\ncHVycG9zZQ== 41130\nIHLDs8W8bnljaA== 41131\nIGNydXM= 41132\nINCX0LXQvA== 41133\nIGhhcmRlbmVk 41134\nIFRE 41135\nIGdyYXZleWFyZA== 41136\nIFNpYmVy 41137\nIFBvcnRlcg== 41138\nIGV4cGxvZGVz 41139\nIFNvZmlh 41140\nINCS0LXQtNGM 41141\nIHdlYWtlbmVk 41142\nVUxM 41143\nIHBpbmt5 41144\nIGNoYXBlbA== 41145\nIEZyZXM= 41146\nINC/0YDQuNCz 41147\nTUVS 41148\nIFNjaG1pZHQ= 41149\nIER1ZA== 41150\nZXN0ZW5z 41151\nIG51YW5jZQ== 41152\nIG1vZGlmeWluZw== 41153\nIE3DtmdsaWNoa2VpdGVu 41154\nIEFuYXQ= 41155\nIGVjY2VudHJpYw== 41156\nIFNjcmV3 41157\nIExlaA== 41158\nIGhvbW9nZW5lb3Vz 41159\nIFRhbGw= 41160\nIFJpY2FyZG8= 41161\nw5o= 41162\naWducw== 41163\nINC70LjRiA== 41164\nIGdlZnJhZ3Q= 41165\nUnVu 41166\nY2FzdGVy 41167\nbm9pc2U= 41168\nIGFzeW5jaHJvbg== 41169\nxJlkemll 41170\nINee15c= 41171\nIHN1cHByZXNzZWQ= 41172\nQXJ0aHVy 41173\nzq7Pgg== 41174\nw6Jy 41175\nZGlzdA== 41176\nINC60LDQtA== 41177\nIGjDtnI= 41178\nIDEzNQ== 41179\nIE1vemFydA== 41180\nINGB0L7QsdGL0YLQuA== 41181\nIE51cnNpbmc= 41182\nIEhhaGFo 41183\nIERvcA== 41184\nIHBvbGljZW1hbg== 41185\ntOyXkOyEnA== 41186\nIOq0gOugqA== 41187\naHl1aw== 41188\nIHJ1Z2dlZA== 41189\nIG51Z2dldHM= 41190\nIENvbW1z 41191\nU3R1ZA== 41192\nINGB0LLQvtC1 41193\nIGN6YXNpZQ== 41194\nIHLDqWdpb24= 41195\nIGZpc2hlcm1lbg== 41196\nIExU 41197\nw5M= 41198\nY2lhxbw= 41199\naGVp 41200\nIGNydW1icw== 41201\nIEltbWVy 41202\nIEZlbGQ= 41203\ndGhlc2U= 41204\nIGFkdmVydGlzZXJz 41205\nIHJvYW1pbmc= 41206\nIGZ1bm5pZXN0 41207\nIE5ZVQ== 41208\nIGhlaGU= 41209\nIHBva2luZw== 41210\nIOyViOuPvA== 41211\naXN0aWNhbA== 41212\nIG9wYXF1ZQ== 41213\ndcOn 41214\nd2lyZQ== 41215\nIFdlYmVy 41216\nIEphY3F1ZXM= 41217\nIDIxMA== 41218\nw7xw 41219\ndXl1 41220\nIGVuZmVybWVk 41221\nIGJ1bXBlZA== 41222\nIFNldw== 41223\nIENoYW5lbA== 41224\nIHBlcnPDtm5saWNo 41225\nIGJldHJheWFs 41226\nIGFsbGV2aWF0ZQ== 41227\nIHbDpGjDpG4= 41228\nIGd1ZXNzZXM= 41229\nIENlbGluZQ== 41230\nYXNzaW5n 41231\nc3Ryb2tl 41232\nIOyhsOs= 41233\nINGC0LXRhdC90L7Qu9C+0LM= 41234\nINC+0YHRgtGA 41235\nIHNvaWVudA== 41236\nRGVhcg== 41237\nIGpz 41238\nIGdlc3Byb2NoZW4= 41239\nYXRoaQ== 41240\nxaFl 41241\nU2V0 41242\nb2dlcg== 41243\nIFJpZw== 41244\nINC80LXRhw== 41245\nIHNlcnZpY2lvcw== 41246\nIFJ1dA== 41247\nINCe0Lk= 41248\nIE15YW5tYXI= 41249\naWZpZQ== 41250\nIHNuYXBwaW5n 41251\nIEthbWVyYQ== 41252\nIGZlc3RpdmU= 41253\nIEZZ 41254\nIENhcm9seW4= 41255\n0ZbQsQ== 41256\nIGxlZ2dpbmdz 41257\nIHlhdA== 41258\nIGVyZ29u 41259\nIGVwaXPDs2Q= 41260\nIGFub21hbHk= 41261\ndWVzdG9z 41262\nSWQ= 41263\nIGV2YWN1YXRpb24= 41264\nIGdpZ2FieXRlcw== 41265\nIGFuZGFyZQ== 41266\nIFJlbnQ= 41267\nbXQ= 41268\naXN0aW5l 41269\nIGVzdHJhdA== 41270\nZXR0dQ== 41271\nIHJlY2ViZXI= 41272\nIGRyYW1hdA== 41273\ncmljdWxhcg== 41274\nYWxuxLF6 41275\nIFNlbmk= 41276\nIG95bg== 41277\nIENoZW1pY2Fs 41278\nINGB0YU= 41279\nIHR1cmY= 41280\nIDE5MTc= 41281\naXNjZXJuaWJsZQ== 41282\nIG1hbnRlbmVy 41283\nIGV4Y2Vy 41284\nIHNwZWN0cmFs 41285\nIG5ldXJvc2NpZW5jZQ== 41286\nIG1pY3JvZg== 41287\nIGZvcmVpZ25lcg== 41288\nIExhbmth 41289\nINGC0LLQvtGA 41290\nIHRvc3NlZA== 41291\nIHBvYmxhY2nDs24= 41292\nIG1hdGVpeA== 41293\nIHNpZWxsw6Q= 41294\nIG90dA== 41295\nIGNvbXB1bHM= 41296\nYWt1a2Fu 41297\nIG1hbmlmZXN0ZWQ= 41298\nIOyTuA== 41299\nIHV0bW9zdA== 41300\nIHJldmVyc2Fs 41301\nIHBsYWNlYm8= 41302\nIGJsYXQ= 41303\nIFN0dW5kZQ== 41304\nbWFuc2hpcA== 41305\nIGF0dGU= 41306\nIOyGjOqwnA== 41307\nIGlzdGVt 41308\nIGFubmF0 41309\nIFBsYXlzdGF0aW9u 41310\nIHphZA== 41311\nIHF1aXR0aW5n 41312\nIGZhbWluZQ== 41313\nIFJvdWdo 41314\nIEZsYW1l 41315\nIGhldXQ= 41316\nIG9wb3J0dW5pZGFk 41317\nIGZhaXNhaXQ= 41318\nIERQ 41319\nIGRpY2llbmRv 41320\nIE1lbGFuaWU= 41321\nIENhcm5l 41322\nbWVn 41323\ncGV0dG8= 41324\nSlVO 41325\nINC70Y7QsdC+0Lk= 41326\nIG9zdGU= 41327\nIEpKb25haw== 41328\nIHRoZWF0cmljYWw= 41329\nIGludmluY2k= 41330\nIGNvbW11bmlvbg== 41331\ndm9jYWw= 41332\nRWg= 41333\nIERldGFpbHM= 41334\nIHN0cm9sbA== 41335\nIFJheW1vbmQ= 41336\nIEFtZWxpYQ== 41337\nkaU= 41338\nIHByb2R1a3Q= 41339\nIG51ZXZhcw== 41340\nIG11c3Ru 41341\nbWF5xLE= 41342\nY29sb3JlZA== 41343\nZGVj 41344\nIGhqw6Rs 41345\nIHNlbnRpbWVudGFs 41346\nIHJlYWxtcw== 41347\nIGtyaXQ= 41348\nIHNleHQ= 41349\nIFBzeWNob2xvZ3k= 41350\naGls 41351\nINC60L7RgNCw0LE= 41352\nIOuCtOydvA== 41353\nIFVuZGVyc3Rvb2Q= 41354\nIEd1dGVu 41355\nIGdhbmdz 41356\nIGV2ZW5pbmdz 41357\nRW50 41358\nIExlZ2FjeQ== 41359\nIENvbmdv 41360\nIGR1cmNoYXVz 41361\nIGJ1b3k= 41362\nZXJlbGxh 41363\nV0FO 41364\nUHJl 41365\nINGA0LXQtA== 41366\nIENyaXNpcw== 41367\nIOydvOydtA== 41368\nIG1hbnVzY3JpcHRz 41369\n0LXRgtGA 41370\nIG5vbnByb2ZpdHM= 41371\nIGRpY3RhdG9y 41372\nIGJhc2tldHM= 41373\nIElzaA== 41374\nIHBlcnRv 41375\nIGRhdGFzZXRz 41376\nIGFtcGxl 41377\nZ2ViYXV0 41378\nIGNvbnRyaWJ1dG9y 41379\nIGNpYW8= 41380\nIGNvbmZpcm1pbmc= 41381\nIFVDTEE= 41382\n4pms 41383\nINGB0L0= 41384\nIG92ZXJ0dXJu 41385\nIHVucmVhbGlzdGlj 41386\nIFBpZWNl 41387\nb2NhdGU= 41388\nIGbDpGxsdA== 41389\ncG94 41390\nIOuztOyLnOuptA== 41391\nIOuplOs= 41392\nIENyZWF0aW9u 41393\n0Y7QtNCw 41394\nINeU15A= 41395\nIHdoYWNr 41396\nb2xpdGhpYw== 41397\nY2VseQ== 41398\nINGB0L7QstGA0LXQvA== 41399\nIHNlcXVlbnRpYWw= 41400\nIHByb2Zlc2lvbmFs 41401\nIGNvb2xz 41402\nIHJlcGVudGU= 41403\nIGFpcmU= 41404\nZW5uZXM= 41405\ncml0b3M= 41406\nINCS0LjQtA== 41407\nIGvDtnI= 41408\nIEJpdHRl 41409\ndWxhcnM= 41410\nIGluY29ycmVjdGx5 41411\nIHNoYXJwbHk= 41412\nIGJvbWJhcmQ= 41413\n64uY7J20 41414\nIGNocm9tb3NvbWU= 41415\nIGFkdmVydGlzZW1lbnRz 41416\naHVu 41417\nINGJ0L7QsQ== 41418\nINCU0LDQttC1 41419\nIGJhdGh0dWI= 41420\nIFNubw== 41421\n2ZDZkQ== 41422\nIGJ1ZmZldA== 41423\nIEdyaWQ= 41424\nIEJyZXc= 41425\naXNldA== 41426\nIEltcG9ydGFudA== 41427\nw7xtw7x6 41428\nIHZldG8= 41429\nIFdlcms= 41430\nIFNoYW0= 41431\na3Jh 41432\naWxlZW4= 41433\naGVhcmQ= 41434\nIGRyYWluaW5n 41435\nIGtsYXNz 41436\nIGJha2F5xLFt 41437\nY3R1cmU= 41438\nYW1vdXI= 41439\nIHNwb25zb3JzaGlw 41440\nIGRpc3RpbGw= 41441\nIHBhdGlv 41442\nIGtvbWI= 41443\nIG92ZXJ3aGVsbWluZ2x5 41444\nIEphbWFpY2E= 41445\ndWl0ZW4= 41446\nTGl0dGxl 41447\nIExPVA== 41448\ndGHEhw== 41449\nIGNvbW1hbmRlcnM= 41450\nIFdhdHRz 41451\nIE9wdGlvbnM= 41452\n7J2066m0 41453\nQUNU 41454\nIGluZGlzcGVucw== 41455\nIEZvcnNjaA== 41456\nb3RvbQ== 41457\nIM6tz4fOtc65 41458\nIHByYWlzaW5n 41459\nIOyYgeyDgeydhA== 41460\nIGFtYW4= 41461\nIGh5cG5vdA== 41462\ndGhtcw== 41463\nIG5hc3plag== 41464\nIG1vdXJuaW5n 41465\nIFNBWQ== 41466\nY3lq 41467\nINCz0L7RgdGD0LTQsNGA 41468\nIGNhdQ== 41469\nbWVl 41470\nIHRhZGk= 41471\nTWVk 41472\nIGNhbGlkYWQ= 41473\nIHN0cmlwZQ== 41474\nIM61zr0= 41475\nIEthdHk= 41476\nIEVzY2FwZQ== 41477\nIG3DvHNzdGU= 41478\nINin2YTYpw== 41479\n0LrRgg== 41480\nIGpvYmJhcg== 41481\nIEplanU= 41482\nb3Jhcg== 41483\nIFNlcsOh 41484\nIE1lc3Np 41485\nw6F6 41486\nIFRyYW4= 41487\nIHBpZXJjaW5n 41488\nIGFyaXRobWV0aWM= 41489\nIHN0YWdnZXJpbmc= 41490\nIHBsdWdnaW5n 41491\nIEtBUg== 41492\ndmw= 41493\ntOyY 41494\nIFJlZ2llcnVuZw== 41495\nIE9jenl3acWbY2ll 41496\nIEVkZ2Fy 41497\nIGNvbmR1Y3Rpdml0eQ== 41498\neWVsbGluZw== 41499\ndmFpcw== 41500\nYWRpYW4= 41501\nIGJ1bGt5 41502\nINGB0YDQsNCy 41503\nINC/0YDQvtC8 41504\nIHBhdmVk 41505\nIGJlbmRz 41506\nIFNraWxsc2hhcmU= 41507\nIE1tbW0= 41508\nIEhvcnJvcg== 41509\nIHR1bWI= 41510\nIGdvb2Z5 41511\nIE1lb3c= 41512\n15nXnNeV 41513\nIFdhc3M= 41514\nIFNjYWxl 41515\nIFJhaw== 41516\nIHByb2plY3Rpbmc= 41517\nIGxpbmd1aXN0aWM= 41518\nIFdvcmxkcw== 41519\nZW5zZW1ibGU= 41520\nIHBlZ2E= 41521\nc3RvcHBhYmxl 41522\nIGltYmFsYW5jZQ== 41523\nIMO4 41524\nIHRocmlsbGVy 41525\n0LrQvtC70YzQutGD 41526\nIGxlZnRvdmVycw== 41527\nIGNhdmVhdA== 41528\nIFNUUg== 41529\ndW5kYWk= 41530\nIHdhdGVyeQ== 41531\nIE1hcmlu 41532\nIGVnZ3BsYW50 41533\nIEpC 41534\n2YXZg9mG 41535\ndmlkaWE= 41536\nIEZJTg== 41537\naWNhYmxl 41538\nIHBvZG9i 41539\nIGNvaGVzaXZl 41540\nIFZlcmbDvGd1bmc= 41541\nIFBsYXRv 41542\n0LDRgNC40Yk= 41543\nIGtvdA== 41544\nINCf0L7QvA== 41545\nINC00L7QutGD0Lw= 41546\nIGltcGxhbnRz 41547\naXNzZXo= 41548\nQnJl 41549\nIGdhc3Bz 41550\nIFRFRA== 41551\ncmF0bw== 41552\nSkk= 41553\nIGF2ZW51ZXM= 41554\nIENob25n 41555\nbGFkxLE= 41556\n2LHYtg== 41557\nIGluaWNp 41558\nIFN1YmFydQ== 41559\n4LiL 41560\nIGFjaHQ= 41561\nIEFyY2hpdGVjdHVyZQ== 41562\nINCy0LXRidC4 41563\nIERldk9wcw== 41564\nIHRvcHBpbmdz 41565\nIG9ic29s 41566\nYWluYQ== 41567\nIEJhbmdrb2s= 41568\nZXN0cnVjdA== 41569\nIGtvYg== 41570\nIOuTrw== 41571\nINGA0LDQt9C90YvQtQ== 41572\nIHJlZQ== 41573\nIGJpanZvb3JiZWVsZA== 41574\nIERlbW9jcmFjeQ== 41575\n4LmA4Lij4Liy 41576\nINC60L7QvdGC 41577\nIHNlw6c= 41578\nIHJhaGF0 41579\nIHBhcmxpYW1lbnRhcnk= 41580\nIEJhc2g= 41581\nemlhxYI= 41582\nSVRDSA== 41583\nIEJ1YmJsZQ== 41584\na3TDsw== 41585\nV2hvYQ== 41586\nIGZsYXRz 41587\nem5l 41588\nIHNlcnZpY2lv 41589\nIERldw== 41590\n1bjWgg== 41591\nIHVudGVyc3TDvHR6ZW4= 41592\nIFdpbmRz 41593\nIOyWmOuKlA== 41594\nIGV2YWx1YXRpb25z 41595\nIHJlY2E= 41596\nIGVsdmVz 41597\nY2hlZXI= 41598\nIGphbA== 41599\nIHJlc3RlZA== 41600\nIHF1aWVuZXM= 41601\nIEJyb29rZQ== 41602\nIOuniOydjOyXkA== 41603\nIGludGVu 41604\nIG9hdHM= 41605\nIHJlZmVyZWU= 41606\nIHBuZXVtb25pYQ== 41607\nIGRlbHZl 41608\ncGVhY2U= 41609\nZW55 41610\nIG1vc3RyYQ== 41611\nIENhbm5vbg== 41612\nz4HOv8+N 41613\nINCQ0Ls= 41614\nIG1vbnVtZW50YWw= 41615\nzr/Pjc68zrU= 41616\naW1tZXJz 41617\nYXZpYW4= 41618\nINC00LXQu9Cw0LXRgg== 41619\nIHBpdGNoZXM= 41620\nIEdyb3Zl 41621\nIHNlbWluYXJz 41622\nIHLDqWN1cA== 41623\nIFZvb3I= 41624\nIGRldmVu 41625\nIGRC 41626\nIGJvb3N0aW5n 41627\nZWdhbg== 41628\nIHdlbHQ= 41629\nIEd1YXRlbWFsYQ== 41630\nIG1pbGVhZ2U= 41631\nIGJlaGFuZA== 41632\nIFdhYXI= 41633\nIFN1cmY= 41634\nIGNhdWxpZmxvd2Vy 41635\nIFR5cg== 41636\nIG1pdGVpbmFuZGVy 41637\nIGRhcmluZw== 41638\nIFNpdHRpbmc= 41639\nZGxlZA== 41640\nIHJlc2VudG1lbnQ= 41641\nbcOkw59pZw== 41642\nIGZpbG1tYWtpbmc= 41643\nd2FydHM= 41644\ndGhvdWdodA== 41645\nb2xvZ2lxdWU= 41646\nIENPUg== 41647\nIGFjY291bnRlZA== 41648\nIGFwZXI= 41649\nIElOVA== 41650\nb2xhcmU= 41651\nIGFjb21wYcOx 41652\nIMahaQ== 41653\nIG1lcm1haWQ= 41654\nIEJlbnRsZXk= 41655\nYXRvcmU= 41656\nIHByZW4= 41657\nIGV0aGFub2w= 41658\nIGFzdHJvbm9tZXJz 41659\nc2VhdA== 41660\na2VlcGVycw== 41661\nIGV4ZW1wdGlvbg== 41662\nIGFtbw== 41663\nIOuCmOyEnA== 41664\nIGluaGFs 41665\nIGJvd3M= 41666\n0YHQutGD0Y4= 41667\nMzAwMA== 41668\nIGZlcm1lbnRhdGlvbg== 41669\nIHNpbmtz 41670\nIGNvbWVyY2lhbA== 41671\nIHN0dW1w 41672\nIGNlbGU= 41673\nIFNpc3RlcnM= 41674\nIFJlZ2lzdGVy 41675\nIHNvb3J0 41676\nIG5hdG9taWFzdA== 41677\nIOq3uOumvA== 41678\nIMWeZXk= 41679\nIGh5cGVk 41680\nIFJhZmFlbA== 41681\nIEVpcw== 41682\nIEJhc2ls 41683\nIEFzc2Fzc2lu 41684\nIEFkZQ== 41685\ncsOlbg== 41686\nIG9ubGFy 41687\nIG1vdmltaWVudG8= 41688\nIGFkZGl0aW9uYWxseQ== 41689\nIHNsaXQ= 41690\nIENocnk= 41691\nIEludGVydmlld2Vy 41692\n15zXpw== 41693\nIGRpc2w= 41694\nIGxpZ2dlcg== 41695\n0YPQutC4 41696\nYmVyaXNo 41697\nINGA0Y/QtNC+0Lw= 41698\nQVJPTg== 41699\nXSws 41700\nIGx1bWnDqHJl 41701\nIG9sdmlk 41702\nIGZyZXVl 41703\nIFRpbmc= 41704\nIEvDtg== 41705\nIGdlbw== 41706\nIGR5ZWQ= 41707\n0YjQtdC5 41708\nIMW8eWNpZQ== 41709\nIGll 41710\nIHRheHBheWVy 41711\nIHBlxYI= 41712\nIGTDqWNpZMOp 41713\nIGPFk3Vy 41714\nIGVudHdpY2tlbHQ= 41715\nIEhR 41716\nS0s= 41717\nb2Rhcg== 41718\nIGhvbmU= 41719\nIGNvbmZpYW5jZQ== 41720\nIGlzc3Vpbmc= 41721\nIGRpYWdub3N0 41722\nIOyehA== 41723\nINC60YDRg9GC 41724\nINC60LDRgQ== 41725\nIMO+ 41726\nIHJlc3RyaWN0aXZl 41727\nIENhc3Rybw== 41728\nIHXEnw== 41729\nIGVtcHJl 41730\nIE1vbw== 41731\nIEZpZ3VyZQ== 41732\ncGhvbmV0aWM= 41733\nUHJvZg== 41734\nINC/0YDQtQ== 41735\nIHRpbHRlZA== 41736\nIE5lZ2F0aXZl 41737\nIExpbWl0ZWQ= 41738\nbWVubw== 41739\nbGFtYXRpb24= 41740\nIHRydXN0ZWVz 41741\nIGludGVuc2VseQ== 41742\nIGHDp8SxbA== 41743\nIFVzZWQ= 41744\nIHp1bA== 41745\nIGFwcHJlY2lhdGl2ZQ== 41746\nIHRpbmM= 41747\nIGNvbnF1ZXN0 41748\nINi52YbYrw== 41749\nIHN1aWNpZGFs 41750\nIG11bGhlcmVz 41751\nIGRldGFjaA== 41752\nIGthbWVyYQ== 41753\nIEFpclBvZHM= 41754\nSU5ESVNUSU5DVA== 41755\n0LPQu9C40Lk= 41756\nIOuDhA== 41757\nIHdyZXN0bGU= 41758\nIGZpcmVhcm0= 41759\nIGxpcmU= 41760\ncHJh 41761\nIGpld2Vscw== 41762\nIENvcm5lbGw= 41763\nIO2VoOqyjOyalA== 41764\nIHN1Y2tlcg== 41765\nIG5vbWJyZXV4 41766\nIEZlcm0= 41767\n7JuQ7J20 41768\nIFBpcw== 41769\nINC40LfRg9GH 41770\nIG1pdGVu 41771\nIGNldg== 41772\nIFVSTHM= 41773\nIENBUw== 41774\nZmluZGVu 41775\nIGJyYXZlcnk= 41776\nINGB0LvQvtCy0L4= 41777\nIG5lbmh1bWE= 41778\nIGVuY3VlbnRyYQ== 41779\nIFNoaXJsZXk= 41780\nIHBlcmNlcHQ= 41781\nZnJhbWVz 41782\nIFJvdmVy 41783\nIEFsYmVydGE= 41784\nb2Nj 41785\nIOudvOqzoA== 41786\nIHPDunBlcg== 41787\nIHByZXN1bWU= 41788\nIGdsYW5k 41789\nIHBhY2luZw== 41790\nIG5ldXJvdA== 41791\nIHNubw== 41792\nIHBsb3R0ZWQ= 41793\nIHBhxYRzdHdh 41794\nIE93bmVy 41795\nIERlZmVuY2U= 41796\ncmlkZ2Vz 41797\nIHdhbGxwYXBlcg== 41798\nb25pYW4= 41799\nQnJv 41800\nIEFyaWFuYQ== 41801\na3J5 41802\nIG5hcnJhdGlvbg== 41803\nIGNyaWFuw6dh 41804\nIEFscmlnaHR5 41805\nIOydvQ== 41806\nIOyTsOqzoA== 41807\nIGxpYmVyYXRlZA== 41808\nIGV4Y2VlZHM= 41809\nIGRvbWluYXRpbmc= 41810\nIGJha8Sxbg== 41811\nbGs= 41812\nIHNsYXBwZWQ= 41813\n0JfQtA== 41814\ndW1lbnRhbA== 41815\nZ2V0dGFibGU= 41816\nIFJveg== 41817\nIEd1bA== 41818\nb3V2ZXJ0 41819\nIHNtYXNoaW5n 41820\nYXp1amU= 41821\nU2ly 41822\nIGdyYXRlZA== 41823\nQVRU 41824\nIGFydGljdWxhdGVk 41825\nIHN0b3Jh 41826\nIGV4dHJhdGVy 41827\n4buJ 41828\nz4PPiQ== 41829\nd2ly 41830\nIE1ldGU= 41831\nSW1w 41832\nIGhvb3I= 41833\ncGhhc2U= 41834\nINGH0YPQtA== 41835\nINCx0YDQsNGC 41836\nIGlkYWc= 41837\nIGNpbnE= 41838\nIGFwYXJlY2Vy 41839\nIElDRQ== 41840\nIHF1aWV0ZXI= 41841\nIGZhbHNjaA== 41842\nYWRpYw== 41843\nINC/0LvRjtGB 41844\nIE1lbnU= 41845\ndXhl 41846\nIFTDtGk= 41847\nIE1JTA== 41848\nIEhhag== 41849\ndmVyYnM= 41850\nIHR1YmluZw== 41851\nIG1hY2hzdA== 41852\nIGRhbGw= 41853\nVGVy 41854\nIGdlbGVu 41855\nIGN1Y3VtYmVycw== 41856\nIHdpZGdldHM= 41857\nIGRldnJhaXQ= 41858\nIG1pa2U= 41859\nIGludHJh 41860\n7ZWt 41861\nIMOF 41862\nIEh1bmQ= 41863\ncXVhcnRlcg== 41864\nIGV3 41865\nIGtlbHVhcg== 41866\nIG1hdHM= 41867\nIFRyaWNr 41868\nIEluZmluaXRl 41869\nnqg= 41870\nIHBlYWM= 41871\nIFByb3Rl 41872\n4KWI 41873\nIDE3MDA= 41874\nIFJhaXM= 41875\n4LmK 41876\nw6RobHQ= 41877\naWZpY2E= 41878\nYWltZXI= 41879\nYcSH 41880\nIGFrbA== 41881\nIFZvbHZv 41882\nIFR5c29u 41883\nIFJvbmc= 41884\naXJzaW4= 41885\nIOKZpQ== 41886\nIHBhcm9keQ== 41887\nbmF0aW9uYWw= 41888\ncG9k 41889\nYXlk 41890\nYW1ibGVk 41891\nIGdvdmVybm1lbnRhbA== 41892\nIGNvbmZvcnQ= 41893\naWNpZGVz 41894\nIG5hc3pl 41895\nIFNoZXBoZXJk 41896\nIEtvbnRha3Q= 41897\nIGRpc3Byb3BvcnRpb25hdGVseQ== 41898\nINC60LvRjtGH 41899\nIHTDrXR1bG8= 41900\nIHNpbmE= 41901\nIGNvbXBvc2l0aW9ucw== 41902\nIFBG 41903\nIHZlcmts 41904\nIHN1aXZyZQ== 41905\nIGFzdGE= 41906\nIHN0YWtlaG9sZGVy 41907\nIHNhbW1h 41908\nIEJMQUNL 41909\nIG5vZGln 41910\nIGxldmE= 41911\nIGp1ZWdvcw== 41912\nIGVybnN0 41913\nIGJvdHRvbXM= 41914\nIFNpZ25hbA== 41915\nIHBvbGx1dA== 41916\nIGR1cmE= 41917\nTXVzaWs= 41918\nINC60L7QvNC90LA= 41919\nINCy0YHQtdC5 41920\nYWx0ZXI= 41921\nIFN0ZWY= 41922\nIEJpZ1F1ZXJ5 41923\nIFZlcmFudHdvcnR1bmc= 41924\nIOuLueyXsA== 41925\nIHF1aXp6 41926\nIExldHRlcg== 41927\nIEludmVzdG1lbnQ= 41928\n0YjRgg== 41929\nkOuNsA== 41930\nIGVuY29kaW5n 41931\nIHTDpG5rZXI= 41932\nIEt3 41933\nYW5uaWU= 41934\nMTEw 41935\nIHp3eQ== 41936\nIOynpw== 41937\nIGRhdw== 41938\nZXN0w6Q= 41939\nIGRlY2VpdmU= 41940\nIEzDpG5kZXI= 41941\naXNrbw== 41942\nIHBvZHN0YXc= 41943\nIFBoYXJhb2g= 41944\n7LOk 41945\nw7psdA== 41946\nIHR5w7Y= 41947\nIG11c2lteQ== 41948\nIHBj 41949\nIE5U 41950\nIENvc3Rjbw== 41951\nIM+Dzr/PhQ== 41952\nIHVuaW4= 41953\ncm91bmRz 41954\nIHJlbWluZGVycw== 41955\nIHB1aXNxdQ== 41956\nIGtyaWpnZW4= 41957\nIHdvcmtmbG93cw== 41958\nbmV0ZW4= 41959\nIOuQmOyngA== 41960\nIHNsZWVr 41961\nIGNvd29ya2Vycw== 41962\nYW1pZW50b3M= 41963\nIHdpdGNoZXM= 41964\nYmFhcg== 41965\nZXRpZXM= 41966\nIHVubmF0dXJhbA== 41967\nIFNpY2s= 41968\nIEVmZW5kaQ== 41969\namNpZQ== 41970\nIGNoYW1hZG8= 41971\n7JiA7Iq164uI64uk 41972\nIHByemVkc2nEmWJpb3I= 41973\nIGJvb2tzdG9yZQ== 41974\nIOyeoOq5kA== 41975\nIFNlcGFy 41976\nYW5naQ== 41977\nRXZldA== 41978\nIGVtZXJnZW5jaWVz 41979\nIFhNTA== 41980\n0L3QtA== 41981\npbTrqbQ= 41982\nIOq/iA== 41983\nIOuTpOqzoA== 41984\nIHN1dA== 41985\nIFdpeg== 41986\nIGR5bmFtaWNhbGx5 41987\nb3BlcmF0aW9u 41988\nZG90 41989\nIGluZWZmaWNpZW50 41990\nY2xlYXJz 41991\nIG11bmRhbmU= 41992\nIFZlcm9uaWNh 41993\n2LHYqg== 41994\ncG9zZQ== 41995\ncGFp 41996\nIG55bG9u 41997\nIGF1bWVudGFy 41998\nIGFsbHRzw6U= 41999\ndmFr 42000\nIGNhcGFjaWRhZA== 42001\nIFdyZXN0bGluZw== 42002\nIGZlcnRpbGU= 42003\nIG3DqWc= 42004\nIE5hbm8= 42005\n0LDRgtC10LvQuA== 42006\nIOyWtOyp 42007\nIHRvY2E= 42008\nIEVn 42009\n4oE= 42010\nIOyz 42011\nbHVlbnQ= 42012\nIHNvbGVt 42013\nIGNpbmVtYXQ= 42014\nIFF1ZWw= 42015\nIG9yYml0cw== 42016\nIEhhcm0= 42017\ncmljYW5lcw== 42018\nIGJsdXJyZWQ= 42019\nINin2YTYsNmK 42020\nIGppbg== 42021\nIGdyZW5hZGVz 42022\nIGF0cm9j 42023\nIHdoZXJlaW4= 42024\nIHJlcGxlbg== 42025\nIENvbWljcw== 42026\nZWRhYW4= 42027\nIGRlbmlt 42028\nIGVtYmFycmFzc21lbnQ= 42029\nIEdvbWV6 42030\nIEJ1c2Fu 42031\naXZpdGllcw== 42032\nIHNhbGl2YQ== 42033\nIG1lcms= 42034\nIGlsZ2lsaQ== 42035\nINC60YDRg9Cz 42036\nIG9jY3VwYXRpb25hbA== 42037\nIFNhaGli 42038\nU3Rh 42039\nIGFkdmlzZXI= 42040\nIFRydWx5 42041\nIFlFQUg= 42042\nIOyeiOuKlOuNsOyalA== 42043\nemV3 42044\nYmFyZW4= 42045\nIHN0b2w= 42046\nIGJlbG9uZ2luZ3M= 42047\nIFJlc2VhcmNoZXJz 42048\nIGVmZW5kaW0= 42049\nz4XPhw== 42050\nxYLEhWN6 42051\nIFVuZw== 42052\nIEp1Yg== 42053\nIGNlcmVicmFs 42054\n4buHdQ== 42055\nINem16g= 42056\nINC/0L7QtNCw0YA= 42057\nIG1hcmNoZWQ= 42058\nIGF3YWtlbg== 42059\nIGFrbw== 42060\nIGFjZXB0 42061\nIGluaXRpYXRpb24= 42062\nbG90 42063\nIHfFgmFz 42064\nIE1vbmdvbA== 42065\ndXRyYWw= 42066\nIHRlbnRhbmc= 42067\nIGludmVyc2lvbg== 42068\nIOydtO2bhA== 42069\nIGxvaw== 42070\nxYJieW0= 42071\nUlM= 42072\nIHN0b3M= 42073\nIGludGVyYWN0cw== 42074\nIENhbGVuZGFy 42075\nIHZhbmlzaA== 42076\nIHBoeXNpb2xvZ3k= 42077\nIGxpbmVhcmx5 42078\nIEpZ 42079\nxJ9hbg== 42080\nZnVuZGVk 42081\naXppZXJ0 42082\nIHptaWFu 42083\nIEdyaWxs 42084\nIHVuYmVsaWV2YWJseQ== 42085\nb3RlY2hub2xvZ3k= 42086\nIENhcnM= 42087\nINmG24E= 42088\nIEZvbGdl 42089\nIEJldmVybHk= 42090\nw6Rpc2NoZW4= 42091\nIGF1bWVudG8= 42092\n7JuM7ISc 42093\nIG1haWxib3g= 42094\nIHN0ZWVkcw== 42095\nIFBlYWs= 42096\nIHd5a29y 42097\nIHByYXdkYQ== 42098\n0LjRgtGL 42099\nIGRpc2NvdXJz 42100\nIGFjY3VzZQ== 42101\nY2Vzc28= 42102\ndWlyZQ== 42103\nINC/0L7Qv9Cw0LQ= 42104\nIHRoYQ== 42105\nIG1lYXN1cmFibGU= 42106\nYmVlcGluZw== 42107\nIElubmVu 42108\nINC/0Y/RgtGM 42109\nIGNvbXBldGVk 42110\nIEl0YWxpYW5z 42111\nIGVuY29udHJh 42112\nIG5pZXc= 42113\nIGZpbHRyYXRpb24= 42114\nINC/0YDQvtGE0LXRgdGB 42115\nIHBhamFtYXM= 42116\nIGNpbGFudHJv 42117\nIFNvYw== 42118\nTHVj 42119\nIOq5gOs= 42120\nIE9kZA== 42121\nIGh5ZHJhdGlvbg== 42122\n0LzQvtCy 42123\nIHBseXdvb2Q= 42124\nIENvbXBldGl0aW9u 42125\n0LjQt9C90LXRgQ== 42126\nZmxpZ2h0 42127\nIEJlaXQ= 42128\nYm91cmc= 42129\nIGNvaWxz 42130\nIGPDom1lcmE= 42131\nIGFtZW5kZWQ= 42132\nxIFt 42133\nQW5nZWw= 42134\nIFN0YWN5 42135\nZmxv 42136\nIG5vcm1hbGU= 42137\nIGNvbnNvbmFudA== 42138\nIGFjY29tcGFueWluZw== 42139\n0LrRlg== 42140\nIGlycml0YXRlZA== 42141\nIGbDpXR0 42142\nIGNyb2NvZGlsZQ== 42143\nkJjripQ= 42144\nIGFsYmVpdA== 42145\nIFBoaWxvc29waHk= 42146\nxYY= 42147\neXRpYw== 42148\nIHLDqGc= 42149\nIGZyYW7Dp2E= 42150\nIGF0dGVudGl2ZQ== 42151\nSGFt 42152\nIGFscmVkZWRvcg== 42153\nc2Vp 42154\nINGB0LLQuNC0 42155\nIGdpbWJhbA== 42156\nIGNoaW5h 42157\nIPCfjrY= 42158\nINCS0LDQvA== 42159\nIHN0aW11bGF0aW5n 42160\nIE9yYQ== 42161\neXRlcw== 42162\nIGhlZnQ= 42163\nIGhhdGVycw== 42164\nIGNvbXBsZXhlcw== 42165\nIDAz 42166\ncsOzZA== 42167\nY2xlYXI= 42168\nIGJlc3RlaHQ= 42169\nd255 42170\nbW9pbA== 42171\nIHNsb3BweQ== 42172\nIGluc2lnbmlmaWNhbnQ= 42173\nIGR1YmJlZA== 42174\nIOuWoA== 42175\nIGNvbnNpZ28= 42176\n0LvRg9GI0LDQuQ== 42177\nU24= 42178\nINeU16Y= 42179\nIM6M 42180\nIG5hZHppZQ== 42181\nIGZyZXNobWVu 42182\ndGFh 42183\nIHV3YWfEmQ== 42184\nIEZhdm9yaXRl 42185\nIENyaW1pbmFs 42186\nIGV2aWRlbg== 42187\nIHN5bWI= 42188\nTGVz 42189\nIEJlYXU= 42190\ndW5lZA== 42191\ncGxlbWVudA== 42192\nQWM= 42193\nIGRlcm1hdA== 42194\nIE5vbGFu 42195\n0YvQvw== 42196\nIHNpdHQ= 42197\nIGV2ZXJsYXN0aW5n 42198\nIGVzdGF2YW0= 42199\nINC80LjQug== 42200\nIGtow6Fj 42201\nIGludml0 42202\nIHRyZWJsZQ== 42203\nIGppZw== 42204\nbWFuaQ== 42205\nIHR1dm8= 42206\nIFJVUw== 42207\nIEVyZGU= 42208\nIER6acSZa3VqxJk= 42209\nIGJsdWViZXJyaWVz 42210\na2VsbA== 42211\nYWNpb25z 42212\n0LLQuA== 42213\nTEVU 42214\nIHNwcm91dA== 42215\nIHNwb3I= 42216\nIGLDqm4= 42217\nIE1vbmE= 42218\nIENvbnRhaW4= 42219\nIEtleXM= 42220\n0L7Qt9GP 42221\nIGZ1bmNpw7Nu 42222\nIHJhcHBlbGxl 42223\nIGV2b2x2ZXM= 42224\nIHNjcmFwaW5n 42225\nIGNvbWVudMOhcmlvcw== 42226\nIHByYXRpcXVl 42227\nIGF1eGlsaWFyeQ== 42228\nIFNwb25nZQ== 42229\n0YHQutC40Lw= 42230\ndXZv 42231\nINGB0LDQvNC+ 42232\nIHNhbms= 42233\nIGhpZ2h3YXlz 42234\nIGludmVudGlvbnM= 42235\nINC40L3QvtCz0LTQsA== 42236\nIGNyZWF0aXZlbHk= 42237\nIGJlbmNobWFya3M= 42238\nb25jw6k= 42239\nYWxhbA== 42240\nIHNvdHRv 42241\nIGNhbHZlcw== 42242\nIE1vdg== 42243\nIGxhdmVuZGVy 42244\nIGV5ZWJhbGxz 42245\nIGF3YWl0aW5n 42246\nIFBhdHk= 42247\n2YTZhw== 42248\nIGVtYnJvaWRlcnk= 42249\nIGR1aA== 42250\nIGNhbWFy 42251\nIEJPQg== 42252\nIHNwYWNlZA== 42253\nIGfFgm9z 42254\n0LDQtdC80YHRjw== 42255\nIGVzY2FwZXM= 42256\nIFJvZ3Vl 42257\nemN6 42258\n6J4= 42259\nrOulvA== 42260\nIE1vxbxl 42261\nINC10YHRgtC1 42262\nIEJ1cmFkYQ== 42263\nd2Q= 42264\ndXV1dQ== 42265\nIHNhc2g= 42266\nIEx1Yg== 42267\nIG5vdGVib29rcw== 42268\nIG1hZQ== 42269\nIGNvbmZsaWN0aW5n 42270\nIHN1bW1lcnRpbWU= 42271\nYWNhcw== 42272\nIGJhdWVu 42273\nYmxvd2luZw== 42274\n4bqhbw== 42275\nIOyWuOygnA== 42276\nIFNlbmhvcg== 42277\nIGlQaG9uZXM= 42278\nIFF1YXJ0ZXI= 42279\nIOygnOuMgOuhnA== 42280\ndcOf 42281\nIOuniOustOs= 42282\nIHNldHRsZXJz 42283\nIGNyZXN0 42284\nIHRyYW5zYw== 42285\nIHJpb3Rz 42286\nIGNsb25lcw== 42287\nIE9wcmFo 42288\nzq/Otg== 42289\nIHBhbHM= 42290\nLi4uLi4uLg== 42291\nINGA0L7RgdGB 42292\nIExhc2Vy 42293\nIHphY3p5 42294\nIHNldmk= 42295\nIHJlZ2VuZXJhdGlvbg== 42296\n7Je8 42297\nd291bGQ= 42298\nIMO8emVyaW5l 42299\nIFN0cmHDn2U= 42300\nIHZlbmdlYW5jZQ== 42301\nIHJlcg== 42302\nIFNhZmFyaQ== 42303\nIEhFWQ== 42304\nIHNhY2Fy 42305\nIGltYWdlbQ== 42306\nIEJ1bmRlc3Q= 42307\nbWVzYW4= 42308\nIFBhc3Rl 42309\nIHNpeno= 42310\nINC/0L7RgdGC0YPQvw== 42311\n15TXlQ== 42312\ndHJhZA== 42313\nIGZyYW7Dp2Fpc2U= 42314\nIEJvdQ== 42315\nIGJhcnJl 42316\nIFpoaQ== 42317\nIEdlZXo= 42318\naWhhZA== 42319\nIHJlY29ub2M= 42320\nIHBlbGln 42321\nIGluZGljZXM= 42322\nIOuwlOuA 42323\nIGNvbmR1Y3Rpb24= 42324\nIOyVhQ== 42325\nIHpla2Vy 42326\nIGZ1bQ== 42327\nIFfDvHI= 42328\nYnJlYWtlcg== 42329\nIHNwcml0ZQ== 42330\nQ3Jvd2Q= 42331\nIG9wZW5lcg== 42332\nIG9sdg== 42333\nIGJ1ZW5hcw== 42334\nIFNpbGs= 42335\nIEhJTQ== 42336\na29w 42337\nY29tcGw= 42338\nIHBvc3Nvbm8= 42339\ns4A= 42340\nIG9zY2lsbGF0b3I= 42341\nIFNpdGg= 42342\n0LDQttC4 42343\nIHJhZnQ= 42344\naGFsbA== 42345\nIHNjaG5lbGxlcg== 42346\nIGltcG9ydGluZw== 42347\nIGFzc2VtYmxpbmc= 42348\nIHViaXF1 42349\nIGFjdGl2YXRlcw== 42350\nYWNjaQ== 42351\nk5zrpbw= 42352\nIGNvbXBvc2Vycw== 42353\nIEFDTA== 42354\nQ29uZg== 42355\nIOy9mA== 42356\nINC90LXQutC+0YLQvtGA0YvQtQ== 42357\nIGNhbmRpZXM= 42358\nIE11c3M= 42359\n4LmD4LiK 42360\nIGR1ZGE= 42361\n0L3QuNC60L7QvA== 42362\nbWVkZW4= 42363\nIOyWtOuVjA== 42364\nIFllc2h1YQ== 42365\nemFn 42366\naG9kb3U= 42367\nIGFsb3Vk 42368\nIFBhbG1lcg== 42369\naW1pemU= 42370\nIG1hcml0aW1l 42371\nIGNvbW11bmFs 42372\nIGJhZGdlcw== 42373\nIHJ1Z2J5 42374\nIG1hcnNobWFsbG93 42375\nIGZpZXJ5 42376\nIGFjY291bnRhbnQ= 42377\nIGFibGE= 42378\nIE1vbnJvZQ== 42379\nIEZvbnQ= 42380\nIEJvb3N0 42381\nIEJhcm5lcw== 42382\nYW5zd2Vy 42383\nIEJ1cm5pbmc= 42384\nIGFuZ2Vm 42385\nIFdlc2xleQ== 42386\nbGxz 42387\n7LU= 42388\n16nXnA== 42389\naWxpxZtteQ== 42390\n15DXnw== 42391\nYW11cmE= 42392\nIEZ1ag== 42393\nIHBhbmk= 42394\nIFRyb3A= 42395\nYXJiZWl0ZW4= 42396\nIHJ1ZQ== 42397\nIFJhcmU= 42398\nw6RuZ2Vu 42399\nINGB0LzQvtGC0YDQtdGC0Yw= 42400\nINCa0LDRgA== 42401\nIE1UVg== 42402\nYm9hcmRpbmc= 42403\nXVs= 42404\nIOugiOs= 42405\nc3RhbmJ1bA== 42406\ncGllbHQ= 42407\nIEhhcmR5 42408\nIEVuZ2FnZW1lbnQ= 42409\nIERpZW5zdA== 42410\nIHfDpHJlbg== 42411\nIGZ1ZWdv 42412\nIGVzdHJ1Y3Q= 42413\nIGNhbGFt 42414\nIFJlc3BvbnNl 42415\nIE1vaGFtbWFk 42416\nIHJlc2lzdGluZw== 42417\nIGR1cmFudA== 42418\nIE9MRUQ= 42419\nIHZlcno= 42420\nbcOkbg== 42421\nINmG25I= 42422\nIHBhcmFub2lk 42423\nIEF3YXJl 42424\nIEVuZ2luZWVycw== 42425\nIHByb2NlZHVyYWw= 42426\nIHBlcnNvbm5hZ2U= 42427\nIGZhcmtsxLE= 42428\nZmxvd2luZw== 42429\nINC80LXRgdGC0LA= 42430\nIEJhcmU= 42431\naXN0ZW0= 42432\nIHBvY3rEhXRrdQ== 42433\nIHBlcnNvbmFqZXM= 42434\nIOyWtOugtQ== 42435\nrYk= 42436\nINCl0L7RgtGP 42437\nIHVuc2V0dA== 42438\nIEFic29s 42439\nIOG6pXk= 42440\nIE1BWU9S 42441\n0L/QvtC70L3QtQ== 42442\nIGluZm9ybWluZw== 42443\nIGFtcHM= 42444\n0J/RgA== 42445\nIOutlA== 42446\nYWVkYQ== 42447\nINeU15HX 42448\n4bqlbg== 42449\na2VsaWpr 42450\nIGF0aGVpc3Q= 42451\nIHRyb3V0 42452\nIG5ldWVz 42453\nIE5va2lh 42454\nbWFjaGVu 42455\nIHdob2xlc2FsZQ== 42456\nxLFyZA== 42457\nSW5z 42458\nINGN0L8= 42459\nIHByaWNr 42460\nIEtpbmRlcm4= 42461\n4LiX4Liz 42462\nIGNsYXNzeQ== 42463\nIMOubnQ= 42464\nIFNob3BpZnk= 42465\nINGB0L7RgA== 42466\nINC30LDQutGA0Ys= 42467\nenVr 42468\nIHVuaXZlcnNhbGx5 42469\nIHRlYXNwb29ucw== 42470\nIHJlY291bnQ= 42471\nIG7DpWdvbnRpbmc= 42472\nIFh1ZQ== 42473\naXNpw6htZQ== 42474\nIHdlYWtlc3Q= 42475\nIHRlxZ9la2vDvHI= 42476\nIG1hdGhlbWF0aWNhbGx5 42477\nIEhvcw== 42478\nIO2VnOuLpA== 42479\nIHBhcnRhZ2Vy 42480\nIERhcnI= 42481\n6ro= 42482\nIM61zro= 42483\nIGdlcm1z 42484\nIGdlbGly 42485\nIGR1bA== 42486\nLC0= 42487\nIOyWuOs= 42488\nINee16Y= 42489\nINGP0YA= 42490\nIHF1b3RpZA== 42491\nIHByenlzeg== 42492\nIGhhcmRuZXNz 42493\nIGFxdWF0aWM= 42494\nIEp1bmdsZQ== 42495\nIFBDUg== 42496\nIEVsaW90 42497\nIG9zdHI= 42498\nIG1hcGE= 42499\nZXNzw6Q= 42500\nIEdJUg== 42501\nIERyaXZpbmc= 42502\nIFNhbWk= 42503\nIE1lZGllbg== 42504\nIENvbXBhbmllcw== 42505\nIFBoYXJt 42506\nc2VpdHM= 42507\nIFJpbQ== 42508\nIM6/z4DOvw== 42509\nIHdlaXRlcmVu 42510\nIHBpenphcw== 42511\nIEx5ZGlh 42512\nIEhlaWdodHM= 42513\nIHNpbmNlcml0eQ== 42514\nIG5vc3Nhcw== 42515\nIGTFgg== 42516\nIGFsYXJtaW5n 42517\nIENhdWM= 42518\nINGB0LzRi9GB 42519\nZmFjaW5n 42520\nYmFncw== 42521\nV1c= 42522\nINi02Yo= 42523\nIGNvdXJ0cm9vbQ== 42524\nIFBoaWxsaXA= 42525\nIOqyg+yymOufvA== 42526\nIFNwaWVsZXI= 42527\nIGthbnQ= 42528\nIGFkbWl0dGluZw== 42529\nIGNvbnRhaW5tZW50 42530\nIHJlbW92YWJsZQ== 42531\nIGp1bXBlcg== 42532\nZm9jdXNlZA== 42533\nINC40YLQvtCz0LU= 42534\nINCi0LXQvA== 42535\nIHZhc2U= 42536\nIFVTQw== 42537\nIE1vbmF0ZQ== 42538\nIEphY29icw== 42539\nIEhPTA== 42540\naWtlZA== 42541\nZXJ3ZWlzZQ== 42542\nIGdvb2RpZXM= 42543\nIGhvbWFnZQ== 42544\n15vXqdeZ15U= 42545\nIHF1YWlz 42546\nIGluaWNpYWw= 42547\nIGd1YXJkaW5n 42548\nIGRheno= 42549\nIGNvbWJvcw== 42550\nINGD0L/RgNCw0LI= 42551\nIFRhbGVudA== 42552\nIMOzcg== 42553\nIGludGVybWl0dGVudA== 42554\nIE1jQ2FydGh5 42555\nIHNwYW5z 42556\nIHR5cmU= 42557\nIHF1eQ== 42558\nanV0 42559\nIFplbnQ= 42560\nIGdhdA== 42561\nIHNjYWZmb2xk 42562\nIG5lY2VzYXJpbw== 42563\nIFphaGxlbg== 42564\nIFNBTkQ= 42565\nIFBV 42566\nRXZlcnl0aGluZw== 42567\nLS0tLS0tLS0tLS0tLS0tLQ== 42568\nINCy0LfRj9GC0Yw= 42569\nIHNwYXJrcw== 42570\nIHBlbmR1bHVt 42571\n157Xnw== 42572\nIOyDieq5 42573\nIG11bHRpcGxpZXI= 42574\nINC70LDQtNC90L4= 42575\ndXJhdA== 42576\nIHVwc2V0dGluZw== 42577\nYmFr 42578\nIOy1nOuMgA== 42579\nIGFuw6Fs 42580\nIEpPRQ== 42581\nIGtvc3Rlbg== 42582\nIFBhdHR5 42583\nIEd1aW4= 42584\nY2tlZA== 42585\nIEVneXB0aWFucw== 42586\nIENpdGl6ZW5z 42587\n16jXmw== 42588\nINCV0YnQtQ== 42589\nINC50L7Qs9C+ 42590\nIHNub3dmbA== 42591\nIGxla2tlcg== 42592\nIGFjb3N0 42593\nIEJhYmU= 42594\nIGdhbWJsZQ== 42595\nIGFkamVjdGl2ZQ== 42596\n0LrQuNC80Lg= 42597\nb3lz 42598\nIG1vbnRyZQ== 42599\nIEh5dW5kYWk= 42600\nIG1vaXN0dXJpemluZw== 42601\nIG1venphcmVsbGE= 42602\nT09P 42603\nIGZhY3VsdA== 42604\nIGRvZXQ= 42605\nIGZlYXJsZXNz 42606\nIGVzcHJlc3Nv 42607\nIGFsbG9yYQ== 42608\nIENpbmM= 42609\nIGNvbnRlw7pkbw== 42610\nIFBlbG9zaQ== 42611\nIG1pbmRlcg== 42612\ncm9vdA== 42613\nIO2VoOs= 42614\nINC/0LDQtA== 42615\nIENhbGxpbmc= 42616\nIENvbmZpZw== 42617\nIENvbnNvbGU= 42618\naW5za3k= 42619\nw6luZXJnaWU= 42620\nIHNvbGl0YXJ5 42621\n0L7QtNC1 42622\nIGd1YXJkZWQ= 42623\nMTYw 42624\nINC/0YHQuNGF 42625\nIFNoYXA= 42626\nIHRpdHJl 42627\nb2xvZ25l 42628\nINC/0LDRgNGD 42629\nIFBSRQ== 42630\nIGxu 42631\nIE1pdGds 42632\nIENhcnJ5 42633\nIHNwaW5k 42634\nIENhbnRvbg== 42635\nIGtpbmdkb21z 42636\ncmVtbw== 42637\nIHJhZ2luZw== 42638\nIGluY2FwYWJsZQ== 42639\nIFdS 42640\nINGB0L7QsdGB0YLQstC10L0= 42641\nINC60LDQutC40YU= 42642\nIFNIRQ== 42643\n64u57Z6I 42644\nIHNjYXJjaXR5 42645\nIHBlcmRl 42646\nIGV4aXRz 42647\nIFNpbmdlcg== 42648\nIHN1cHBlcg== 42649\nIG11bmljaXBhbGl0eQ== 42650\nIERpdmVyc2l0eQ== 42651\nIHRpcm8= 42652\naWVscw== 42653\nIGzDrWRlcg== 42654\nIGJsdWZm 42655\nIGF0cmE= 42656\nbHlz 42657\nIG1haGQ= 42658\nIGPDs2RpZ28= 42659\nIEhhcmxlbQ== 42660\ncnVsZQ== 42661\naWNpdHk= 42662\nIHNpbXBsaXN0aWM= 42663\nIEtvbnN0 42664\nRUxMSQ== 42665\nIGbDtnJzdGE= 42666\nIGNvbnN0aXR1dGVz 42667\nINGB0YLQvtGA0L7QvdGD 42668\nIHVyZ2Vk 42669\nIFBhbmRh 42670\n7LCo6w== 42671\ncmVjZQ== 42672\nIHBhdHJpb3Q= 42673\nIENydXNo 42674\nIHdpbms= 42675\n0L7QudGC0Lg= 42676\ndXJhbsOnYQ== 42677\nIHNlaXp1cmVz 42678\nIGVsZWN0cm9k 42679\nIERvbmtleQ== 42680\nIElV 42681\nIE1PUw== 42682\nIGFsa2Fs 42683\n7LSJ 42684\nYmVzb25kZXJl 42685\nIHBhcmFsbGVscw== 42686\nIGJpdHRlcm5lc3M= 42687\nw6R0dHJl 42688\nZXNzaW9uYWw= 42689\nIHNveWJlYW4= 42690\nIGNvbGxhYg== 42691\nIFJlcG9ydGluZw== 42692\nINC60L7QvNC/0LDQvdC40Lg= 42693\nIHdzenlzY3k= 42694\nIENydW5jaA== 42695\naXNlZW4= 42696\nIGFtYmFzc2Fkb3Jz 42697\nIENoZXY= 42698\n0L7QstGL0LU= 42699\nc2Nh 42700\nINGA0LXRiNC40Ls= 42701\n0L7RgtC+ 42702\nIGdsZWljaHplaXRpZw== 42703\nbWVybg== 42704\nw7xzdA== 42705\nIEhhZQ== 42706\ns7TqsqDsirXri4jri6Q= 42707\nIHNob3Jlcw== 42708\nIGRlcHJlc3M= 42709\nIGFob3I= 42710\nIFN0ZXVlcg== 42711\nYWho 42712\nIHJldmlzZQ== 42713\nINGB0LDQvNGL0LU= 42714\namF0 42715\nIGhlcmJhbA== 42716\nIGN1w6FudA== 42717\nIGJ1bmE= 42718\nbmllanN6ZQ== 42719\nRmluYWxseQ== 42720\n15XXlg== 42721\nY2pl 42722\nIOyeiOqxsOuToOyalA== 42723\nIOuCmOuI 42724\nIHByemVzdA== 42725\nbGljYQ== 42726\nIER1Y2g= 42727\n0ZbQudGB0Yw= 42728\ncGFzc2Vu 42729\nIHNhdGlzZmllcw== 42730\nIEFkZGl0aW9uYWw= 42731\nIGPDoW1hcmE= 42732\n0LXRh9C10L3QuNC1 42733\nIHBvbXA= 42734\nIOunkOydtA== 42735\nIE1pbGxz 42736\n0LXQstC40LQ= 42737\nIHJlc3BlY3RhYmxl 42738\nIGZpbGFtZW50 42739\nIHZlbmRlcg== 42740\nIG1hdHRlcmVk 42741\nb3VyZQ== 42742\n7Li1 42743\nS29yZWFu 42744\nIGVzdHVkaW8= 42745\nIGNhY3R1cw== 42746\nIFZpdmU= 42747\nIFJhZw== 42748\nIGNvbXBsaXF1w6k= 42749\nINmI24E= 42750\nIHRhbw== 42751\npr8= 42752\nU2luY2U= 42753\nIGplb3BhcmQ= 42754\nIFNlbGw= 42755\nIOyYmw== 42756\nIGtldG8= 42757\nIGludGVsaWc= 42758\nIEFuZ2Vi 42759\nIHRpZGVu 42760\nIHNvY2lv 42761\nIHJlbWluaXNjZW50 42762\nIGNhcmVnaXZlcg== 42763\nU3BhY2U= 42764\nIEV4ZXJjaXNl 42765\nIEJlY29tZQ== 42766\nw6p0cw== 42767\nYWtr 42768\nIS4u 42769\nINGB0L/RgNC+0YE= 42770\nIM6xz4DOvw== 42771\nIHNob290aW5ncw== 42772\nIGFwZQ== 42773\nIFNhbW15 42774\nIEt1bmc= 42775\nIGN1w6Fs 42776\nIEx1cA== 42777\nINGB0YLRg9C0 42778\nIHN3ZWV0ZXI= 42779\nIGNvbXVt 42780\nIEFkcw== 42781\naHl1bmc= 42782\nINCx0YPQtNGD0Yk= 42783\nIHdhZmZsZQ== 42784\nIE9yYg== 42785\nIGxhdXQ= 42786\nIGZvcmVjYXN0aW5n 42787\n5ao= 42788\nIHJhcHBpbmc= 42789\nIHByZWZlcnM= 42790\nIGJlbno= 42791\nIG5paw== 42792\nIEJhaG4= 42793\nIHNhbmRpbmc= 42794\nIGltbWluZW50 42795\nINC/0YDQvtCx0LvQtdC80Ys= 42796\nIGRvaXZlbnQ= 42797\n0L7Qu9Cw 42798\nIMW8eWNpYQ== 42799\naWh1 42800\nIGV4aXN0ZW0= 42801\nIEludGVyaW9y 42802\nIFRha2Vz 42803\nIHRvZGRsZXI= 42804\nIGRpY3RhdG9yc2hpcA== 42805\nIFNtaXRoc29u 42806\nIEFsbGFodQ== 42807\nz47Pgc6x 42808\n7JWY7Iq164uI64uk 42809\nIFZvdGU= 42810\nIFNtZWxscw== 42811\n0L7QtNC90L4= 42812\nIGhpbmRzaWdodA== 42813\nVlI= 42814\nIFBhdGNo 42815\nIEphaHJlcw== 42816\nIHNvdXZlbmly 42817\nIG5ldXRyb24= 42818\nIGxvbmd0aW1l 42819\nIHNheWlu 42820\nYXNha2k= 42821\nINC+0YHRgtCw0L3QvtCy 42822\nIGV4cGVsbGVk 42823\nIGNyeXB0b2N1cnJlbmNpZXM= 42824\nIE11cmRlcg== 42825\nIENpdGl6ZW4= 42826\nV0FZ 42827\nIHBsdQ== 42828\nIGxlbW9uYWRl 42829\nIGNvbnZlbmllbnRseQ== 42830\nIEhJ 42831\nIDIwMjM= 42832\n16nXldeq 42833\n0LDRhtC40L7QvQ== 42834\nIOubsA== 42835\nINmE2YPZhg== 42836\nINC90LXQvNC90L7QttC60L4= 42837\nIHVudXNlZA== 42838\nIG1haW9yaWE= 42839\nIGFzdHJvbG9neQ== 42840\nIERvd250 42841\nTmljaw== 42842\nIHByZW9jY3Vw 42843\nIGRlbWFpbg== 42844\n157Xog== 42845\nINCy0L7QtNGL 42846\nIFNhbnNrcml0 42847\nIHByw6p0 42848\nIHN0cmFuZGVk 42849\nIHJlZmlu 42850\nINC/0YDQuNC90LjQvA== 42851\nINC/0L7QstC10YDRhQ== 42852\n4K+NPw== 42853\nIHpyb2I= 42854\nIGludGVydHc= 42855\nIERhdmlkc29u 42856\n0LvQtdC90LA= 42857\nINC/0L7QvdGP0YLRjA== 42858\nIFJlbm8= 42859\nINC/0L7Qu9GD0YfQuNC70L7RgdGM 42860\nIGNvcnJlc3BvbmRlbnQ= 42861\nIFVyYW4= 42862\nZWxzZQ== 42863\nwrfCtw== 42864\nIHR1dG9yaW5n 42865\nIGdyYW5kZGF1Z2h0ZXI= 42866\nbHVkZWQ= 42867\nIHN0ZXNzbw== 42868\nIGjhur90 42869\nIGdlZ2FuZ2Vu 42870\nINCd0JA= 42871\nIGFudGln 42872\nYmFja2dyb3VuZA== 42873\nIGdlZGFhbg== 42874\nIGZhdm9yZWQ= 42875\nIEVtbWFudWVs 42876\nIGlvZA== 42877\nIGNsYW1wcw== 42878\nIGNvbXBsZQ== 42879\nIEFkdmFuY2U= 42880\nIOyeiOqzoOyalA== 42881\nIFJveA== 42882\nIOyXkOs= 42883\nIGludGVzdGluZXM= 42884\nIHBlcmN1c3Npb24= 42885\nIGxlZ2l0aW1hdGVseQ== 42886\nIEV0ZXJuYWw= 42887\nZmFtaWx5 42888\nYWxvZw== 42889\nQnJhZA== 42890\n0LXQvdC40YLRjA== 42891\nINGB0L3QsNGH0LDQu9Cw 42892\nIGNlcnRh 42893\nIGFra29y 42894\nIM61zrTPjg== 42895\nIG9jdGF2ZQ== 42896\nIFZhYw== 42897\n0LzQvtGC0YDQuA== 42898\nIMOJdGF0cw== 42899\nIGxvbmd1ZQ== 42900\nIGRpc3NvY2k= 42901\n0YDRj9C0 42902\naGVpbg== 42903\nIHBhbnRhbGxh 42904\nIGluZGljYXRpb25z 42905\nIEx0 42906\nIEdyYWRl 42907\nb2luZQ== 42908\nYnVn 42909\nIFZlcml6b24= 42910\nIEFsw6lt 42911\nIHZpZW5uZW50 42912\nINGH0LjRgdGC 42913\nIEJlbmk= 42914\nIFRzY2g= 42915\nIFRQ 42916\nIGluc3VsdGluZw== 42917\nIFdlaWdodA== 42918\nIGFkYXB0YXRpb25z 42919\nIGhhYsOtYW4= 42920\nIGNsaXF1ZQ== 42921\nb8WbY2k= 42922\nanVuYQ== 42923\nIHN1Y2hlbg== 42924\nIEdvZXM= 42925\nIEV4b2R1cw== 42926\nQ2hv 42927\nIGFudGlz 42928\nIO2MjOs= 42929\nc2V2ZW4= 42930\nINGH0LDRgdC+0LI= 42931\nIGJhbGxpc3RpYw== 42932\nem9ueQ== 42933\nSUNJQQ== 42934\nINC/0YDQtdGB0YI= 42935\nIHNpbXBsZXNtZW50ZQ== 42936\nIENvbGxhYm9y 42937\nRnJlZA== 42938\nINGC0LXQu9C10YTQvtC9 42939\nIFJhdmk= 42940\n7ZW07KQ= 42941\n0L/QtdGA0LI= 42942\nIOyeiOycvOuLiOq5jA== 42943\nIMOzdA== 42944\nIGFsZWc= 42945\nw7pw 42946\nIGRpc3JlZ2FyZA== 42947\nIGluZGVudA== 42948\nY2xvdWQ= 42949\nY2hsYWdlbg== 42950\nIGl0ZXJhdGU= 42951\nIGdlbmVyYWxpemVk 42952\n4KS5 42953\nZWxlcmk= 42954\nIGRpc2FzdHJvdXM= 42955\nINGB0YLQsNC70LA= 42956\ns5E= 42957\nS05PV04= 42958\nIHJpY2huZXNz 42959\nIGNvbnNjaWVudA== 42960\naWNodHM= 42961\nINGN0LvQtdC8 42962\n2KjYrw== 42963\naXJlbnM= 42964\nIGhhdW50aW5n 42965\ncnVjdHVyZXM= 42966\nYXR0YWNr 42967\nIGN1cGNha2Vz 42968\nc3F1ZQ== 42969\nIG5hc3plZ28= 42970\nIGFudGhyb3BvbG9neQ== 42971\nY2hhZQ== 42972\nIGRpc2NvdmVycw== 42973\nIFBlcnNvbmFsaXR5 42974\nIM6kzr8= 42975\nIGRpxJ9lcg== 42976\nINC90LXRkQ== 42977\nIEFuaXRh 42978\nIFvimao= 42979\nIENhcm0= 42980\nIEJlbm55 42981\n7Iqs 42982\nIHB1cGls 42983\nIG9jYXM= 42984\nw6RsbGV0 42985\nasWbxIc= 42986\nYW1lbnRhbA== 42987\nINC+0YLQvdC+0YE= 42988\nIHBpZA== 42989\nIGFybXA= 42990\nUkVF 42991\nINC+0YLQutGA0YvQsg== 42992\nIHVkYQ== 42993\nIFN5bmRyb21l 42994\nIFN0YW5kYXJkcw== 42995\nIHBvaW50ZXJz 42996\nIGVuYW0= 42997\nIFRpZw== 42998\nw616 42999\nINC90LDQvNC4 43000\nIHVuY2hhbmdlZA== 43001\nIHR1cm1vaWw= 43002\n4bupbmc= 43003\nISEi 43004\nNTAwMA== 43005\nIOusvOyWtOs= 43006\nIG1lcmdpbmc= 43007\nIGVudHNjaGVpZGVu 43008\nZm9ybWU= 43009\nIHRyaW1tZWQ= 43010\nIGRhcmVk 43011\nIGFzcGlyYXRpb24= 43012\nIE15dGhpY2Fs 43013\nIEhlag== 43014\nIEFsZWo= 43015\n0YbQvg== 43016\n0L7RgtGD 43017\nWmU= 43018\nINC40L3RgdGC0YDRg9C80LXQvdGC 43019\nIFJUWA== 43020\nIGxvY2FsaXplZA== 43021\nIHN1cnJvdW5kcw== 43022\nIGVtcGllemE= 43023\nIGNsYXNl 43024\nIOC4gQ== 43025\nIFJhcGlk 43026\nb21pbm91cw== 43027\naWdhaWw= 43028\nINGI0LjRgA== 43029\nIGzDpg== 43030\nIHphc2Fk 43031\nIHVuZm9sZGluZw== 43032\nPyE/IQ== 43033\nIOyInOqwhA== 43034\nIFBvbHNraQ== 43035\nIEthdWY= 43036\nIENlbHQ= 43037\naXRpYw== 43038\nIHRvb2xib3g= 43039\nIFBvY2tldA== 43040\nIOyEnOuhnA== 43041\nIGJlbGtp 43042\nIGFkbWlyYXRpb24= 43043\ncGhy 43044\nIFByb2R1a3Q= 43045\nIFRydWNr 43046\nIGRyYXXDn2Vu 43047\nd2HFgg== 43048\nIEhlYnJld3M= 43049\nIO2VmOqyjA== 43050\nIEFDRQ== 43051\ndXJnZW5jZQ== 43052\nYXVyYWlz 43053\nIGNoYXJpdGFibGU= 43054\nxLF0 43055\nIGFybWFz 43056\nIEdlZGFua2Vu 43057\ncmVhdGluZw== 43058\ncG9ydGU= 43059\nIGltcHJpbnQ= 43060\nZsOkaA== 43061\nINC/0L7QtNGF0L7QtA== 43062\nIG91dHNldA== 43063\n4Lin4LiB 43064\n0LXQvdC90L7Qs9C+ 43065\nQ2xhc3M= 43066\nIHZhbml0eQ== 43067\nIFZPSUNFUw== 43068\nIDI2MA== 43069\ncmVzaWRlbnQ= 43070\nVVNF 43071\nIOqwgOyatOuNsA== 43072\n6b0= 43073\nIHRocm91Z2hwdXQ= 43074\nIGN1bWE= 43075\n7Jqx 43076\nINC/0LvQvtGJ 43077\nIHBhcnRpcw== 43078\nIEFuaW1hdGlvbg== 43079\np4jr 43080\nQ3Jl 43081\nw7Z0emxpY2g= 43082\nIG1hZ2c= 43083\nIGNsdW1zeQ== 43084\nIGJvdHRsZW5l 43085\nIGJpcmxpa3Rl 43086\nIEdhbWI= 43087\nINeb158= 43088\nIG1ldHJvcG9saXRhbg== 43089\nT29o 43090\nIG9iamVjdGlvbnM= 43091\nINmF2Ko= 43092\nINC80LXQuw== 43093\nIHJlbW5hbnRz 43094\nIFhhdmllcg== 43095\nUmljaA== 43096\nIG9sc2E= 43097\nIFBpbGw= 43098\nIGdyb2Fucw== 43099\nIE5hcnVob2RvdQ== 43100\nIENvbnRyYWN0 43101\n0LDQtNCw 43102\nbmFp 43103\nINGE0LjQtw== 43104\nIG9wcw== 43105\n4bqhdA== 43106\nIHBhcmFjaHV0ZQ== 43107\nIG5lbGw= 43108\nIEVudHNjaGVpZHVuZw== 43109\n15zXmded 43110\nIHRydXRoZnVs 43111\nIHNoYXJwZXI= 43112\nIGJ1cmVhdWNyYWN5 43113\nY2FydA== 43114\nINC40L3Rgg== 43115\nd2llaw== 43116\nIHdpbGxpbmdseQ== 43117\nIEhlcm1hbg== 43118\nIG1laHJlcmU= 43119\nIGVsaXRlcw== 43120\nIEFybW9y 43121\nIGVtYm9yYQ== 43122\nIFJlY29nbg== 43123\nINC70Y7QsdC70Y4= 43124\nIEV4Y2VsbGVuY2U= 43125\naWJlbA== 43126\nIGV4cG9ydGluZw== 43127\n7LK07KCB 43128\nS2VsbHk= 43129\nQ2FtZXJhbWFu 43130\nIHNsaXBz 43131\nIGZpZ3VyYQ== 43132\nIGtvbGw= 43133\nIFBhbmRlbWll 43134\nIHRpbWVk 43135\nbGllw59saWNo 43136\nINee15s= 43137\nIHBlcsOtb2Rv 43138\naXZhdA== 43139\nIHF1ZXN0aW9ubmFpcmU= 43140\nIHDDqXJpb2Rl 43141\nIHNpZ2hz 43142\nIGFsbGVnaWFuY2U= 43143\nIFhW 43144\nIEtlbnN1a2U= 43145\nIEdlc3VuZGhlaXRz 43146\nIHBvc2l0aXZv 43147\nIEphbmVpcm8= 43148\nIFNFRQ== 43149\nINin2LPYqg== 43150\nIEtlbHNleQ== 43151\ndG9iZXI= 43152\nIM6xzrvOu86s 43153\nIFBhcmVudA== 43154\nIERheXRvbg== 43155\nIEJpbGRlcg== 43156\nb3VyYWdl 43157\nIHNlcmVz 43158\nIG11Y2jDrXNpbW8= 43159\nIFJlYWxt 43160\nIE9GRklDRVI= 43161\nZXJzb25pYw== 43162\nb255YQ== 43163\nIOq4iQ== 43164\nIGFuY2VzdHJ5 43165\nIEp1cmFzc2lj 43166\nIGNlbnRpZ3JhZGU= 43167\n4bqldQ== 43168\ndWrEhWM= 43169\nbWFucw== 43170\nIHRpbw== 43171\nIE1vxbw= 43172\nIHRyYWdlbg== 43173\nIHN0YXJlZA== 43174\nIHNjaGVtYXRpYw== 43175\nIHBhc3NvdQ== 43176\nIG1lYXRiYWxscw== 43177\nxYJvxZvEhw== 43178\nIHN5bmNocm9ub3Vz 43179\nIHBlcm1pcw== 43180\nYXJpYWw= 43181\nIHplcg== 43182\nIHBhcml0eQ== 43183\nIEF2YXRhcg== 43184\naW5kZWVy 43185\nZXN0b24= 43186\nIG1laWTDpG4= 43187\nIENseQ== 43188\ntIk= 43189\nIGVzdHJvZ2Vu 43190\nIGNlbnRpbWV0 43191\nIGNvbnZpY3Rpb25z 43192\nIHBvc3NpYW1v 43193\nIHBlcmR1 43194\nIHBhdGhvZ2Vucw== 43195\nIFF1aW4= 43196\nIFByb2dyYW1z 43197\nIFBvaW50cw== 43198\ncmFtZW50 43199\ncmFpbA== 43200\nIHZ5 43201\nIGdyYWZ0 43202\nIGJhcnQ= 43203\nIExvdHVz 43204\n4Kg= 43205\nIOuztOyLnA== 43206\ncmFtZXI= 43207\nRmF0aGVy 43208\nIOucuw== 43209\nINeU150= 43210\nIHRyYXplcg== 43211\nIHRhcms= 43212\nw6hjZXM= 43213\nZm9ydGg= 43214\nINGB0LTQtdC70LDQu9C4 43215\nIHp1Y2NoaW5p 43216\nIHdha3R1 43217\nIGVudGVydGFpbmVk 43218\nIE1pbGxpYXJkZW4= 43219\nIHNoYWt5 43220\nIHByemVkZQ== 43221\nuIzr 43222\nIHJldmVyc2libGU= 43223\nIE5BVQ== 43224\ndWlucw== 43225\nw6lyw6p0 43226\nYW5uZW4= 43227\nIEh1bnRpbmc= 43228\nIEZlbGxvdw== 43229\nw6lsaW9y 43230\nIHJvdGF0aW9ucw== 43231\nIGdyYW5ueQ== 43232\neHRvbg== 43233\nINGB0YLQsNC90L7QstC40YLRgdGP 43234\nINC90LDRh9Cw0Ls= 43235\nIGFydGVyaWVz 43236\ncmnDsw== 43237\nINC/0L7Qu9GM0LfQvtCy 43238\nINCR0Ys= 43239\nIG5vdmVsdHk= 43240\ncG91bmQ= 43241\nIHdlaXJkZXN0 43242\nIGJvaXM= 43243\nw6ltaWU= 43244\ndXBs 43245\nQVRB 43246\nIHRlaGQ= 43247\nIE5pcg== 43248\nc8SxbsSxeg== 43249\nISIs 43250\nIGltbW9ydA== 43251\nIGVsaw== 43252\n0LDQvdC40Yc= 43253\nIGZhYnJpY2F0aW9u 43254\nIE5vaXNl 43255\nIEF2YW50 43256\n2LHbjA== 43257\nd2F0 43258\nIHdob29zaGluZw== 43259\nINeb15k= 43260\nINCX0L3QsNGH0LjRgg== 43261\nIGNlbnRyaWY= 43262\nYW5zaW5n 43263\nU291bmQ= 43264\nIOudvOs= 43265\nIGNhcHRpb25z 43266\n4LON 43267\nIG9yZ2Fz 43268\nIGRvbHBoaW5z 43269\nIEJsZW5k 43270\nIFRhag== 43271\nIENDVFY= 43272\nIGlub20= 43273\nIGVkaXRpb25z 43274\nIGJ1cm5vdXQ= 43275\nIGLDpHR0cmU= 43276\nIENhc2E= 43277\nb3ZpY2g= 43278\nIG1vbHRlbg== 43279\nIGJsaW5kZm9sZA== 43280\nIEd1ZQ== 43281\nIHNwaW5uZXI= 43282\nIG3DtmdsaWNoc3Q= 43283\nIFbDoA== 43284\nZW5lY2E= 43285\nIG3DqWRpY28= 43286\nw6FzdGljbw== 43287\nIGFyZA== 43288\nIFN1bmRheXM= 43289\nIFJlbW90ZQ== 43290\nIOyWvOuniA== 43291\nIHRyxrDhu5tj 43292\n7IWo6w== 43293\nIGRvcHA= 43294\nIGJlxJ8= 43295\naWNhbmE= 43296\nIOuCmOykkeyXkA== 43297\nIGhvbGluZXNz 43298\nZGlyZWN0 43299\nIOyYge2ZlA== 43300\nIGN1bHBh 43301\nIFN0aXRjaA== 43302\nbGlnaHRseQ== 43303\n0LDQvNC10L0= 43304\nINC80LXRiA== 43305\nINC/0LXRhw== 43306\nIHlodGU= 43307\nb3NwaGVyZQ== 43308\nIOyTsOuKlA== 43309\nw6lr 43310\nIHNlcmlvdXNuZXNz 43311\nIGdhcm1lbnRz 43312\nIGNvbmNpc2U= 43313\nIFNK 43314\nIHZlcmxvcmVu 43315\nIHBhcmVjZXI= 43316\nIFVOQw== 43317\n7Iqk7YOA 43318\nIGVuZmFudA== 43319\nIGJvbWJlcg== 43320\nIEdpZnQ= 43321\nIOyii+uLpA== 43322\nIHJoeXRobXM= 43323\nIEtsYXI= 43324\nb3duaWs= 43325\nIFJldmVyZW5k 43326\nIGVtaXR0ZWQ= 43327\nbGFzc2Vu 43328\nIHJldmVuaXI= 43329\nIGFyaXNpbmc= 43330\nIHByZWNpc2FtZW50ZQ== 43331\nIGludGVycG9s 43332\nIFRlbmVtb3M= 43333\nb2JlZA== 43334\nIHRlY25vbG9naWE= 43335\nIG5lcmVkZQ== 43336\nIFZpc2E= 43337\nIHNhdmE= 43338\nIGVzY3JldmVy 43339\nIGFzc2F1bHRlZA== 43340\nIEZsZWlzY2g= 43341\nIENvdW5jaWxsb3Jz 43342\nIOqwgOq5jA== 43343\nIGJlZ2c= 43344\nIERldmVsb3Blcg== 43345\nIEJyb256ZQ== 43346\nIEJvbnVz 43347\nINeo16c= 43348\nZmFjdA== 43349\nIGVuZGxlc3NseQ== 43350\nIG1hY2Ft 43351\nIHJ6ZWN6eXdpxZtjaWU= 43352\nIGhvdmVyaW5n 43353\nw6hnZQ== 43354\nIHBvb3Jlc3Q= 43355\nIFNjaGVk 43356\nbWlsZQ== 43357\naXNzZW1lbnRz 43358\nYWPEgw== 43359\nIOumvQ== 43360\nIHZhY2Npbg== 43361\nIGZ1dHVyaXN0aWM= 43362\nIFdpbmRvdw== 43363\n0L/QsNGA 43364\nINGA0L7RgQ== 43365\nIGxvd2Vycw== 43366\nYWNz 43367\nINCQ0LvQtdC60YHQsNC90LQ= 43368\nIEFsZXJ0 43369\naWVtZQ== 43370\nIENhdWNhcw== 43371\nIGphd3M= 43372\nIGh1bnRlZA== 43373\n7Je9 43374\nINio2YY= 43375\nINec16DXlQ== 43376\nIHR1cmJpbmVz 43377\nIGx1bXBz 43378\nIEFsbGllcw== 43379\nYWhsdA== 43380\nIHN1YnNjcmlwdGlvbnM= 43381\nIG5vdXZlYXV4 43382\ndWdlcg== 43383\nYm9uZXM= 43384\nIGJlcnJ5 43385\nIOyEoOusvA== 43386\nIE1hbnVmYWN0 43387\nIEx1bmNo 43388\n6re4656Y 43389\nIGh5ZHJhdGVk 43390\nIGFjaGVp 43391\nIFlheg== 43392\nIFRpYmV0YW4= 43393\nIFF1YW50dW0= 43394\nIEplcm9tZQ== 43395\nINC+0YnRg9GJ 43396\n0L7QstCw0L0= 43397\nbW90aW9u 43398\nIENvbnRyb2xsZXI= 43399\nZW5lcmdldGlj 43400\nINGB0LrQvtGA0L4= 43401\nIHZvd2Vscw== 43402\nINGD0LbQsNGB 43403\nIGhvb2Y= 43404\nIEJ1bGxldA== 43405\naW1hZ2lu 43406\n16DXmded 43407\nIGVuZ2FnZW1lbnRz 43408\nIEJsdWVz 43409\nIGHDsWFk 43410\nIGZwcw== 43411\nIGNhdGVycA== 43412\nIHPhu5E= 43413\nIFRyaWJl 43414\n0L/QvtC9 43415\naWZlcmF0aW9u 43416\nIHJ1bWFo 43417\nIFB1bmo= 43418\nbGFi 43419\nIGNvbXByZWhlbnNpb24= 43420\nYnJpbmdpbmc= 43421\nV28= 43422\nIHRpaw== 43423\nIGFueWhvdw== 43424\nw6F0aWNhcw== 43425\nIHNpdHplbg== 43426\nIGtvbGF5 43427\nIENvbmZlZGVyYXRl 43428\nIENhbGxlZA== 43429\nIG5hc3p5Y2g= 43430\nIGR6acSZa2k= 43431\nIGNsb2Fr 43432\nIEdvb2c= 43433\nIEFzaGU= 43434\nZW5hbg== 43435\nINC80YvRiA== 43436\nINCy0LXRgg== 43437\nIFNwbw== 43438\nIFNrZXQ= 43439\nIEhlbmRlcnNvbg== 43440\naWxhaA== 43441\nINCx0LXQt9C+0L/QsNGB 43442\nIHNla2FsaQ== 43443\n7Ja06rCA 43444\nIHNuYXJl 43445\nIHLhurFuZw== 43446\nIGbDtnJzw7Y= 43447\nc3p5Y2g= 43448\nIMO8YmVycw== 43449\nIHN0cmF0w6ln 43450\nIOy6kOs= 43451\nIHJhcHBlcnM= 43452\nIGNlcA== 43453\nIEhhc3Rh 43454\nIGhvcnJpYmx5 43455\nIGZyw7xo 43456\nINio2Lk= 43457\nIG1hbnRsZQ== 43458\n44CF 43459\nZnVuZGluZw== 43460\nIHp1c3Q= 43461\nIFBlbnM= 43462\nc2Vk 43463\nIO2XpA== 43464\nIGdlcmVraQ== 43465\nIGFsYXJtcw== 43466\nIFdoYQ== 43467\nIE1hcmt1cw== 43468\nYWtzaQ== 43469\nINCQ0LvQtQ== 43470\na2xvcmU= 43471\nIMOpbmVy 43472\nIHRpbGRl 43473\nYm94aW5n 43474\nIOyEng== 43475\nIGVuY29udHJhbW9z 43476\nIFBoYXI= 43477\n0L3QsNC60L7QvA== 43478\nw7NzdA== 43479\nIMSwcw== 43480\nIOuLmA== 43481\nIHNxdWF0cw== 43482\nIHByZXRlbmRlZA== 43483\nIGRleg== 43484\nIOq0nOywruyVhA== 43485\namFjaA== 43486\n65286rOg 43487\nIO2ZleynhA== 43488\nIEFuc2No 43489\naW1lcms= 43490\nIGNvbmp1Z2F0ZQ== 43491\nIHBlbmluc3VsYQ== 43492\nIGdvcmlsbGE= 43493\nIHBob3RvZ3JhcGhlZA== 43494\nIEF1bnF1ZQ== 43495\nIGVudHJlbg== 43496\nIERldXRzY2hlbg== 43497\nIEFsYWRkaW4= 43498\nIOustOyEnA== 43499\nIFN0ZWxsYQ== 43500\nIEVsZWN0aW9u 43501\nb3V0aW5l 43502\nR3JhbmQ= 43503\nIFdhaw== 43504\nIFNlcmdpbw== 43505\naG9yc2U= 43506\nYWhvbg== 43507\nIEZhbWlsaWVz 43508\nIGhhdGluZw== 43509\nIEJldHQ= 43510\n4LiZ4Liw4LiE4Liw 43511\nIGN1cmxpbmc= 43512\nIElzcmFlbGlz 43513\nINec15DX 43514\nIE15ZXJz 43515\nIHNjYW5uZWQ= 43516\nIEJFQw== 43517\naWxlcmk= 43518\nIGNhbGxl 43519\nIE1pbmg= 43520\nIG1pY3Jvbg== 43521\nIGNvbmR1Yw== 43522\nw612 43523\nINCy0L7Qt9GM 43524\nIGFjdGlvbmFibGU= 43525\nIFRydXN0ZWVz 43526\nIHRpZWY= 43527\nIGhlYWRlcnM= 43528\nIGFuaW1hbGVz 43529\n7JuA 43530\n0LvQvtGF 43531\ndW5pdHk= 43532\nbHlh 43533\nIGphbmdhbg== 43534\nIGhhbmk= 43535\nIGNhc2luZw== 43536\nIGrDs3ZlbmVz 43537\nIFNwbGl0 43538\nIENhcmxv 43539\nIEJlaW0= 43540\nIG51YW5jZWQ= 43541\nIHRlZGR5 43542\nIENsYW4= 43543\nw6RjaGVu 43544\ncGllcg== 43545\nINC00L7Qv9C+0LvQvQ== 43546\nIGRpYXBlcg== 43547\nZWZmZWN0aXZl 43548\nIE5pYWdhcmE= 43549\nIHdhcnQ= 43550\nIGNvcnJv 43551\nIEthbXBm 43552\nenRl 43553\nIGTDqXZlbG9wcGVtZW50 43554\nIGF0dGFja2Vycw== 43555\nIFNoZXJtYW4= 43556\nIDE5MTQ= 43557\nIG1lb3c= 43558\nIFDDpQ== 43559\n7Lo= 43560\nY2l0 43561\nIGNvdXBl 43562\nIOq3uOuLpOydjOyXkA== 43563\nIGh1bW91cg== 43564\nIGNvbGU= 43565\nIFdhcm5pbmc= 43566\nIFRpbA== 43567\nY2FsbQ== 43568\nYnVhdA== 43569\nIGNpbmU= 43570\na2llag== 43571\nS2V2aW4= 43572\nIG1pbGxpZ3JhbXM= 43573\n15PXqA== 43574\nYXJpYW1lbnRl 43575\nIG9ybw== 43576\nIEhvZA== 43577\nZXJ0b3M= 43578\nIGxpaGF0 43579\nIGZ1bGxlc3Q= 43580\nIGdyYW5kaQ== 43581\nINCx0L7Qug== 43582\nIHdob2xseQ== 43583\nIG1haGRvbGw= 43584\nIGNvbnRyb2xs 43585\nIEJ1bnVu 43586\nIGRpcHBlZA== 43587\nIHJlZ2nDs24= 43588\nINmE2Yg= 43589\nINCx0LDQsw== 43590\nIHByZW1pZXJz 43591\nIGNo4buL 43592\naWRleg== 43593\nIHF1b3Rh 43594\nIGdoZWU= 43595\nYXJrYW4= 43596\nIGdlbGF0aW4= 43597\nIENsZXJr 43598\nYmJsZXM= 43599\nIFBhaWdl 43600\nIHN0YWdlZA== 43601\nIHNvY2lhaXM= 43602\nIEJpemlt 43603\nIHZlbG9jaWRhZGU= 43604\nIG1hbGFyaWE= 43605\nIHNob3J0ZW5lZA== 43606\nIHNhbHV0 43607\nIEhlaGU= 43608\nIHbhu4s= 43609\nIFRhaXdhbmVzZQ== 43610\nIEFycmk= 43611\nZ3Jlcw== 43612\nKCk= 43613\ncmlhZA== 43614\nkZDr 43615\nIG1hc2N1bGluaXR5 43616\nTFA= 43617\nIOuWoQ== 43618\nIHTDqXJtaW4= 43619\nIFbDpA== 43620\nIFNlaXRlbg== 43621\nIHJlc3BlY3RmdWxseQ== 43622\nw6Fv 43623\nIHRvdGFsZW1lbnQ= 43624\nIHNjcmFwcw== 43625\nIGluZnJpbmc= 43626\nIEJvc2U= 43627\nYW1hcg== 43628\nIEx1aXph 43629\nIEFSTQ== 43630\nINC/0LvQvtGF0L4= 43631\nIG1laWxsw6Q= 43632\nIERpb24= 43633\nIHNvdWhh 43634\nIGdlc2NoYWZmdA== 43635\nIGNvbnZvbHV0aW9u 43636\nIOKAkeKAkQ== 43637\nIDE0NA== 43638\nbGluZ3Q= 43639\nIG3DpG5uaXNr 43640\nIGd1c3RhZG8= 43641\nIGNvaW5lZA== 43642\nIEx1bHU= 43643\nb3BvdA== 43644\nIFByYXllcg== 43645\nIHJvYXN0aW5n 43646\nIGNocm9tb3NvbWVz 43647\n0LXQu9C1 43648\nQmx1ZQ== 43649\nIEVyZm9sZw== 43650\nINC/0YDQuNC00YPQvA== 43651\nIHJpc2tpbmc= 43652\nIEd1YXJkaWFucw== 43653\nIDIwMjQ= 43654\nw6hzZQ== 43655\nINCx0YPQtNGC0L4= 43656\nIGNvbnNlcnZl 43657\nIEJyaW5naW5n 43658\nIEFzdHJh 43659\n4LmA4LiC 43660\nINC60LDQutGD0Y4= 43661\ncmVzcGFjZQ== 43662\nINCe0L8= 43663\nINCy0L7QutGA0YPQsw== 43664\nIG1hc2tlZA== 43665\nIFNoeQ== 43666\nIE5pbQ== 43667\nZW5kYXM= 43668\nIO2PrOyduA== 43669\nIOuqqOyWkQ== 43670\nIHZhbGV1cg== 43671\nIE5lZ3Jv 43672\nIENEcw== 43673\naW5rbGluZw== 43674\nIG1vbnTDs24= 43675\nIEhvbmQ= 43676\nUmVhbA== 43677\nIGZ1bGxuZXNz 43678\nIFdob29wcw== 43679\nIFNoYW5r 43680\nIEJyYW4= 43681\nIHRyYW5zbHVj 43682\nIGVycg== 43683\nIEdhcmRlbnM= 43684\nb3l1 43685\nIGFmZmlybWF0aXZl 43686\nIHBvdHRlcnk= 43687\nbGl2ZQ== 43688\naWF1 43689\nbW91bnQ= 43690\nIGZsdWN0dWF0aW9ucw== 43691\nw61lbQ== 43692\nIHB1bHNlcw== 43693\nIGNyaWFuw6dhcw== 43694\nzq/Osc+C 43695\nIGJhc3Rh 43696\nRU5OSVM= 43697\nINC60L7RgNC/ 43698\nIEZ1bms= 43699\nw6VydA== 43700\nINC30LDRgtC10Lw= 43701\nIHBhcmFzaXRlcw== 43702\nIGFpcmZsb3c= 43703\nIFh1YW4= 43704\nR8O8bG1l 43705\nIGJsb29taW5n 43706\nIG11bW15 43707\nIGJhbw== 43708\nIENsYXA= 43709\nYW50aWNz 43710\nc2tpbg== 43711\nY2VudHJpYw== 43712\nYmVmb3Jl 43713\nIFJJQ0hBUkQ= 43714\nIEhhaG4= 43715\nVEFLRQ== 43716\nINGC0YDQtdGC0Yw= 43717\nIHByZXNzdXJlZA== 43718\nIEt1cno= 43719\naXN0aQ== 43720\nINC90LDRiNC10LPQvg== 43721\nIHNlbWljb25kdWN0b3I= 43722\nIENsaW50 43723\nIHBsdXA= 43724\nIE9yaWdpbg== 43725\nIEV2ZW50cw== 43726\nIOqxseyglQ== 43727\nbXBmZW4= 43728\nTkVZ 43729\nIERX 43730\nIOu2ge2VnA== 43731\nIGluZm9ybXM= 43732\nIGZvcnNr 43733\nIGFtaWdh 43734\nIENpbmNpbm4= 43735\nU3Ry 43736\nIHBhcmlzaA== 43737\nIOy7pO2U 43738\nIHNpemk= 43739\nIHBsYW50YXRpb24= 43740\nIGJsaXZlcg== 43741\nINC/0L7Qu9C40YI= 43742\nIHN1YmRpdg== 43743\nIHJhbnQ= 43744\nIHByaW5jaXBhbHM= 43745\nIGt1bm5l 43746\nw7xnZW4= 43747\nYXJlc3BhY2U= 43748\nIHZhbGxhaGk= 43749\nIGNvbGxhcHNpbmc= 43750\n2KfZhNmF 43751\nIGxpZGVy 43752\nIHRhbWE= 43753\nIGdhZ25lcg== 43754\ncm9sbGU= 43755\nIOunkOyUgOuTnOs= 43756\nIGNhdGhlZHJhbA== 43757\nIFdlYnM= 43758\nIFBvbGl0aWNz 43759\nIERlbmlz 43760\nIHR1bw== 43761\nIHJlZnJhY3Q= 43762\nIGRpc2ludGVncg== 43763\nc3Rlcw== 43764\nINC70Y7QsdC+0LI= 43765\nIHdpbHQ= 43766\nIHRydXN0cw== 43767\nIGtvbXVu 43768\nIEJhc2tldA== 43769\nfiEh 43770\nbmFl 43771\nINCa0L7Quw== 43772\nIHN5bGxhYmxlcw== 43773\nIEhlbnJp 43774\nIE5hYg== 43775\n2YjYuQ== 43776\nIHdu 43777\nIGthbXA= 43778\nIFByYWd1ZQ== 43779\nIEJyZWFrZmFzdA== 43780\nIOq3uOuftA== 43781\nIGNodXQ= 43782\nIDMzMA== 43783\nIEluZHVzdHJpZXM= 43784\nIGnFn2k= 43785\nIEdvbGRtYW4= 43786\nIMSwbnM= 43787\ndXNzYQ== 43788\naXRoZQ== 43789\nhJA= 43790\nIFNPVU5E 43791\n0LDQu9GM0L3Ri9C8 43792\nLig= 43793\nINCz0L7RgNCw0Lc= 43794\nIGRhZ2VnZW4= 43795\nIOuu 43796\nIHdhaXRlcg== 43797\nbGVuZ3Ro 43798\nIM+Dz4TOsQ== 43799\nIGNodW5reQ== 43800\nU2E= 43801\nIHJ1c3R5 43802\nIEp1ZGl0aA== 43803\nNzUw 43804\nIGVwb3h5 43805\n7Lmg 43806\nbWV0cm8= 43807\nIHJlamVjdGluZw== 43808\nIHNxdWlzaHk= 43809\nIHBsdXBhcnQ= 43810\nIG3DqXRo 43811\nIGFzcGlyaW5n 43812\nIERyYW1h 43813\nIHVwbGlmdA== 43814\np4jri6Q= 43815\nLi4uLi4uLi4uLi4uLi4uLg== 43816\noKTsmpQ= 43817\nIHTDqWNuaWNh 43818\nIHBhc2FuZG8= 43819\nVGhvc2U= 43820\nINGA0LDQt9C00LXQuw== 43821\nIG1lZGlvY3Jl 43822\nIE5pY2tlbA== 43823\nIHN1cGVyaGVyb2Vz 43824\nIG1pc3Npb25hcnk= 43825\nIFBhcmVjZQ== 43826\nIHJvdGF0aW9uYWw= 43827\nIHByZXR0 43828\nIGxhbWE= 43829\nIGNhbnlvbg== 43830\nIGJldGVy 43831\nIFByb3Zvc3Q= 43832\nIGh2aXM= 43833\nIGRlYWN0aXY= 43834\nIEhlbHM= 43835\ncGZsaWNodA== 43836\nU29tZXRoaW5n 43837\nIFBpZXJjZQ== 43838\nIOqygOywsA== 43839\nbHVuZ2Vu 43840\nIHNpemluZw== 43841\nIGxhdGl0dWRl 43842\nIE5vbmV0aGVsZXNz 43843\nb21uaWE= 43844\nIFNhYnJpbmE= 43845\nIER5bmFtaWM= 43846\nb250YQ== 43847\n7IaQ 43848\nIGRpcmVjdGl2ZQ== 43849\nIERlcG90 43850\nIGZ1ZWxlZA== 43851\nIGV4cGlyZQ== 43852\nIGNvbcO6bg== 43853\nIFNleHVhbA== 43854\nIEdvcmU= 43855\nIHJlc3RsZXNz 43856\nIEpBS0U= 43857\n0YLQtdGA0LXRgQ== 43858\nINGC0YDQsNC9 43859\nIEhvbHo= 43860\nIEFjdG9y 43861\nY2FsbA== 43862\nIGVtYWlsZWQ= 43863\nIFBlYXI= 43864\n0YPQtNC4 43865\n0YDQsNC7 43866\nIG3DoHk= 43867\nIENIRUVSSU5H 43868\nIHJldGFpbGVy 43869\nIHByb3Ry 43870\nIGRpc2NhcmRlZA== 43871\nIEhJUw== 43872\nIGV2YW5nZWxpY2Fs 43873\nIEVsc2U= 43874\nIGV4cGxvcmVz 43875\nIGNyaXRpY2l6aW5n 43876\naWZpaw== 43877\nIHdoaXBwaW5n 43878\nIG9waXM= 43879\nb3VzZWQ= 43880\nRnJlZQ== 43881\nIO2MrA== 43882\nIG1pY3M= 43883\ncnVubmluZw== 43884\nT2I= 43885\naXRpw6k= 43886\nIG5lY2VzaXRh 43887\nIERvbWluaWNhbg== 43888\nIEJhZ2g= 43889\nIHRlbmRlbmNpZXM= 43890\nIE1ldHJvcG9saXRhbg== 43891\nxZFs 43892\nINC30L3QsNC10Lw= 43893\nIFphbQ== 43894\nIERlYWRwb29s 43895\nYWxlxbw= 43896\nIGludmVzdGlnYXRpdmU= 43897\nIFByb251bmNpYXRpb24= 43898\nIGVtdWxhdGU= 43899\nIGJhbmNv 43900\nIC3imao= 43901\nIG92ZXJhcmNoaW5n 43902\nbGljaGVz 43903\nINCy0L7Qt9Cy0YDQsNGJ 43904\nIFNjYXJ5 43905\nIEtpYQ== 43906\ncm9udGluZw== 43907\naW5uZWQ= 43908\nINuB2Yg= 43909\n7IiY66W8 43910\nd2Vs 43911\nIOuzhOuhnA== 43912\nIHVuaW50ZW50aW9u 43913\nYWFT 43914\nIG5pY2VzdA== 43915\nIFRlc3Rpbmc= 43916\nIElTSUw= 43917\nb2dlbm91cw== 43918\nINif 43919\nIGxpZXV0ZW5hbnQ= 43920\nIGJyYXVjaA== 43921\nIFRpcg== 43922\nZHJpdmU= 43923\nIHRvbGVyYW50 43924\nIHNob290ZXJz 43925\nIOyYiOu7kA== 43926\nb250b24= 43927\nIHRlcmlh 43928\naWV0ZXQ= 43929\nUm9u 43930\nbGVpZ2g= 43931\nZ2Fl 43932\nIG9sbWFr 43933\nIENsb25l 43934\nc29sZA== 43935\nIHNrZWxldG9ucw== 43936\nIGluY3VtYmVudA== 43937\n0L7QvNC1 43938\nQ09O 43939\nIGxldmVu 43940\nIG1pbGxlbm5pYWxz 43941\nIGVxdWF0b3I= 43942\nIEZlZGVy 43943\nIEFsZXhhbmRyYQ== 43944\nIHZyaWo= 43945\nIEhlYWx0aGNhcmU= 43946\nIO2VkQ== 43947\nIGVtcGhhc2l6aW5n 43948\nIGRpYWxvZ3Vlcw== 43949\nIGNoaWxsZWQ= 43950\nIHByb3c= 43951\nIFBhc3Npb24= 43952\nIExhZGVu 43953\nYXJpZXN0 43954\nYXBocmFn 43955\nIGFkZGl0aXZl 43956\nIFN0YWF0 43957\nIE5lcHQ= 43958\nIEhBTQ== 43959\n4LmA4Lit 43960\nZGF5cw== 43961\nIO2WiOuNmA== 43962\nIHZvaWxh 43963\nINGF0Ls= 43964\nIERldXRzY2hl 43965\ncXVpcg== 43966\nT3Blbg== 43967\nIHJhbmdlZA== 43968\nIGxldmVycw== 43969\nIE1hbnNpb24= 43970\ncGFyZWQ= 43971\nIFRpdGFucw== 43972\nYXRvaXJl 43973\nIGVuZ2FnZXM= 43974\neWV6 43975\nbmFkZW4= 43976\nIG9ic3RydWN0 43977\nIEVtbXk= 43978\nsKU= 43979\nIHRyb3Bo 43980\nIHRha2Vhd2F5cw== 43981\nKy4= 43982\ndHljem5pZQ== 43983\naMOpc2l0ZXo= 43984\nIHBvZMOtYQ== 43985\nIOyjvOuKlA== 43986\nIGNpdGF0aW9u 43987\nIEFxdWE= 43988\nIGRlYnVnZ2luZw== 43989\n0LLQsNC9 43990\nIOuLueyLoA== 43991\nINin2YTZig== 43992\nIGluc3RhbnRhbmVvdXM= 43993\nIEF1dHVtbg== 43994\nIGtlcGFkYQ== 43995\nIGdldGFu 43996\naGluaQ== 43997\neW50aGVzaXM= 43998\nINC/0LXRgNC4 43999\nIE1hY2Vk 44000\nUGFj 44001\ndW50dQ== 44002\nQnJh 44003\nINCz0L7RgNCw0LfQtNC+ 44004\nIDE5NTk= 44005\nINGC0LXQvNC/0LXRgA== 44006\nIHNhbmU= 44007\nIE9VUg== 44008\nYXN1 44009\nIOustOyX 44010\nIHZhbGxleXM= 44011\nIGxpc3Rpbmdz 44012\nIHByemVkc3Rhdw== 44013\nIGd1bW15 44014\nIGNvcnRpc29s 44015\nIE9icmln 44016\nIEFsbGllZA== 44017\n0L7QttGD 44018\nIGfDqW7DqXI= 44019\nIGRvY3M= 44020\nIENoaWxp 44021\nIEFiZHVsbGFo 44022\nS2l0 44023\nIGNvbnRyaWJ1dG9ycw== 44024\n0LPQvtGA 44025\n0LvQtdGA 44026\nIGJpbmRlcg== 44027\nIG1vZMOobGU= 44028\n7YWQ 44029\nIGludGVpcm8= 44030\nbWlz 44031\nZmVyYQ== 44032\n2KfYsA== 44033\nTWFuaWE= 44034\nIO2ZnOuPmQ== 44035\nIOu0kOyalA== 44036\nIEpheg== 44037\n0ZbQu9GM0LrQuA== 44038\ncmlzaG5h 44039\nIOq1sA== 44040\nIHRhbWFuaG8= 44041\nIGFwcGxpYW5jZQ== 44042\nIFJlc2lzdGFuY2U= 44043\nIExPT0s= 44044\nIEh5cA== 44045\nIEhlaWw= 44046\nRmlyZQ== 44047\ndWp1 44048\nIGhlYWxz 44049\nIG1hbHQ= 44050\nIFZFUlk= 44051\nINGF0L7Rh9C10YjRjA== 44052\nIGxpbmdlcg== 44053\nIE5hcnI= 44054\nIFJlZ3VsYXI= 44055\nIExvb3A= 44056\nIExlbm8= 44057\nIHNvcnRpZQ== 44058\nIFNlcnZl 44059\nIOydtQ== 44060\nIEx1ZWdv 44061\naXR0w6Q= 44062\nIHVuZGVz 44063\nIHNsaXBwZXJz 44064\nIG9uZGE= 44065\nIMSQw6J5 44066\nIHRhcGVk 44067\nIHRyYXZlcnNl 44068\nIHJlbGF0aXZpdHk= 44069\nIFlvc2hp 44070\nY2pvbg== 44071\naWxhdGVk 44072\nYWN0aXZlbHk= 44073\nINCh0L7Qsg== 44074\nIFBPTA== 44075\n0KDQmA== 44076\naW5mbGFtbQ== 44077\nY2hlZXJmdWw= 44078\nINee15DX 44079\nID4+Ww== 44080\nbWluc3Rlcg== 44081\nINCy0LvQuA== 44082\nIGlkZW50aWZpZXI= 44083\nIExhbWJkYQ== 44084\nIHRyb3M= 44085\nIGZsYXdsZXNz 44086\nIGRldHJpbWVudGFs 44087\nIGJ1bmxhcsSx 44088\nV2Fy 44089\nIHJlZ2nDo28= 44090\nIEJpa2U= 44091\nY2Vzc29ycw== 44092\nIGPDuW5n 44093\nIFJO 44094\nIOq9gw== 44095\nIGvDvMOnw7xr 44096\nIEJlZ2lubmluZw== 44097\n7Zi46w== 44098\nIGdld2U= 44099\nIGRlbm90ZQ== 44100\nIEFsYmVydG8= 44101\nIHByb2Jpb3Q= 44102\nIG9kZQ== 44103\nIG1vbGFy 44104\nIGJ1cnN0aW5n 44105\nYXNzdW1lZA== 44106\nIGZvb3RwcmludHM= 44107\ndmVkYQ== 44108\nIHN0ZXJvaWRz 44109\nIGZsYW1pbmc= 44110\nIEVsbGVy 44111\nIGVya2VubmVu 44112\nw6R0emVu 44113\nIGxpZmVjeWNsZQ== 44114\nIERPVQ== 44115\nIEthcmVuYQ== 44116\nIEd1ZXJyYQ== 44117\nIHNpbmlzdGVy 44118\nIHBvZMOpaXM= 44119\nIHBhcmFi 44120\nIG9rbw== 44121\nIG1hdMOpcmk= 44122\nIGNhcmlj 44123\nc29uYXJv 44124\nIHByYXRpY2FtZW50ZQ== 44125\n0YPRgdCw 44126\nIGNvbXVucXVl 44127\nIHZpZ2lsYW50 44128\nIHJlZ2ltZXM= 44129\nIFNob290aW5n 44130\nIHJhaWRz 44131\nIE5vcmE= 44132\nIFdpZWRlcg== 44133\nbWVucw== 44134\nINGB0L7QtA== 44135\nIOqyveyasOyXkOuKlA== 44136\nINCy0YXQvtC0 44137\nIGF1dG9iaQ== 44138\nIFNjaG4= 44139\nIFJvYmJpZQ== 44140\nIEZpdG5lc3M= 44141\nINC60L7QvdGE 44142\nIHBlbmd1aW4= 44143\n0LzQvtGC0YDRjw== 44144\nINC80LjQvdC40Lw= 44145\ncGxheXM= 44146\nIGRlbGVnYXRlcw== 44147\nTWVy 44148\nIHNpc3RlbQ== 44149\nIE1pY2hhZWxz 44150\nbWFsZQ== 44151\n2KfYuQ== 44152\nIGPDoWNo 44153\nIEjDpA== 44154\nINeZ15XXk9ei 44155\nIHN1cGVycG93ZXI= 44156\nIHN0cm9u 44157\nIHJvdmVy 44158\nIGTDqXBlbmQ= 44159\nIHJldGlyaW5n 44160\nIHZhbXBpcmVz 44161\nIG1lcmRl 44162\nIENoYW5naW5n 44163\nIHRhbWU= 44164\nIHNwb2tlc3BlcnNvbg== 44165\nIGNheQ== 44166\nIGZsaXJ0aW5n 44167\nIEdyw7Y= 44168\nIHfDpHI= 44169\nIHd5Yg== 44170\nIGNvZXVy 44171\n4bqhbmg= 44172\nIOyZgOyEnA== 44173\nIGNvbm5haXM= 44174\nIEh1bmRyZWRz 44175\nIEJlYQ== 44176\nIM6xz4A= 44177\ncHJ1Y2g= 44178\nIHNvY2llZGFkZQ== 44179\nIFdoaWxzdA== 44180\nIEthaXQ= 44181\nZXNwYWNl 44182\nIGNoaWE= 44183\nIEVybQ== 44184\nIOuwlOq/ 44185\nIGZlbmNlcw== 44186\nIE1vcnRhbA== 44187\n6rKB 44188\nINCz0YDQsNGE 44189\nIEhvbWVsYW5k 44190\nIEpVTg== 44191\naXNzdA== 44192\nIHBhcmxhcg== 44193\nIHNwb3J0eQ== 44194\nw6lv 44195\nIGRlZXBlbg== 44196\nIEJlaGF2aW9y 44197\nIGVycmFuZA== 44198\nIHJvdGFyeQ== 44199\nIFdlbGxpbmd0b24= 44200\nV2luZA== 44201\nIG1lc2VsYQ== 44202\n4bqjbmc= 44203\naWVuZGU= 44204\nIGV4Y2VsbA== 44205\nIEdlbml1cw== 44206\nIEVkdWFyZG8= 44207\nIMWfdW51 44208\nIMSwc3RhbmJ1bA== 44209\nIHByb2R1dG8= 44210\nIOOFjuOFjg== 44211\nT0ZG 44212\nIHdvbGx0 44213\nIOuJtOyKpA== 44214\nIGxhc3M= 44215\nIGhlcnR6 44216\nIGFyb21hdGlj 44217\nINC30LLQvtC9 44218\nIGF1dG9j 44219\nIEx1c3Q= 44220\nIDExMg== 44221\nIM6X 44222\nIHJldmlld2Vycw== 44223\nIHJlY2VwdGl2ZQ== 44224\nw6JuZA== 44225\nb2dsbw== 44226\nIOyVhOuLmQ== 44227\nIG5nbw== 44228\n0ZbRgtC4 44229\nw6V0 44230\nY29ubw== 44231\nIHRla3Jhcg== 44232\nIOyjvOqzoA== 44233\nIGdlbG1pxZ8= 44234\nIGJlZHRpbWU= 44235\nIEFyZ2g= 44236\nQURB 44237\nINCz0L7RgNC+0LTQsA== 44238\nIMSH 44239\nIGFsbGlhbmNlcw== 44240\nZ2lnZ2xpbmc= 44241\nIHllcmRl 44242\nIHNwaWVz 44243\nIGd1dGVz 44244\nw6dp 44245\nIGFsbHRpZA== 44246\nIExhaA== 44247\nnpDr 44248\nIGRva8WCYWQ= 44249\n2YjZig== 44250\nIHRveGljaXR5 44251\nIGNhbmNlbGxhdGlvbg== 44252\nIDE5NTg= 44253\nZHJv 44254\nIOyekeydgA== 44255\nIE1vdG9yb2xh 44256\nIG11bHRpbg== 44257\nIGVudGh1c2lhc3Rz 44258\nIE1pZ2h0eQ== 44259\nIENvY29udXQ= 44260\nOuOAjA== 44261\nIFBpY3R1cmVz 44262\nIHNhbmdyZQ== 44263\nIGJsaW5raW5n 44264\nb2xlc29tZQ== 44265\nIOyKpO2DgOydvA== 44266\nRlA= 44267\nIGJvb21pbmc= 44268\nINC00LXRgdGP0YI= 44269\nIHJhdGNoZXQ= 44270\nIHRpbWVsaW5lcw== 44271\nbGVuZXNz 44272\nIGNhZ2Vz 44273\nIEdvb2RuaWdodA== 44274\nb21ldGltZXM= 44275\nIGN1bm5pbmc= 44276\nIFJpc2s= 44277\ndWxlZA== 44278\nZGFkZQ== 44279\nIHByYXRh 44280\nIGd1c3RhcsOtYQ== 44281\nYW11cw== 44282\nIEppbnBpbmc= 44283\nIGVzdHJ1dA== 44284\nIGRlc2NvYnJpcg== 44285\nIE3EgQ== 44286\nIEFsbGFu 44287\nINec16c= 44288\nIHByZXNlcnY= 44289\nIFN0cmF3YmVycnk= 44290\nxI8= 44291\nTHU= 44292\nIGtybw== 44293\nIFJlcG9ydHM= 44294\n7IWU7JW8 44295\nIHZhbHQ= 44296\nIHBvdXZhaXQ= 44297\nIGFwcGFy 44298\nIEJvbmU= 44299\nIHByZWZlcmFibHk= 44300\nIFJlcMO6YmxpY2E= 44301\nIGhlcnpsaWNo 44302\nIGNoaW1uZXk= 44303\nIMOnZXY= 44304\nIHZpc2Fz 44305\nIHZlcnI= 44306\nIGN1bHRpdmF0aW9u 44307\nIEFybWVuaWE= 44308\nINCy0LTRgNGD0LM= 44309\nIGNvY2tybw== 44310\ncmV0Y2hlZA== 44311\nYXJ0eg== 44312\nINC70Y7QtNGP0Lw= 44313\nIHBvbMOtdGljYXM= 44314\nIFBhbno= 44315\nIEFLQQ== 44316\nIOuIjOufrA== 44317\nIGVycm8= 44318\nIGNhbXBlcg== 44319\nIDEwMg== 44320\n4KS4 44321\nZG9uZQ== 44322\nIGhvYXJk 44323\nINCf0L7RgtC+0Lw= 44324\namVvbmc= 44325\nIGRlc3Rh 44326\ncGFr 44327\nIGluaW0= 44328\nIGdyb3dlcnM= 44329\nIE1lc3NhZ2U= 44330\nIGVsZWN0b3I= 44331\nZW5nYWdl 44332\nIEZvcmJlcw== 44333\nIENpbmNpbm5hdGk= 44334\nIGRpZmbDqXJlbmNl 44335\nZGY= 44336\nIHNwYXI= 44337\nIGF3YWl0cw== 44338\nIFVTU1I= 44339\nIFJpc2luZw== 44340\nIEhvxZ8= 44341\nIGZvb3Rpbmc= 44342\nIGNvbmRpY2lvbmVz 44343\n0YLQvtGA0L7Qsg== 44344\nIGNsaW5pY2lhbg== 44345\nIERpc2t1c3M= 44346\n16jXkg== 44347\n16U= 44348\naXRlaXQ= 44349\nZ3Jlbg== 44350\nIGNoYXJpc21h 44351\nIGxldWtl 44352\nIGlycml0YXRpbmc= 44353\nIGNpcmNh 44354\nIFJob2Rlcw== 44355\nIHBpb3I= 44356\nIGhhbmRpY2Fw 44357\ncm95YWJsZQ== 44358\nIHZ1bGw= 44359\nT0c= 44360\nIGluw61jaW8= 44361\naWVyaQ== 44362\nIHNwbGFzaGluZw== 44363\nIGRlbWlzZQ== 44364\nIGFzc2lzdGly 44365\n0YfRgtC+ 44366\nIGNvdmVydA== 44367\nIEd1ZA== 44368\n4LiJ 44369\na2zDpHI= 44370\nIOyekOq+uA== 44371\nIHZlcsOkbmRlcnQ= 44372\nIFJFTQ== 44373\nIENvbnZlbg== 44374\nYXRnZQ== 44375\nIHBpZXJ3c3pl 44376\nIGNsZXJneQ== 44377\nbGluZ3Rvbg== 44378\nbGl2 44379\nVlBO 44380\nINGB0L7QttCw0Ls= 44381\nIEhhdGU= 44382\nz4bOvw== 44383\nIFJlc3BvbnM= 44384\n0L7Qt9C0 44385\nIGV0bWVr 44386\nIGNoZW1pbg== 44387\n2YXYqQ== 44388\nIOqwgOyhsQ== 44389\nVHJl 44390\nIHVtYXM= 44391\nIEJ1cnRvbg== 44392\nIHBhdHJpYXJjaA== 44393\nIFNtaXRoc29uaWFu 44394\npZg= 44395\nTW9vbg== 44396\nQWly 44397\nIG1lZGlvcw== 44398\nIGVyYXNlcg== 44399\nIHdvbGx0ZW4= 44400\nIHBhcmVpbA== 44401\nIEJpbGxpZQ== 44402\n0LXRgNGC0LI= 44403\nIHBhcmxhbWVudA== 44404\nIGFnb255 44405\nIFFVRQ== 44406\nc2VxdWVudGx5 44407\nQW5vdGhlcg== 44408\nIFdoZXc= 44409\nIEFubnVhbA== 44410\nIHNlYmVu 44411\n7IOB7J2E 44412\ndmFsdWVz 44413\nnpzrp4w= 44414\nIHNpbm9u 44415\nZXJlYWw= 44416\nIEVubGlnaHQ= 44417\nIENoZW1pc3RyeQ== 44418\nIENhdGFsdW55YQ== 44419\nIGRvY3Ry 44420\nYW50b24= 44421\nIHN0dWs= 44422\nIFBsYXRl 44423\nIEthcmRhc2hpYW4= 44424\nIGZpbG9z 44425\nIFdldA== 44426\nINC/0L7Qv9GL0YI= 44427\nIHVua25vd25z 44428\nIFNjaG9u 44429\nIEJhbGR3aW4= 44430\nIHRlbGVzY29wZXM= 44431\nIEd1Y2Np 44432\nb3hpZGU= 44433\nIENvbnNlcnZhdGl2ZQ== 44434\n7ISx7J2E 44435\nIGhpbmF1cw== 44436\nUG93ZXI= 44437\nIOqxtOqwlQ== 44438\nIHByZXZhaWw= 44439\nb3JtYW4= 44440\nbWFjaGluZQ== 44441\nIDE5NDY= 44442\nIHVuYmVs 44443\nIHNjaGF1dA== 44444\nIHBpZWw= 44445\nZWVudGg= 44446\nIG9iamVjdGl2ZWx5 44447\nIGNoYWtyYQ== 44448\nYXVkaW8= 44449\nIGNoaWNvcw== 44450\nIFZhdWx0 44451\nIG1lZGljaW5hbA== 44452\nIFRhaWw= 44453\nV2hpbGU= 44454\nIGFzcGhhbHQ= 44455\nIGZyb3pl 44456\nIEVL 44457\ndW5jaGluZw== 44458\nbm9zaXM= 44459\nMjAxNQ== 44460\nIEdyaQ== 44461\nIG9kZGx5 44462\nIE3DpHI= 44463\nIEFlZw== 44464\nY29sbw== 44465\nUGFy 44466\nIOuTpOyWtOs= 44467\nIHZpbmRlbg== 44468\nIE9WRVI= 44469\nIGljZWQ= 44470\nIHNjb3Jw 44471\nIGhhYw== 44472\ncXVhbGlmaWVk 44473\nINGD0LLQuNC00LXRgtGM 44474\nZXJtbw== 44475\nSEVO 44476\nIHNvaQ== 44477\nIG11bHRpcGxlcw== 44478\nIGxheW91dHM= 44479\nIGJsaW5kbmVzcw== 44480\nIEJvd3Nlcg== 44481\nINC/0L7QtNGC 44482\nIMOO 44483\ndmVudGlvbmFs 44484\nIG1hdGE= 44485\nbWFkxLE= 44486\nIGdlZXo= 44487\nIGNhZGVuY2U= 44488\nIHdhxbxuZQ== 44489\nIENocmlzdGll 44490\ndmVuZ2U= 44491\nQ2FsbA== 44492\nIHR1cm5hcm91bmQ= 44493\nIGJsb2I= 44494\nINCv0Lo= 44495\nIFZvaWNlb3Zlcg== 44496\nIHBlcmls 44497\nIEphaW1l 44498\nIEhPWQ== 44499\nbGFuZQ== 44500\nIHNlYmVs 44501\nIER1bw== 44502\nIEhpc3RvcmljYWw= 44503\nIGRuaQ== 44504\nIGdlbWE= 44505\neWs= 44506\nIHNhYmVt 44507\n4bqvbmc= 44508\nIHZhcnM= 44509\nIFJvbm5pZQ== 44510\nIFJvbmFsZG8= 44511\nIFBlcnF1w6g= 44512\nbnNpbm4= 44513\naGFpcg== 44514\nIHJlbGVudGxlc3M= 44515\nIGx5bg== 44516\nIHRyYXZlbGVy 44517\nbmluZQ== 44518\nIGFudGlt 44519\nIOy8gA== 44520\nIHNub3diYWxs 44521\nINGF0LDRgNCw0LrRgtC10YA= 44522\nIGludGVybnM= 44523\nIGNvbnN0aXR1ZW5jeQ== 44524\nINCd0LDQvA== 44525\n15zXnA== 44526\nVkVM 44527\nIHZpa3RpZ3Q= 44528\nIGFwb3lv 44529\n2YTYqA== 44530\nIGphcmQ= 44531\nIGhlaWdodGVuZWQ= 44532\n0YDQvtGB0YI= 44533\nIFNNSVRI 44534\nINC00LXQu9Cw 44535\nIHJlcGFpcmluZw== 44536\nIHJpZ3Q= 44537\nIFNoZWlraA== 44538\nIEJyaXRuZXk= 44539\nIGV2ZXJ5dGltZQ== 44540\nIGFkdmVudHVyb3Vz 44541\nb2NrZXk= 44542\nZXJudA== 44543\nIGF0YXF1ZQ== 44544\nIEFsdGVybmF0aXZlbHk= 44545\nZWZmZWN0 44546\nIHBhbGF2cmFz 44547\nIEVsbGlvdHQ= 44548\nIHLDqXVzc2k= 44549\nIGh5cGVydGVuc2lvbg== 44550\nIE1hbnVhbA== 44551\nIHByb3BoZXRpYw== 44552\nIGhhbmRj 44553\n0YzQtQ== 44554\nIHJlZnJhaW4= 44555\nIFNxdWlk 44556\n7J6h 44557\nINC60L7QvNCw0L0= 44558\nw6RsbGVu 44559\nIGxsZWfDsw== 44560\nIGJhc2g= 44561\naW9ueQ== 44562\nINGB0LrQu9Cw0LQ= 44563\nINC60LDQsQ== 44564\nIGNhcmVsZXNz 44565\nIFBvb2w= 44566\nIHRyw6Fz 44567\nIGZpbHM= 44568\nIFNjaHI= 44569\nIHNwcmF3ZA== 44570\nIE1vbmF0ZW4= 44571\nIHVuZm9yZ2V0dGFibGU= 44572\nIENvdHRvbg== 44573\nIGluY29udmVuaWVudA== 44574\nIFJY 44575\nb3Jpcw== 44576\nIGh1bWJsZWQ= 44577\n16rXlw== 44578\nINii2b4= 44579\nIGluY3Jlw60= 44580\nIEtvbW1lbnRhcmU= 44581\ncmFjacOzbg== 44582\nIHZhbnRhZ2U= 44583\nIFNlYWw= 44584\nIOydtOqxsOulvA== 44585\nIGpvdWU= 44586\nIOyYpOuemA== 44587\nINC40YHQv9GL0YI= 44588\nb2Jlbg== 44589\nIGdyYXRl 44590\nIGNvbnRyb2xl 44591\nIFBlcmN5 44592\nxYJhZGE= 44593\nIHNpbXVsdGFuZW91cw== 44594\nIHByb3RvdHk= 44595\nIGdyb8OfZXI= 44596\nIGJld3Vzc3Q= 44597\naW5pemk= 44598\nIHBhc3NpZXJlbg== 44599\nIEhhcHBpbmVzcw== 44600\nc2hp 44601\nZ2VodA== 44602\nIHN0YXRpb25lZA== 44603\nIEVyZ2Vibmlz 44604\nIGRpcmVjdGFtZW50ZQ== 44605\nIHN1cnZpdmVz 44606\nIHBlcnNvbmVz 44607\nQkVSRw== 44608\nIHZvbWl0aW5n 44609\nIGNvbmhlY2Vy 44610\nIGFkam91cg== 44611\nIENpdmlj 44612\ncGVp 44613\nYnVyc3Q= 44614\nIOuLpOuLiA== 44615\n6Y8= 44616\nIHNsZWQ= 44617\nIHBsYXRhZm9ybWE= 44618\nIFNlY3Q= 44619\nIERlZmlu 44620\nw6lub20= 44621\nY2huZXQ= 44622\nIHByb2ZpdGFiaWxpdHk= 44623\nIGVycmVpY2h0 44624\n4buPaQ== 44625\nY2F0aW9u 44626\nIOyngOq4 44627\nIHBlcmRyZQ== 44628\nIGZlbG9ueQ== 44629\nIDE5NTc= 44630\nIHVuc3VjY2Vzc2Z1bA== 44631\nIG5hZ3lvbg== 44632\nIGVsYXN0aWNpdHk= 44633\nIGZhY2FkZQ== 44634\nIGVhcnRobHk= 44635\nINCw0LzQtdGA0LjQutCw0L0= 44636\nIGNvbm4= 44637\nY2xh 44638\nRHU= 44639\nIHBvbGl0aXF1ZXM= 44640\nIGhhbG8= 44641\naWFudGVz 44642\nINC80L7QtdC5 44643\ndG9uZXM= 44644\nZWxpZXI= 44645\naHRha2luZw== 44646\nIHdpY2h0aWdl 44647\nIGFubm8= 44648\nIExvaw== 44649\naWxsaW9ucw== 44650\nIHZpdmVy 44651\nIHNvbGNoZW4= 44652\nIHN1Zg== 44653\nIFNhbHo= 44654\nIE52aWRpYQ== 44655\nenVnZQ== 44656\nIFNwaWtl 44657\nVmlkZW8= 44658\nIHR3b3I= 44659\nIEFsYQ== 44660\nIGhhbnlh 44661\nIEFkbQ== 44662\n7J21 44663\nIFBhdGllbnRlbg== 44664\nIE9uaW9u 44665\nIEtvYmU= 44666\nIFNjZW5l 44667\nIFJhc2g= 44668\n0YDQsNGB0YI= 44669\naXN0YW5p 44670\nR2VuZXJhbA== 44671\nbGV5ZQ== 44672\naW1iYXA= 44673\nIGNvbmNlYWxlZA== 44674\nIEZyaWRheXM= 44675\nIFdvb2w= 44676\nINC90L7QstGL0YU= 44677\n2LTYsQ== 44678\nIOqysOqzvA== 44679\nIGplZG9jaA== 44680\ntOyLnA== 44681\nk6Trj4Q= 44682\nIOyepeuCnA== 44683\ndWt0 44684\nTG91 44685\nIOuoueyWtA== 44686\nIEV4cGVjdA== 44687\nINC00L7QvNC+0Lk= 44688\nIGlycmVzcG9uc2libGU= 44689\nIGFjZXJjYQ== 44690\nIFp1c3Q= 44691\n16jXmA== 44692\nVUk= 44693\nIHlvdXR1YmVycw== 44694\nIFBvc2l0aXZl 44695\nIHNvY2lvZQ== 44696\nIHNuYXRjaA== 44697\nIHJlZnJlc2hlZA== 44698\nIG5vbWluYXRpb25z 44699\nIFBhdHQ= 44700\nIG9ic29sZXRl 44701\nIGRlbWnFnw== 44702\nb3JtdcWf 44703\nIOyGlOynge2eiA== 44704\nIGZsYQ== 44705\nIGNyYXppZXN0 44706\nIFppZQ== 44707\nIFTDug== 44708\nemVw 44709\naWNlbQ== 44710\nIOupi+yeiA== 44711\nIGN5bmljYWw= 44712\nIHRyZXNw 44713\nIGNyYXo= 44714\n1aXV 44715\nIG5lbGxl 44716\nIG1waA== 44717\nIE5lcmVk 44718\nIEtvYg== 44719\nIEVjaw== 44720\nqLjri4g= 44721\nSmFu 44722\nINCi0L7Qs9C00LA= 44723\nIGRlY2k= 44724\nIFZvZw== 44725\nIGJ1YmJsaW5n 44726\nw7ph 44727\nIHByb2R1Y3Rvcw== 44728\naWJlcmFs 44729\nIHJlcGxpY2F0ZWQ= 44730\nIEltcHJvdmU= 44731\naWxsYXJ5 44732\nQ2hh 44733\nIHLDqWR1 44734\ng5DtlZjrqbQ= 44735\nIGNvbm5vdA== 44736\nIEtyaXQ= 44737\nINC00YPRhdC+0LI= 44738\nIHRyZWFkbWlsbA== 44739\nIFBX 44740\nINC30L7QstGD0YI= 44741\nIGNsYW1z 44742\nIGRyYWZ0aW5n 44743\nIDE5NTY= 44744\ndW50YQ== 44745\nIGV4cGVuZGl0dXJlcw== 44746\nIEhvb3Zlcg== 44747\nV09P 44748\n0YjQtdC1 44749\nIGRlZHVjdGlvbg== 44750\nbW9uYXJ5 44751\nIHJlY2li 44752\nIHBvdm8= 44753\nIOuNlOs= 44754\nIFBBTA== 44755\nIEJsb3c= 44756\nIHd5cA== 44757\nIGRlc3RhYw== 44758\nZGVhbA== 44759\nR3JhZW1l 44760\nIG7DqWNlc3NhaXJl 44761\nIGRhbW5lZA== 44762\nIDE5Mzg= 44763\nIOyLpOygnOuhnA== 44764\nIHRyb29w 44765\nIGluc2lnaHRmdWw= 44766\nIFRK 44767\nINC+0YHQsg== 44768\nIGZpZGVsaXR5 44769\nIFNraXA= 44770\nIE1heW8= 44771\n66ed 44772\nYXBwZQ== 44773\nIGJsYXM= 44774\nIFdZ 44775\nIEdO 44776\nY3Rhcg== 44777\nU3U= 44778\nIGN1ZW50 44779\naGV3cw== 44780\nIGNvcnBzZXM= 44781\nQWJz 44782\nIHdhc3Rld2F0ZXI= 44783\nIGNpZWs= 44784\nIE9udQ== 44785\nIGV4cGxvc2l2ZXM= 44786\nIGFybWE= 44787\nIFNURVBIQU4= 44788\ncG9saXRpaw== 44789\nIE9zYWth 44790\ndGHFgg== 44791\nIHlhcMSxeW9y 44792\nIGl6cXVpZXI= 44793\nIGJlbGV6YQ== 44794\nIFd5YXR0 44795\nIHN1aw== 44796\nIHNwZWNqYWw= 44797\nIGRhbmtl 44798\nd2hpc3RsZQ== 44799\nIGbDrXNpY2E= 44800\nIEhhcnJpZXQ= 44801\nIOyVhO2MjA== 44802\nIHdpbGxrb21tZW4= 44803\naXBpbmc= 44804\nINGB0LzQvtGC0YDQuNGC0LU= 44805\nINC80L7QttC10YjRjA== 44806\nIGluYWNjdXJhdGU= 44807\nIGFycm9nYW5jZQ== 44808\nIFJlbW8= 44809\nzrPOrA== 44810\nYXNzZWQ= 44811\nIGRlbGl2ZXJpZXM= 44812\nIHN0aW5reQ== 44813\nINC/0LXRgNC10LY= 44814\namF5 44815\nIHRyYW5zaXRpb25hbA== 44816\nIHJlcmU= 44817\nIE5HT3M= 44818\nIEFUTQ== 44819\n2K7Yqg== 44820\naW9sb2d5 44821\nINCy0LvQsNC0 44822\nIHNjaG1l 44823\nIFNoaW5l 44824\n7JWh 44825\ncGFudHM= 44826\nIHNlcmdl 44827\nIHNlbmhvcg== 44828\nIGFiZHVjdA== 44829\nIEJyeWFudA== 44830\nVkVT 44831\nIGF3YWtlbmVk 44832\nIExheg== 44833\ncm9wb2xpcw== 44834\nIExhbw== 44835\nIHZpbGxh 44836\nIHN1bW1lcnM= 44837\nIGVudGhhbA== 44838\nIDE5NDk= 44839\nVmlh 44840\nIOyWtOyo 44841\nIHRlbmRvbg== 44842\nIHZpb2xldA== 44843\nIGludGVsbGVjdHVhbGx5 44844\nIGJvdW5jZWQ= 44845\nYXJhdXM= 44846\nIDE5MTk= 44847\nIHZyYWFn 44848\nIHNwZWw= 44849\nIFNjaHdhcg== 44850\nU2NvdHQ= 44851\nIEluZG8= 44852\nIOunnQ== 44853\nIGNhbm9uaWNhbA== 44854\nIElLRQ== 44855\nIHRoYXTDrXM= 44856\nIG1lbGxhbg== 44857\naWdtYXQ= 44858\nQ291bGQ= 44859\nLi4uPyk= 44860\nIGZvYXJ0ZQ== 44861\nIEt1bWFy 44862\ncmVuZG8= 44863\nIMOpbMOp 44864\n4LQ= 44865\ndmFsdWF0aW9u 44866\nY2FzZXM= 44867\nIGludHVpdGl2ZWx5 44868\naG9uZw== 44869\nZXR0ZWQ= 44870\nIHNvdXZlbg== 44871\nIG1vcmI= 44872\nIGNvcnM= 44873\nIE5W 44874\nIEhhc2Fu 44875\naWV2ZWQ= 44876\nIOyngOq4iOydgA== 44877\nIGR1bXBsaW5n 44878\nIGNvbnRyw7RsZQ== 44879\nIGFtYmlndWl0eQ== 44880\nIGNvZw== 44881\nIFNjcmlwdHVyZXM= 44882\nIGNhaQ== 44883\nIGJldmVy 44884\nIGh1aXM= 44885\nIGFpbWU= 44886\nIGVya2zDpHJlbg== 44887\nIExN 44888\nIEZleQ== 44889\n4K6x4K6k 44890\nIHN1cGVydmlzZWQ= 44891\nIGpld2U= 44892\nc3Bs 44893\nINGG0LXQvdGC0YA= 44894\nIGNvbGxpc2lvbnM= 44895\n2YTZgQ== 44896\nIEhvZ3dhcnRz 44897\nIER1cmhhbQ== 44898\n15XXow== 44899\nIHBob3NwaGF0ZQ== 44900\nIG92ZXJzZWU= 44901\nIGluc3BlY3Rpb25z 44902\nIGJyaW5j 44903\nIFphaw== 44904\nIHBheW9mZg== 44905\nIGNoYXVk 44906\nIEh1bmdlcg== 44907\nw6Nvcw== 44908\ndmly 44909\nIGZpYW5jZQ== 44910\nIGJvdWc= 44911\nbGl2ZWQ= 44912\nY3J5 44913\nIGpvaW50bHk= 44914\nIGdpcmxmcmllbmRz 44915\nIE5leHVz 44916\npqzqsqDsirXri4jri6Q= 44917\nIEt3YW5n 44918\nxYLEmQ== 44919\nIE5lZGVu 44920\naWVjZQ== 44921\nIGluc2VydGluZw== 44922\nIE11bW15 44923\nIEdsb2Jl 44924\nIGxlZQ== 44925\nIGdlcm1hbg== 44926\nIGNyZWFtcw== 44927\nYWNobw== 44928\nIGNoxrBh 44929\nIEdhbGlsZQ== 44930\nIGbDvHJz 44931\nIGVzdGl2ZXI= 44932\nY2lkb3M= 44933\nQ2hyaXN0aWFu 44934\nIGxvcnNxdQ== 44935\nIGN1dGVzdA== 44936\ndmFsZQ== 44937\nINC60YDQtdC/ 44938\nIHdhcnk= 44939\nIHNsaWNpbmc= 44940\nIGVzcGVyYW5kbw== 44941\nIFZhbmRlcg== 44942\nIERlaXhh 44943\nIDE5NTQ= 44944\nIG3Ds3dpxIU= 44945\n0ZbRlA== 44946\nIHRvb2xpbmc= 44947\nIHJlc3Rvcg== 44948\nIHBvc2ljacOzbg== 44949\nIGludGVudGFy 44950\nIEFwYWNoZQ== 44951\nT1VM 44952\nINmI2Kg= 44953\nIG1hdGnDqHJl 44954\nIGxpbmVu 44955\nIGVzdHJhdMOpZw== 44956\nIE11dHRh 44957\nIHBhcnRpbmc= 44958\nIG1pbmltaXppbmc= 44959\nIGFwcHJlbmRyZQ== 44960\nINCw0L3Qs9C70LjQuQ== 44961\nIERvbw== 44962\nIEZpcmVmb3g= 44963\nY8OzbW8= 44964\nIGdlb3BvbGl0 44965\nIG1ha2Fu 44966\nIG1vZ2VsaWpr 44967\nIM+AzrXPgc65 44968\nIGPhu6k= 44969\nIGluc3RhbGxlcg== 44970\nIGRpYnVq 44971\nIEhlYXRo 44972\nbG9vcA== 44973\nIEJyb2tlbg== 44974\nSFlVTg== 44975\nc2hlbGY= 44976\nIGZpemVy 44977\nIGVuaGFuY2Vz 44978\nINC00L7RgdGC0Lg= 44979\nIFBVQg== 44980\nIEtvbGxlZ2lu 44981\nIGF0dGFpbmVk 44982\nxL4= 44983\nIG1pc3RyZXNz 44984\nIE9mdGVudGltZXM= 44985\n157Xmded 44986\nIGJld2U= 44987\nIFNvcmE= 44988\ncmF1ZW4= 44989\nYmF1bQ== 44990\nIHJvbGxlcnM= 44991\nIG1lcmluZw== 44992\nIFBBQw== 44993\nINC90ZY= 44994\nIFLDqXB1YmxpcXVl 44995\nINGC0YDQsNCy 44996\nIFZhbmd1YXJk 44997\ndWNpb25lcw== 44998\nIOustOuMgA== 44999\nIGdvdXI= 45000\nr6Q= 45001\nIM+J 45002\nIHNhdW5h 45003\nIHBlaW5l 45004\nIFZhbGVyaWU= 45005\nIFNpa2g= 45006\nZmVuZGltaXo= 45007\nYmVybw== 45008\nINGH0Lg= 45009\nIGRvxZt3aWFk 45010\nIEV1cm9z 45011\nIGNvbW1lbnRhaXJlcw== 45012\nIHR3ZWFrcw== 45013\nIEZhc3Rlcg== 45014\nINGA0LDRgdC6 45015\nIHByb2dyZXNzaXZlbHk= 45016\nIEV1Y2g= 45017\nYm9ybw== 45018\nIEluZ3JlZA== 45019\nQ2Fw 45020\nIHVuY2hlY2s= 45021\nIOyYpOuluA== 45022\nIHdyZQ== 45023\nIEZU 45024\nw7ZydW5n 45025\nIG1lbW9yaXplZA== 45026\nIERpbm5lcg== 45027\nIFBoZXc= 45028\nb3VibA== 45029\nIHB1dGE= 45030\nIGFkbWl0cw== 45031\n0LXQt9C00LU= 45032\nb3BvZA== 45033\nIHBhbmRh 45034\nIGhpbmdlcw== 45035\nY2lwZQ== 45036\nIHRyYW5zYWN0 45037\nIHBvZGlh 45038\nIHBpY3M= 45039\nIGNyaXRlcmlvbg== 45040\nIE9yY2hlc3RyYQ== 45041\nIEJsb2c= 45042\nIHNvbGVtbg== 45043\nIFBpeGFy 45044\nVGhyZWU= 45045\nINCy0L3QuNC3 45046\nIFZvbHVudGU= 45047\nIFNhdmFnZQ== 45048\nIFBWQw== 45049\nIENhZg== 45050\nIHd5a29u 45051\nIGdyYWRlcnM= 45052\nIGNyb3VjaA== 45053\nIGNsaWNoZQ== 45054\nIHNveWJlYW5z 45055\nIE1VUg== 45056\nIEdvbnphbGV6 45057\nIE1pbWk= 45058\nIEJvbHNvbmFybw== 45059\nIGRpYXBocmFn 45060\nIGJpbGFuZw== 45061\n65CY64qU 45062\nIHJlZ3VsYXRpbmc= 45063\nTWM= 45064\nSnVkZ2U= 45065\nINC90L7Qtg== 45066\nIGpha8SF 45067\naXRlc3Nl 45068\nIFdpag== 45069\nIGxhdGE= 45070\nZ3JvYW5pbmc= 45071\nUE9TSU5H 45072\nINeQ15XXqteV 45073\nIGhhZ2E= 45074\nIGdyb3VuZGluZw== 45075\nIHZpb2xlbnRseQ== 45076\nIHRpbGxz 45077\nIGVuZ2Fn 45078\nIEhvbGxvdw== 45079\nINC/0L7Qv9GD0LvRj9GA 45080\nIHdwcm93YWQ= 45081\nIHJlcGxhY2Vz 45082\nIGZsdW9yZXNjZW50 45083\ndXJnaWNhbA== 45084\naWdnbHk= 45085\nIFRyYWRpdGlvbmFs 45086\ndHRl 45087\nINmE2Yc= 45088\nIHBob3NwaG9ydXM= 45089\nIGFwcm9u 45090\nIFdhdGVycw== 45091\nIEt1bHR1cg== 45092\n0LDQstCw0Lk= 45093\nIG9saXZlcw== 45094\nINeU15DXnA== 45095\nIHRlaWx3ZWlzZQ== 45096\nIHNlbmNpbGw= 45097\nIHByZW5kcw== 45098\nIG5hcnJvd2Vy 45099\nIGrDpHR0ZQ== 45100\nIEluZm9ybWF0aW9uZW4= 45101\n7IOB7J20 45102\nIHN0YXJ2ZQ== 45103\nIGZyaWNr 45104\nIEJld2Vn 45105\n4KSy 45106\nIGRvbHBoaW4= 45107\nIExBVUdIVEVS 45108\nIElOVEVSVklF 45109\nIHlhbmzEscWf 45110\nIHRvcnBlZG8= 45111\nIHNob3J0YWdlcw== 45112\n7J2065Oc 45113\nxLFsZMSx 45114\nIHBhd3M= 45115\nIG96b25l 45116\nIGN1bHRpdmF0ZWQ= 45117\nIEZvdA== 45118\nIG5vdG9y 45119\n0L3QvtC3 45120\nINC60L7RiA== 45121\nIHRvdWNoc2NyZWVu 45122\nIEFsbHk= 45123\nIOunm+yeiOyWtOyalA== 45124\nINCh0LXRgA== 45125\nINCy0L/QvtC70L3QtQ== 45126\nIHBhcHJpa2E= 45127\nIER1c3Rpbg== 45128\nIGVmZWN0bw== 45129\nIG9waW5p 45130\nIG11dXQ= 45131\nIGjhu41j 45132\nIGludGVyamVjdA== 45133\nxJl0 45134\nIGJ1dHRz 45135\ndXJleg== 45136\nIFBpa2U= 45137\nIEhvaw== 45138\nIEd1aW5lYQ== 45139\nIENhdGhlZHJhbA== 45140\nIDE0MDA= 45141\nQ3Jh 45142\nKyw= 45143\n66eb 45144\ns7Trj4TroZ0= 45145\nYWJ5cmlu 45146\nIHZpZGVvZw== 45147\nINC+0YDRg9C2 45148\nIHXFvg== 45149\nIGJ1c2NhbmRv 45150\nIEFzc2lzdGFuY2U= 45151\nIG1lbGhvcmVz 45152\n7KG0 45153\nIOuBvA== 45154\nIFJK 45155\nINiq2YU= 45156\nIG9taW4= 45157\nIG1vdG9yY3ljbGVz 45158\nIFNhcHA= 45159\nIHN1cHBseWluZw== 45160\nIEFsZ3Vu 45161\nIGFlcm9zcGFjZQ== 45162\n16LXnA== 45163\nb2NjdXA= 45164\nbGVpc3Q= 45165\nIOqxsOuKlA== 45166\nIGNvbXBsZXRh 45167\nYnJlcw== 45168\nISg= 45169\nINCf0YDQtdC0 45170\nIGRpc2FkdmFudGFnZWQ= 45171\nIEF0dGVuZA== 45172\nIEp1ZGFo 45173\n4buLY2g= 45174\neWxlbmU= 45175\nYWN0bHk= 45176\nIHNldHVwcw== 45177\nIGFtbW9uaWE= 45178\nIFNjaHdlaXo= 45179\nIFNoYW1l 45180\nIGJhbmRl 45181\nIEZ1ZWw= 45182\nIHRyb3VibGVzb21l 45183\nIG51bWVybw== 45184\nIE1PTQ== 45185\nINC/0YDQtdC00LvQsNCz 45186\nbWVudGlvbmVk 45187\nINCx0L7Qu9GM0YjQvtC1 45188\nIFZpa3Rvcg== 45189\nIFN0eWxlcw== 45190\nIGNydWNpZmllZA== 45191\ncnVjdHVyZWQ= 45192\nZW52aXJvbg== 45193\nIG1vcmFscw== 45194\nIG1lZGl0YXRpbmc= 45195\nIGF4aWFs 45196\naXNhbmNl 45197\nIEFic3Q= 45198\nR3JlZW4= 45199\nIOqxtOw= 45200\nIHF1YWRyYW50 45201\nIHBlcmdp 45202\nIGNhbWVyYW1hbg== 45203\nIFNlcXU= 45204\nIHBhdXNlZA== 45205\nIExhdWdoaW5n 45206\n6reA 45207\nPy4u 45208\nIMW7ZQ== 45209\nIHBlcm1pdGly 45210\nIGRldGVjdG9ycw== 45211\nIEhVRA== 45212\nYXZhbA== 45213\nIOyXrOq4sOq5jOyngA== 45214\nIGh1YnM= 45215\nIGJlc3RpbW10 45216\nINCx0YPQtNC10YLQtQ== 45217\nSU5URVJQT1NJTkc= 45218\nIHRlbmdhbg== 45219\nIGNyYXZl 45220\nIEJ1bmRlc3JlZ2llcnVuZw== 45221\nIEJsb29keQ== 45222\nIHVzYWJpbGl0eQ== 45223\nIEVhcw== 45224\nIMSR4buZbmc= 45225\nIDE5NTU= 45226\nIGtyaWVnZW4= 45227\nIGhhYml0dWFs 45228\nIGVzc2VudGlhbHM= 45229\ncmltaW5hbA== 45230\nIHJvb21tYXRlcw== 45231\nINC/0LXRgNC10YXQvtC0 45232\nIG5naGk= 45233\nIG1lbmluZw== 45234\nIFN5bXBob255 45235\nIEh1Zw== 45236\nYWdnaQ== 45237\nIHdpZWQ= 45238\nIG1pdGFk 45239\ndGVlbnRo 45240\naWRhxIc= 45241\nU2F2ZQ== 45242\nIHJvYmnEhw== 45243\nIGJvdW5jZXM= 45244\nsJbsl5A= 45245\nc3RhcnM= 45246\nIHByYWdtYXRpYw== 45247\nIGNvZ25pdGlvbg== 45248\nIHdyYXBwZXI= 45249\nIHdhcnRlbg== 45250\nYWRo 45251\nIHBlbnNh 45252\nIEhlcnR6 45253\nIG7Emw== 45254\nIFJlaWQ= 45255\nIFBDcw== 45256\nIE1vbGU= 45257\nIC4uLi4u 45258\nIHByZWNpbw== 45259\nIENoYW1waW9uc2hpcHM= 45260\n6rCA6529 45261\nIHbDqXI= 45262\nIGNvcnJpZG9ycw== 45263\nIEVsZWN0cm9uaWM= 45264\nU2w= 45265\nINCw0LvQtQ== 45266\nIG92ZXJ0aHJvdw== 45267\nIGthYnVs 45268\nIFJFUw== 45269\nIEN5YmVycHVuaw== 45270\n0L7Qs9C+0LQ= 45271\nINCd0LDQsg== 45272\nIHdhbg== 45273\nIG1hbmlmZXN0YXRpb25z 45274\nIGN1YWxlcw== 45275\nIFdpc2U= 45276\nIEzDtnN1bmc= 45277\nIGV4Zm9s 45278\nIGVhcm5z 45279\n0YPRgdGC0LjRgtGM 45280\nIHNhcHA= 45281\nIEJyYXVu 45282\nIEJSQU5ET04= 45283\n7LmZ 45284\nIHNhbm8= 45285\nIEZFTA== 45286\n0YvQstCw0LnRgtC10YHRjA== 45287\n0L7QttC00LXQvdC40Y8= 45288\nIHNld24= 45289\nRnVu 45290\nIHJlY2lwcm9jYWw= 45291\nIGV4cGFuc2l2ZQ== 45292\nIFRyYWZmaWM= 45293\nIGt0w7NyZWdv 45294\nINmI2LM= 45295\nIOu5qA== 45296\ncHJvdmU= 45297\naWdhcmU= 45298\nIGxvaA== 45299\n2KfYtg== 45300\nSG9wZQ== 45301\nIGRldm90ZWVz 45302\nIEdvbQ== 45303\nIHN0ZWFscw== 45304\nIFVtcw== 45305\nIFR3aWNl 45306\naXlpbQ== 45307\nIHJoeXRobWlj 45308\nIFZvcnRl 45309\nIHByZWZpeA== 45310\nb21pbmF0aW9u 45311\nIGRhdG8= 45312\nIGN1c3RhcmQ= 45313\nIFZPSUNF 45314\nIG1lbnk= 45315\naXN0b3Jz 45316\nIO2YkQ== 45317\nIOyCtOyVhA== 45318\nIO2DhA== 45319\nIGtvcnQ= 45320\nIGFiYQ== 45321\nIFZlcmE= 45322\nZXB5 45323\nIOy5tOuplOudvA== 45324\nIHN1Ym1lcmdlZA== 45325\nIENsb2Nr 45326\nIHRodW1ibmFpbHM= 45327\nIGJvYXN0 45328\nIEZhcmU= 45329\nISFd 45330\nIMWbbQ== 45331\nIGthaWtraQ== 45332\nIFRlY2hub2xvZ2llcw== 45333\n7Jm4 45334\n0LjRgtCw0Lk= 45335\nINCw0YI= 45336\nIGtub2Jz 45337\nIHJlaWNodA== 45338\nxrDhu6NuZw== 45339\nZ2xpbw== 45340\nIOunm+ydtA== 45341\n6rCQ7J2E 45342\nIGpvdGth 45343\nIEhhbmR5 45344\nIEhhYmVu 45345\nbm91cw== 45346\nIGlubGFuZA== 45347\nIGFtYXpvbg== 45348\naG9vdGluZw== 45349\nU0w= 45350\nIGxlaXN0ZW4= 45351\nfiI= 45352\nIHByb3Zva2U= 45353\nIFR3aXN0 45354\nINeR15c= 45355\nIGRlcGFydGVk 45356\n6rCc66W8 45357\nIGtvbnNl 45358\nIENhcnd5bg== 45359\n7ZWY7Iug 45360\naWRlbnRhbA== 45361\nRVNDTw== 45362\nIHR0ZW9rYm9ra2k= 45363\nIGRpemVuZG8= 45364\nxLFuZGFraQ== 45365\naW1hc3U= 45366\nYWZhcg== 45367\nIGxhbmRmaWxs 45368\nIGNvcnJlY3Rpbmc= 45369\nIGNsZWFycw== 45370\nIE51bW1lcg== 45371\nSEFN 45372\nIGNhcnRyaWRnZXM= 45373\nIERpZXNlbA== 45374\ncGFjZWQ= 45375\nIG9ibGl2 45376\nIG1veWVucw== 45377\nIFNpbm5l 45378\nIFByZWlz 45379\naWxpeg== 45380\nINGB0LzQvtC2 45381\nIGJyb2FkZW4= 45382\neGVz 45383\nIGNhcmJvaHlkcmF0ZQ== 45384\n7Zi5 45385\nc2Vvaw== 45386\nIGVjaG9lcw== 45387\nIGNlc3M= 45388\n67CU 45389\nINCx0LjQt9C90LXRgQ== 45390\nIGxsYW1hZG8= 45391\nIGVzc2VudA== 45392\nIOydvOuwmA== 45393\nIEFpcmVz 45394\ncGhlbg== 45395\nIHplYnJh 45396\nIHN5bWJvbGlzbQ== 45397\nT25jZQ== 45398\nIHJhY2tz 45399\nIEthZmth 45400\nINGB0LXRgNGM0LXQtw== 45401\nIHNpbm4= 45402\ncGljaW91cw== 45403\na2Fh 45404\nIG1vdGhlcmZ1Y2tlcg== 45405\nIGFwcHJlbnRpY2VzaGlw 45406\nIHJwbQ== 45407\nIHRheGF0aW9u 45408\nIGZ1cnJ5 45409\nIFNhY3JlZA== 45410\nINGA0LDQt9C8 45411\ncG9yYQ== 45412\nZW5nZXM= 45413\nIO2XiOs= 45414\nINGB0LjQvQ== 45415\nIHNhbml0aXplcg== 45416\nIGNyaW5nZQ== 45417\nIFNjYQ== 45418\n0L7Rh9C90L4= 45419\nIG9mZXJl 45420\nIG1lbG9kaWVz 45421\nIFZlbHZldA== 45422\nIElocmVy 45423\nIEh5YnJpZA== 45424\nIEdpb3Y= 45425\nIGlyZ2VuZHdhcw== 45426\nIGRlcGVuZGU= 45427\nIFVzZXJz 45428\nIGh1bXA= 45429\nZHJpdmluZw== 45430\nIHNm 45431\nIHJ1dGhsZXNz 45432\n4LmA4LiE 45433\nIGxlbW9ucw== 45434\nIGbDtnJldA== 45435\nIE9q 45436\nINC80LDQvNCw 45437\nIGludGVycGVyc29uYWw= 45438\nIGdldg== 45439\nIGFibm9ybQ== 45440\n0LjRgdC7 45441\nINC40L3QtA== 45442\nIGtvbnRyb2xs 45443\nIHJlZ3Jlcw== 45444\nIGxlZGdl 45445\nIGVyesOkaGx0 45446\nIFRhY3Q= 45447\nIGFycml2w6k= 45448\nIHN1YnN0YW50aXZl 45449\nIHNwb29uZnVs 45450\nendpc2NoZW4= 45451\nb29vb28= 45452\nIGNvbnRlbmlkbw== 45453\nIGJlc2w= 45454\n4buDbQ== 45455\na3Rlbg== 45456\nSmFtaWU= 45457\nIHNhbmR5 45458\n4os= 45459\nIHBhc2U= 45460\nIGRldHRl 45461\nIEJlbGdpYW4= 45462\n6rCc6w== 45463\ndWxhcmVz 45464\ncnVk 45465\naWdvcg== 45466\nIO2MrOs= 45467\nIHJlbWVkaWVz 45468\nIGJsYXN0aW5n 45469\nIFNpY2g= 45470\nINC+0LbQuNC0 45471\nIG1vbnN0cg== 45472\nIG1hbmlmb2xk 45473\nIGdsYXViZW4= 45474\nIEVTVA== 45475\nIHN0cmVhbWxpbmU= 45476\nIGxvYmJ5aW5n 45477\nIEdvdGhpYw== 45478\ndG9pcmU= 45479\nLi4n 45480\nIGTDqW1vY3I= 45481\nINC90LDQsdC70Y7QtA== 45482\nIHdzcMOzbA== 45483\nIGN6xJnFm8SH 45484\naXPDqXM= 45485\nZ2FuZ2Vu 45486\nIGJlenBpZQ== 45487\ncmVtbGlu 45488\n6rCd 45489\nU3RpbGw= 45490\nIHJlc2lkZXM= 45491\nIGdlbGVjZWs= 45492\nIHTDqWzDqXBob25l 45493\nIHBld24= 45494\nIGxlb3BhcmQ= 45495\nIGNvbXBsaW1lbnRhcnk= 45496\nIGNyaWI= 45497\nIEFuaW1hbHM= 45498\nIGdlaWw= 45499\nZXNzZWw= 45500\nIGdhcmRlcg== 45501\nIGNhdGNoeQ== 45502\nIEV0cw== 45503\nIENvbW1lcmNpYWw= 45504\nIERFTk5JUw== 45505\nIENvb3JkaW5hdG9y 45506\nIEFiaWdhaWw= 45507\nZmZmZmZm 45508\n4bqlcA== 45509\nIHBlcXVlw7Fh 45510\nIGluamVjdGlvbnM= 45511\nY2VrdA== 45512\nIHBoaWxhbnRocm9weQ== 45513\nIHB1Y2s= 45514\nIGNlbGVicmF0ZXM= 45515\nIER1bms= 45516\nIERsYXRlZ28= 45517\nzrTOrg== 45518\nZ3JhZHVhdGU= 45519\nIE1vYmls 45520\ndGlsbA== 45521\nYWNhbQ== 45522\nIHlvbGtz 45523\nIHRhbmdsZWQ= 45524\nIG1hbmlhYw== 45525\nIG9ibGlnZWQ= 45526\nIExhaW5r 45527\nIHZlcmRlcg== 45528\nIERhbW9u 45529\nIG11dGFudA== 45530\nIGhvcHBpbmc= 45531\nIHJlaW5z 45532\nIGludmVydGVy 45533\nIGNvbnRlbXB0 45534\n16DXoQ== 45535\nbGVhcm5pbmc= 45536\nTWlzcw== 45537\nINCT0L7RgQ== 45538\nIE1leWVy 45539\n6ruY7ISc 45540\n15XXoNeZ150= 45541\nYXNraW5n 45542\nIHRyaW1taW5n 45543\nIHRyZWFzdXJ5 45544\nIHNlbnRl 45545\nQXVzdA== 45546\nIFVudGVyc3TDvHR6dW5n 45547\nIENvbWVkeQ== 45548\nIEFuYWtpbg== 45549\n6bk= 45550\n0YDRg9GC 45551\nIEhhcmk= 45552\nb2dyYXBoZXJz 45553\nIG9hdG1lYWw= 45554\nIEJvdHM= 45555\nINC/0LDQu9GM 45556\nIGFja25vd2xlZGdlbWVudA== 45557\neGlj 45558\nIOq0gOyLrA== 45559\nZ2FzcGluZw== 45560\nIHRlcnJhY2U= 45561\nIG9ybmFtZW50cw== 45562\nIE1FUg== 45563\nY29tbWl0dGVl 45564\nIOyXhuyKteuLiOuLpA== 45565\nIHJpag== 45566\n6bM= 45567\n16bXnQ== 45568\nbGVtZQ== 45569\nIGxpYmVydGllcw== 45570\nIGZlbGxhcw== 45571\nIENvcHBlcg== 45572\nYmVuY2g= 45573\nIElkZWE= 45574\n4buNbg== 45575\n0YjQsA== 45576\nIHZlcnNpw7Nu 45577\nz4TOv8+N 45578\nINCc0Lg= 45579\nINC/0YDQuNC70L7Qtg== 45580\nIGJveGVy 45581\nIFRhbm5lcg== 45582\nIE1veQ== 45583\n7LmY64qU 45584\nVGhy 45585\nIHRpbmhhbQ== 45586\nIHBvbGlzaGluZw== 45587\nIGNvbnNlcXVlbnRseQ== 45588\nIGFtZW5pdGllcw== 45589\nIEtJ 45590\nIEdSRUVO 45591\nIEZyYW5raWU= 45592\n0L3QuNGC 45593\naXR0ZWw= 45594\n0YHQutC+0LU= 45595\ndXJzZWQ= 45596\nIHVwYnJpbmdpbmc= 45597\nIHRo4bup 45598\nIOyLneycvOuhnA== 45599\nIHdoaW0= 45600\nIGNoaW5lc2U= 45601\nY29uZmlkZW5jZQ== 45602\nIEplZGVy 45603\nYWpjaWU= 45604\nIFRvdXM= 45605\nIFBvd2Vycw== 45606\n4burYQ== 45607\nb3RoZXJtYWw= 45608\nINCy0YvRiNC1 45609\ncmFsZQ== 45610\n2KfYrg== 45611\nIOyngOybkA== 45612\nIMOpcGlzb2Rl 45613\nIHN1bHBo 45614\nIGVuY2FyYQ== 45615\na3JhZnQ= 45616\nYWxhcsSx 45617\nIENvbWVz 45618\nIGRpdnVs 45619\nIFJ1ZG9scGg= 45620\nIE11c2U= 45621\nIHV0ZW5z 45622\nIOyekOyjvA== 45623\nIHBhbmE= 45624\nIFZlZ2V0YQ== 45625\nIFBIUA== 45626\nIE5TQQ== 45627\nZW50aW4= 45628\nIENhcm5lZ2ll 45629\n2KfZig== 45630\nacSZY3k= 45631\nSGFycnk= 45632\nIGbEsXI= 45633\n0KHQvw== 45634\nIGdsYWRseQ== 45635\nIGF2ZXJhZ2luZw== 45636\n7ZWY6rKg7Iq164uI64uk 45637\n0LvRj9GO0YLRgdGP 45638\nINCc0LXQvdGP 45639\nIHF1b3RhdGlvbg== 45640\ncmlyZXM= 45641\naXRjaGVucw== 45642\nYXllZA== 45643\nIHVuYXR0 45644\nIFBlcmV6 45645\nINC+0YLQvNC10YI= 45646\nIHRhY3RpbGU= 45647\nIEV1aA== 45648\naXNpbmk= 45649\nYnVo 45650\nIGhhdMSxcg== 45651\nIOyeiOycvA== 45652\nIHBvbGljeW1ha2Vycw== 45653\ns7TshLjsmpQ= 45654\nYWPEsQ== 45655\nIM66zrk= 45656\nIHJlZ2lzdGVyaW5n 45657\ncmV0bw== 45658\nIFNwcmlua2xl 45659\nIEdyYW1teQ== 45660\nYXh0ZXI= 45661\nINCx0Lg= 45662\nIHNpdHRlcg== 45663\nIHByZWRpYw== 45664\nIHRoaW5seQ== 45665\nIHN0cnVt 45666\nIGFnZ3Jhdg== 45667\nIGFoYQ== 45668\n2LHYrA== 45669\nbWVsbG93 45670\nIGNvbnN0YW50ZQ== 45671\nIExhdXQ= 45672\naXN0b24= 45673\nIHRyYW5zaXRpb25lZA== 45674\nIENhbWJvZGlh 45675\nYXJ0ZWQ= 45676\nIG1pc2Y= 45677\nIFB1bmt0ZQ== 45678\njOuToA== 45679\nIHRyZW1ibGluZw== 45680\nIGdlc3Bhbm50 45681\nINi52YTZitmH 45682\nINC90LjQutCw0LrQuNGF 45683\nIOu2gOuTnOs= 45684\nINGA0LDQt9Cy0LjRgg== 45685\nIGl0Y2h5 45686\nIGNpZW50bw== 45687\nIHBsYWlucw== 45688\nIGtpdHRlbnM= 45689\nIGJhY2tsb2c= 45690\nIFByZXNpZGluZw== 45691\ncHRh 45692\nIGhhdm9j 45693\nIERhcnJpbg== 45694\nINCb0Y7QsQ== 45695\nIHNlZ3JlZ2F0ZWQ= 45696\nIGdoZXR0bw== 45697\nIGVybGVidA== 45698\nIGRydWdpZWo= 45699\nIFNpeHQ= 45700\n4Lij4Liw 45701\ndWVuY2lh 45702\nIO2VmOq4sA== 45703\nIOuGjQ== 45704\nIHJvYmk= 45705\nIHBpb25lZXJz 45706\nIG1pbGxpYXJkcw== 45707\nIFdpdGNoZXI= 45708\nIOustOyXhw== 45709\nb3Jybw== 45710\nbWFzcw== 45711\nIGRpdmVyZ2VuY2U= 45712\nIFJpdmVyYQ== 45713\nIE5vb2RsZXM= 45714\nIGVuZHJvaXQ= 45715\nIEtvc3Rlbg== 45716\nINC00YDRg9Cz0LA= 45717\nIG3DrW5pbW8= 45718\nIEthemFraHN0YW4= 45719\n2KrZhw== 45720\nINCy0L7Qt9C00YM= 45721\nIGdlc2NocmllYmVu 45722\nIE5pbA== 45723\n0YHQutC4 45724\nIEZyw7xo 45725\nIGJldmVyYWdlcw== 45726\nIEdvbg== 45727\nQXJpbg== 45728\nIEludHJv 45729\nb2NhbHlwdGlj 45730\nIGV4aGF1c3Rpb24= 45731\nIFN0YXR1cw== 45732\nIEJhdHRlcnk= 45733\nw6lzeg== 45734\no7zr 45735\nYWlyeQ== 45736\nIOuztOyXrOuTnOs= 45737\nIGRpc3Bhcml0eQ== 45738\n2Yw= 45739\nIFR1Y3Nvbg== 45740\nIGJyaWdodGx5 45741\ncHJvYmxlbQ== 45742\nIGJpb21hc3M= 45743\np4k= 45744\nIGh1cmRsZQ== 45745\nIHdhdmVsZW5ndGhz 45746\nIDw8 45747\nIHRlYW1lZA== 45748\nRkZGRg== 45749\nIFNsaW0= 45750\nb21pYWw= 45751\nIHVudmVpbGVk 45752\nIFZlcmVpbg== 45753\n2YLYtw== 45754\nZXN0cnk= 45755\nIGNsw6Fz 45756\nIGNoZWRkYXI= 45757\nIGFjY3VzaW5n 45758\nIFNjaWVudGlmaWM= 45759\nINCx0YPQtNC1 45760\nIEN5cnVz 45761\nzrXPhM61 45762\nhpPqs6A= 45763\nIOuzhA== 45764\nIGN1cmQ= 45765\nIHJlZmVycmFscw== 45766\nc2hpZnQ= 45767\nbmlrw7N3 45768\nIG1pZXI= 45769\nIGNvbmZyb250aW5n 45770\n6rKD64+E 45771\nYXds 45772\nIHRyeWlu 45773\nIOq3uOuemOyalA== 45774\nIGNoaWFy 45775\nIOyYpOuKmOuPhA== 45776\nZXNxdWU= 45777\nIG1pc21vcw== 45778\nIFNoYWs= 45779\nIHNvY2lhdXg= 45780\nIHBpxZ8= 45781\nIGtpxZ9p 45782\nIGN5YW4= 45783\naGF5 45784\nYmV3 45785\nYm9k 45786\nIM65 45787\nIE1haW5seQ== 45788\n0Y7RgtGM 45789\naGFiaXR1ZGU= 45790\nINGB0L/QvtC60L7QuQ== 45791\nIHByZWNvbg== 45792\nIE1hbmR5 45793\n8J+kow== 45794\naWxsb3M= 45795\nIGdydXBw 45796\nIGNydW1ibGU= 45797\nIGNvbnN0cnVjdG9y 45798\nZXJ2aWNlcw== 45799\nIGxpZ2h0aG91c2U= 45800\nIENvbmNlcHQ= 45801\n0LDQvdGC0Lg= 45802\nYWx0cm8= 45803\naG9wZQ== 45804\nIEFsbGVn 45805\n7Ja066W8 45806\ncGllY2Vz 45807\nb3VudGVy 45808\nIO2VmOuLiOq5jA== 45809\nIOyduO2EsOs= 45810\nIHbDqXJpdGFibGU= 45811\nIHRocmVhZGVk 45812\nYmxpbmQ= 45813\ngpjrnbw= 45814\nIHRyYXlz 45815\nIEVkaXNvbg== 45816\nIMOWeg== 45817\nIFN0ZXZpZQ== 45818\nIGxlbmRlcg== 45819\nIGJyaWdhZGU= 45820\nIGRldXRzY2hl 45821\nbXVmZmxlZA== 45822\nYmFydA== 45823\nIGluc2FuaXR5 45824\nIHNhdnZ5 45825\nIHNlbnNhdGlvbmFs 45826\nIGRlcmVjaG9z 45827\nIE1Y 45828\nINC/0YDQtdC/ 45829\nIHRocmVhdGVucw== 45830\nIHJlYWx0w6A= 45831\nIGluZGljYXRpdmU= 45832\nIGNob3Bz 45833\nIGJlbmVmaXRpbmc= 45834\nIFZlcm5vbg== 45835\nIFN0cmFuZA== 45836\nbnVu 45837\ncXVlbnRseQ== 45838\nMTAx 45839\nIGVlbA== 45840\n7IiZ 45841\ncmludHM= 45842\nINmF2LM= 45843\nINio2K8= 45844\nINC/0L7RgdGC0YDQvg== 45845\nIHlhcG3EscWf 45846\nIG9sbWFzxLE= 45847\nIGllZGVyZWVu 45848\nb2zDqQ== 45849\na2Vm 45850\nIOuwnOyDnQ== 45851\nIHJhaW5lZA== 45852\nIGFsbWlnaHR5 45853\nINCy0YvQtA== 45854\nIENQUg== 45855\nRnJl 45856\nIGluaGFiaXRlZA== 45857\nIGFyYmV0cw== 45858\nIGFraW4= 45859\n0LDRgdGC0LI= 45860\ndmFuaWE= 45861\nIGjDpHVmaWc= 45862\nIE1hdHRl 45863\nc29ycnk= 45864\nSmVubnk= 45865\nINCz0YDQsNC0 45866\nIHdoaXQ= 45867\nIGJyb2tlcnM= 45868\nIGhpbmU= 45869\nYXN0ZW4= 45870\nINCz0YDRgw== 45871\nTUI= 45872\nIFBSSQ== 45873\nU2Fi 45874\nIHdyZXN0bGVy 45875\nIGZhY2lsaXRhdGluZw== 45876\nIGVoa8Ok 45877\nIENyZWQ= 45878\nIDEyNw== 45879\nIG5vdGhpbg== 45880\nIG1hbmRhdGVk 45881\n0YPRgtGB0YLQsg== 45882\nRnJhbms= 45883\nIHdvcnM= 45884\nIGR6aWXFhA== 45885\nIFVuZGVyZ3JvdW5k 45886\nIHpuYWpkdQ== 45887\nIELDpA== 45888\nIFByaW56aXA= 45889\n0LDRgtC10LvQtdC5 45890\nIHZldGVyaW5hcg== 45891\nIHNwbGVuZGlk 45892\nIHJvenA= 45893\nIHBzeWNob3BhdGg= 45894\naWdvbg== 45895\nIGhvcHM= 45896\nIGPhuqdu 45897\nIFhpYW4= 45898\nIHRyb2lzacOobWU= 45899\nIHByb2R1Y3Rv 45900\nIGRlxJ9lcg== 45901\nIENvbnRpbnVpbmc= 45902\n0LjQstCw0Ls= 45903\nY8Sxaw== 45904\nIG1vaXN0dXJpemVy 45905\nV2hpdGU= 45906\nIHNpaXM= 45907\nIEV2ZXJlc3Q= 45908\naWVuY2Vk 45909\nIGPhuqNt 45910\nIEphcG9u 45911\ntOyghA== 45912\nIHRlbsOtYW4= 45913\nIGVuY2FudGE= 45914\nTW0= 45915\nIGRyb3Bkb3du 45916\nIEl5YQ== 45917\ns7TrqbQ= 45918\nIHdvcmRpbmc= 45919\nIFNxdWVlemU= 45920\nIE1hcGxl 45921\nIGNsYXJpZmllZA== 45922\nIE11bmljaXA= 45923\nIFJvdWdl 45924\nIE5pY2tp 45925\nIEdvbw== 45926\ndm9sdA== 45927\ndGVr 45928\nZmVjdHVyZQ== 45929\nZnJlZA== 45930\nYXJyaXZl 45931\ndGV6 45932\nRXA= 45933\nIG9icmFz 45934\nIFZJRA== 45935\nIFJpdg== 45936\nIE1vZGk= 45937\naWJl 45938\nIGFjb250ZWNlbmRv 45939\nIGltaXRhdGlvbg== 45940\nIGNhbW91ZmxhZ2U= 45941\nIHNwYW5uaW5n 45942\nIFNFQ1JFVA== 45943\nIE9yZW8= 45944\n7IaM66as 45945\nIGh1bmNo 45946\nIGNhxYJl 45947\nIHNwb250YW5lb3VzbHk= 45948\nIFBlcmQ= 45949\nIGV0YXA= 45950\nIEhvbGU= 45951\nIERpc2FiaWxpdHk= 45952\nIGFmdGVybGlmZQ== 45953\nIHRlc3RpZmllZA== 45954\nIHByZXN1cA== 45955\nIHBldHJvbGV1bQ== 45956\nIGNvbnRyYXJpbw== 45957\nIEFzc2Vzc21lbnQ= 45958\nxJ9sdQ== 45959\nIHBlc3Rz 45960\nIGRpbGln 45961\nINCy0YHRgtGA0LXRgg== 45962\nIGNvbnPDqXF1 45963\nIGNhbm5vbnM= 45964\nIGNhbm9l 45965\nIE1pbGU= 45966\nIGNpdG95 45967\nIGJlZ2dlZA== 45968\nIE1pbm5pZQ== 45969\nxYJ5Y2g= 45970\nIHByaW5jaXBl 45971\nz4DPjM69 45972\nbW5pZWo= 45973\nIHdlcnQ= 45974\nIOuLpOuTpA== 45975\nYW5zZQ== 45976\nIHVuY2xlcw== 45977\nIHByb3ZvY2F0aXZl 45978\nIGludGVyc2VjdGlvbnM= 45979\nIGRlbW9jcmF0cw== 45980\nIEp1bGl1cw== 45981\n0LjQvdC60Lg= 45982\neWd1c2Fs 45983\nINec15U= 45984\nIGdqb3JkZQ== 45985\nIGdhc2tldA== 45986\nIEJvY2s= 45987\nIMSwbg== 45988\nYnJlYXQ= 45989\nIEVxdWl0eQ== 45990\nYXJkxLE= 45991\nINC60LDQvdCw0LvQtQ== 45992\nINC00L3QtdC5 45993\nIHThu5tp 45994\nIGZpeHR1cmU= 45995\nIGFidXNlcw== 45996\nIHZheWE= 45997\nIG91dmVydA== 45998\nIG11bHRpY3VsdHVyYWw= 45999\nIGNvbnRleHRv 46000\nIFNlc2FtZQ== 46001\nIGTDqXBs 46002\nIGNvbnNvbW0= 46003\nIFBhcnRl 46004\nIHBlbQ== 46005\nIENvbmFu 46006\nINCx0ZbQu9GM 46007\nIHBlcnN1YWRlZA== 46008\nIGRyYWlucw== 46009\nTW9v 46010\nRk9SRQ== 46011\nINCx0LDRgg== 46012\nIGZvZA== 46013\nIFByb2R1Y3Rz 46014\n7KeE7Kec 46015\nICJb 46016\nIFdpY2s= 46017\nIE5hcnV0bw== 46018\n0L3QsNC70Lg= 46019\ncnl3 46020\nIGxvZGdl 46021\nIGluaA== 46022\nIHZvbnRhZGU= 46023\nIGRpag== 46024\nIEplc8O6cw== 46025\nTG9va2luZw== 46026\nIGZvcmVhcm0= 46027\nIEludGVncmF0aW9u 46028\nIEhBUlJJUw== 46029\nIHRvb2xiYXI= 46030\nbGVhZGVy 46031\nIHNlbGRvbQ== 46032\nINCx0YDQvtGB 46033\nIEtvb2s= 46034\n0L7QvdC0 46035\nIG1vbm9wb2w= 46036\nIG1pbGxldA== 46037\nIGxpcmE= 46038\nIEFzaWFucw== 46039\nIDE4OTA= 46040\nY2nEn2lt 46041\nIGVkZW4= 46042\nIElLRUE= 46043\nIE5laWdoYm9y 46044\nIEthenV5YQ== 46045\nw7xk 46046\nIHBzeWNoZWRlbA== 46047\nIGVudmlzaW9uZWQ= 46048\nIO+3uw== 46049\nIHd1bmRlcg== 46050\nIEJ1bGdhcmlh 46051\nQnJpZA== 46052\nIG1hcnJvdw== 46053\nIGRlcGljdGlvbg== 46054\nIFRpbg== 46055\nIFBoYXJpc2U= 46056\nIGVpbnppZ2U= 46057\nIGJsaW5kbHk= 46058\nIGRlZmVucw== 46059\nRGlyZQ== 46060\nIHZpYnJhdGluZw== 46061\nIHRyb2xscw== 46062\nIGRpc3Jlc3BlY3RmdWw= 46063\nIHdvZA== 46064\nIHN0aW11bGk= 46065\nIGNyZWVwaW5n 46066\nIGNsYWlyZW1lbnQ= 46067\nIHNjYXJpZXN0 46068\nIGTDqWNvdXZyaXI= 46069\nIDEwNA== 46070\nINCy0LXRgNGF 46071\nIMWCYXQ= 46072\nIHLDs8W8bmU= 46073\nIGJhcmxleQ== 46074\nIFJlcGw= 46075\nIFR3ZQ== 46076\na2tl 46077\nIFJlZG1p 46078\nIE1ldHJvaWQ= 46079\nIM6uz4TOsc69 46080\nQ2hlY2s= 46081\nIFNFTg== 46082\nIGlkbw== 46083\n0YLQvtGA0LjQuA== 46084\nw7Nw 46085\nVU5LTk9XTg== 46086\nIMOkbmRlcm4= 46087\nIEp1aWNl 46088\nIEdlc2ljaHQ= 46089\nINC90LDRgdGC0L7Qu9GM0LrQvg== 46090\n7YOV 46091\nwq0= 46092\nZXhoYWxlcw== 46093\nIOy0iQ== 46094\nIGpzZW0= 46095\nz4DPic+C 46096\nIGl0dA== 46097\n66qF7J20 46098\nIHJlbWl4 46099\nIGJsb3Nzb21z 46100\nIFJlbmVl 46101\naXNhdGlvbnM= 46102\n7Iqk7YSw 46103\nIOuztOydtOuKlA== 46104\ndWVzdGFz 46105\nb3BlZGlh 46106\nIEFpbQ== 46107\n7J207KaI 46108\nc2NlbmU= 46109\nIGxlYWthZ2U= 46110\ndWNrdA== 46111\nU2Fk 46112\nQXNr 46113\nIHN1c3BlbnNl 46114\nIGltcG9zdA== 46115\nIFN0cmF0ZWdpYw== 46116\nIEl0w61z 46117\n4oCM 46118\nIGtleWJvYXJkcw== 46119\nIGFtdXNpbmc= 46120\nb2dy 46121\naWRlcm1hbg== 46122\nnpY= 46123\nINCy0LjQttGD 46124\nIGRpcHM= 46125\nIGFwb2xvZ2l6ZWQ= 46126\nIFNUQVI= 46127\nIGVzY3VlbGE= 46128\nIENoaW5n 46129\n0L3QtdC90LjRjw== 46130\nIOu2gOu2hOydtA== 46131\nIEZsZWV0 46132\nIHNhbWI= 46133\nIGVudHNwcmVjaGVuZA== 46134\nIGVsZWN0cm9kZXM= 46135\nIEZyZWloZWl0 46136\nIFNocmlt 46137\nacOfZQ== 46138\nIHNlbGVjdGlvbnM= 46139\nIGZvcmRp 46140\nIGRvc3M= 46141\n0Y/Rhw== 46142\nIGRpc2NyaW1pbmF0ZQ== 46143\nIEF1w59lcmRlbQ== 46144\nIGRlc2Vudm9sdg== 46145\nIEludGVybmFs 46146\nIEJlbmVkaWN0 46147\nIFNoaXY= 46148\nTWlzc3k= 46149\nINC+0LHQvdCw0YDRg9C2 46150\nINC90LDRgdGC0YDQvg== 46151\nIGNvbnRyb2xhcg== 46152\nIExpYQ== 46153\nIG9waW9pZHM= 46154\nYW50dQ== 46155\nIGN1cGJvYXJk 46156\n0LPQtQ== 46157\nYWNodHM= 46158\nIGN1cmF0ZWQ= 46159\nIHhlbQ== 46160\nIHdlYXJ5 46161\nIGJyZXRocmVu 46162\nIGJ1ZGdldGluZw== 46163\nIHBvdXJ0YW50 46164\nYWlzaWE= 46165\nINC+0YLQstC10Yc= 46166\nIEdJUw== 46167\nzrzOsc65 46168\nINep15TXldeQ 46169\nIHNhdWQ= 46170\nIGzhu5s= 46171\n0JXQog== 46172\ndWJpbmU= 46173\nINC90YPQttC10L0= 46174\nIGtpZG5hcHBpbmc= 46175\nIGJyYXQ= 46176\nIFRlcnJl 46177\nIE1vbmV0 46178\nIOuniOyKpO2B 46179\nIGZsYXNoeQ== 46180\nIElTQk4= 46181\nIGZyZWVsYW5jZQ== 46182\naWFnZQ== 46183\nIGp1bmdl 46184\n7Lap 46185\nY2VyYWw= 46186\nINGC0L7Rh9C60Lg= 46187\nIGZvcm11bGF0ZQ== 46188\nIEZFUg== 46189\nIERhcnRtb3V0aA== 46190\n7Jy866m07ISc 46191\nb3dpxIU= 46192\nIOuUlOyekA== 46193\nIHJlZ2ltZW50 46194\nIG1ldGFib2xpc21v 46195\nIFBhcnI= 46196\nIOy2qeu2hA== 46197\nIHNhbml0eQ== 46198\nIExhbA== 46199\nIEfDtg== 46200\nIEdsYQ== 46201\nIHByb3Rv 46202\nIG1pY3Jvc2NvcGlj 46203\nIGthbmc= 46204\nIFNjYWxpYQ== 46205\nIHB1Zw== 46206\nIFNjb3Jl 46207\nIFNhdmFubmFo 46208\nIGdhcmRl 46209\nIE5PUg== 46210\nIHNjaGVpbnQ= 46211\nIHDDs8WC 46212\nIGNvcnJp 46213\nIGJydXRl 46214\nIMWCYWQ= 46215\nIHN1Y2NlZWRpbmc= 46216\nIGJpY3ljbGVz 46217\nTm9u 46218\nIHNlZWtlcnM= 46219\nIHVuY29uZGl0aW9uYWw= 46220\nIHJoeW1lcw== 46221\nIEdhcmFnZQ== 46222\nIGludm9pY2U= 46223\nIGNhbnZp 46224\nbmVjaw== 46225\nIGN1c3RvbWl6YWJsZQ== 46226\naXJpdHVhbA== 46227\nUXVlZW4= 46228\n7ZWY7Iuc64qU 46229\nIHBvd2VybGVzcw== 46230\nIGNzYWs= 46231\naXNvZnQ= 46232\nIOygle2ZlQ== 46233\nIG5ow6Ju 46234\nIE1BTkQ= 46235\nIEhhZg== 46236\nIHJldm9sdmVz 46237\nb3Zhbg== 46238\nYXJvbw== 46239\nIEdyaW5k 46240\nIGluZGlzcGVuc2FibGU= 46241\nIGNvbnN1bHRlZA== 46242\nIENsaW5pY2Fs 46243\nQWNj 46244\nIG9saG9z 46245\nIG1vbnRlcg== 46246\nIEhhbmE= 46247\nZXRhaA== 46248\nIHZhYW4= 46249\nIHRpZ2Vycw== 46250\nIGNhdWN1cw== 46251\n8J+Ygg== 46252\ns7TsnpA= 46253\ncG93ZXJz 46254\naXVtcw== 46255\nIO2GoOs= 46256\nIHRyYWRpY2lvbmFs 46257\nIHJlc29uYXRlZA== 46258\nIOyLoOq4sA== 46259\ndGhlbQ== 46260\nUm9iZXJ0 46261\nIGVsZW1lbnRv 46262\nIGFudGlk 46263\nINC+0LHRgQ== 46264\nIG5hdGl2ZXM= 46265\nIGxvY2E= 46266\nb3dtZW50 46267\nIFRpZ2h0 46268\nIG1lbGFu 46269\nIE51ZQ== 46270\nYW1pcw== 46271\nIHNvcmdlbg== 46272\nYXPEsW5h 46273\nSG9tZQ== 46274\nIFBVQkc= 46275\nIGF3ZnVsbHk= 46276\nIFNob3Jl 46277\nIFBlcmNow6k= 46278\nIExhdQ== 46279\nIENpbmRlcmVsbGE= 46280\nIENoZXN0 46281\nIHNlbWFudGlj 46282\nIGRlc2VydGVk 46283\nIE1vbW8= 46284\nIEhlcm5hbmRleg== 46285\nZ2VuZXM= 46286\nIEFkdWx0 46287\n0LjRh9C10YHQutC+0LPQvg== 46288\nb3NoaW1h 46289\nIGNhcmFjdGVyw61zdGljYXM= 46290\nIEtM 46291\ntOyepQ== 46292\nb2Nhcg== 46293\nIGZlaGx0 46294\nIGRydWs= 46295\nIFBvcHB5 46296\nRU5HTElTSA== 46297\nIFZlcmdsZWljaA== 46298\nQnJpZW4= 46299\nIHJlY29tcA== 46300\nINGB0LQ= 46301\nIG1lcmdlcg== 46302\nIG1hcmtldGVycw== 46303\nIGhvbmV5bW9vbg== 46304\nIHBlbnNv 46305\nIGJlbGxp 46306\n0LXRgtGD 46307\nIGJhbmtlcg== 46308\nQ2FtZXJh 46309\nIFN0YWxs 46310\nIFN0YW1w 46311\nIEJpdGU= 46312\n0LXQttC00LU= 46313\nIHPDvHI= 46314\nIGfDvMOn 46315\nIFBhc3NvdmVy 46316\nIEJ1Z8O8bg== 46317\nINGB0L7QttCw0LvQtdC90LjRjg== 46318\nINC90LjQtw== 46319\nIG1hbnVyZQ== 46320\nIGdsYWNpZXI= 46321\nUkFZ 46322\ndGVycm9y 46323\nIHNhbGFkcw== 46324\nIGh1cnJpY2FuZXM= 46325\nIERlc2lnbmVy 46326\nYXRvcmlv 46327\nIGZhY3R1YWw= 46328\nIFRhbW15 46329\nINC30LLRg9GH 46330\nIGludHJvZHVjdGlvbnM= 46331\nIGhvdXNla2VlcGluZw== 46332\nIGhhbmdlcg== 46333\n64uY6w== 46334\nYWt0ZQ== 46335\nIENvbGE= 46336\nJ10= 46337\nIEdlbmRlcg== 46338\n0L7RgNC+0L0= 46339\naXBzZQ== 46340\naWNpYXM= 46341\nIHN1Y2Nlc3NpdmU= 46342\nIHBvbGl0aWM= 46343\nIGjDtmhlcg== 46344\nIFFpYW8= 46345\nIEdpbW1l 46346\nINC70L7Qtg== 46347\nIHNlYg== 46348\nIFdlaXRlcg== 46349\nIFNha3VyYQ== 46350\nIEJvdWxkZXI= 46351\nIEFtw6lyaWNh 46352\ncGXFgm5pZQ== 46353\nIHRlY25vbG9nw61h 46354\naXNob3Bz 46355\nZnVy 46356\nIG1vb25saWdodA== 46357\nIGRpc3BlcnNlZA== 46358\nIHJleg== 46359\n0LXQvdC90L7QtQ== 46360\n0LDQu9GM0L3Rg9GO 46361\nIFR3ZWx2ZQ== 46362\nIEhPUg== 46363\n7Iuk7Z6I 46364\naWxhZ2U= 46365\nIHNoYWRlZA== 46366\nIHJlc3VtZXM= 46367\nIFBlYW51dA== 46368\nIE1JTEw= 46369\nYXBvbnM= 46370\nIFVGQw== 46371\nIFNvbGU= 46372\nIGpveXN0aWNr 46373\nIE9saXZpZXI= 46374\nd2FybWluZw== 46375\nIHN5bGxhYnVz 46376\nINC+0LHRidC1 46377\nIGhp4buHbg== 46378\nIGZlc3Rh 46379\nIGNyYWRsZQ== 46380\nIFphYw== 46381\nIHJlbWVtYnJhbmNl 46382\nIOqwmeyVhOyEnA== 46383\nIHBpxJlr 46384\nIGNvZXhpc3Q= 46385\nIFZJSQ== 46386\nIMOhcmVhcw== 46387\nIHV3YcW8 46388\nIG9ic2VydmVycw== 46389\nIG3DpG5uaXNrb3I= 46390\nY29vbg== 46391\nIERBTQ== 46392\nIG5hc3p5bQ== 46393\nIGFsbGlnYXRvcg== 46394\nIEZyZWV6ZQ== 46395\nIEVzdGF0ZQ== 46396\nINGC0YDQsNC00Lg= 46397\nIHVuZGVyY292ZXI= 46398\nIG5pZXM= 46399\nIEZlaGxlcg== 46400\ncGxpbg== 46401\nIEthYnVs 46402\naWxhdGU= 46403\nIOqzoOyWkQ== 46404\nIG1vcA== 46405\n7IS8 46406\nIGFuZGVyZXI= 46407\nIEtFTEw= 46408\n0L7QutC4 46409\nINC20LXRgdGC 46410\nIGdyYXppbmc= 46411\nIGRhw60= 46412\nIGNhcGl0YWxpemU= 46413\nIGFwZXg= 46414\nIG51cnR1cmluZw== 46415\nIGNvcnRhcg== 46416\nIGNvbnRyYWM= 46417\nxLFtxLF6xLE= 46418\nIHRhbmRlbQ== 46419\nZ2VtZW50 46420\nINGB0LjRgdGC0LXQvNCw 46421\nIG1hbnF1ZQ== 46422\naWFqxIU= 46423\nV09S 46424\nINin2Kg= 46425\nIGNhcnRz 46426\nQU5P 46427\nIOuwm+qzoA== 46428\nIENlbmE= 46429\nIEJpb2xvZ3k= 46430\naWRhcg== 46431\nIGHFvA== 46432\nZXJuZQ== 46433\nYW51 46434\nIHRoYW5rZWQ= 46435\nIHN1Ym1hcmluZXM= 46436\nIG1hbmlj 46437\nINC80L7Qtw== 46438\naW5zdGFudA== 46439\nZXNzZW50aWFs 46440\nIHNhbXVyYWk= 46441\nIHBhc3Rp 46442\nIGFsYW4= 46443\nIGJyb2No 46444\nIGJha2Vy 46445\nIEd1aWxs 46446\nqLw= 46447\nIHdpdGhkcmF3bg== 46448\n64ud 46449\nUGVyZmVjdA== 46450\ncXVlbmN5 46451\nIHN0cmVhbWxpbmVk 46452\nIDEzMDA= 46453\ntOuPhA== 46454\nIOuWoOs= 46455\nIGh2YWQ= 46456\nIHZlcmJhbGx5 46457\nIEtvbnM= 46458\nIOyhsOyLrA== 46459\nIGRpZXo= 46460\nIGNodWNrbGluZw== 46461\nIE1paA== 46462\nIHJhbGxpZXM= 46463\nIG1hbnRlcg== 46464\nIGVhcm5lc3Q= 46465\nc3VwZXI= 46466\nIGdlY2U= 46467\nIFJlbmQ= 46468\nIEdlcmFkZQ== 46469\namVuaWdlbg== 46470\nIFZhbGw= 46471\nIOyeiOuCmA== 46472\nINGB0LrQsNC30LDQu9Cw 46473\nIHRyYWJhbGg= 46474\nINC90LDRiNC10Lw= 46475\nINC80LXRhQ== 46476\naWtpdA== 46477\nIG5vdW5z 46478\nIG5ldXJvbG9naWNhbA== 46479\nIG1vdGl2YXRpb25hbA== 46480\nIE1jTWFob24= 46481\nIEZpbmlzaGVk 46482\nIOuztOydtA== 46483\nIEZpZWxkcw== 46484\nIGFkb2xlc2NlbnRz 46485\nIFRpc2No 46486\nIE5lYmVu 46487\nIEZsb3dlcnM= 46488\nIEVuZXJn 46489\nIGRpcmV0 46490\nIFRoaQ== 46491\nIFBpY2Fz 46492\nIGF2ZXRl 46493\nIEZvcnM= 46494\nIENoYXBlbA== 46495\nTsOjbw== 46496\nRXQ= 46497\nINGB0L7QtNC10YDQtg== 46498\ncmVubw== 46499\nIHN2ZW4= 46500\nIGRvc3TEmXA= 46501\nbmVl 46502\nIFNuYXBkcmFnb24= 46503\nIElEcw== 46504\n7JWY64qU642w 46505\n16jXmg== 46506\nIHN1bmZsb3dlcg== 46507\nIHBlcnBldHVhbA== 46508\nIGtuaWdodHM= 46509\nIGdpcmQ= 46510\nIFRvbGQ= 46511\nIHZvbGNhbm9lcw== 46512\nIGFkdmVyc2FyeQ== 46513\nIEVjb25vbXk= 46514\nIGV4dHJhcG9s 46515\nIGJsdWV0b290aA== 46516\nIHpvb21pbmc= 46517\nIHNreXM= 46518\nIGdlbmlhbA== 46519\nw61jdWxvcw== 46520\nYW1icmU= 46521\nINC80LXRgA== 46522\nIHRlZW55 46523\nIHN0cmVzc2luZw== 46524\n7JWM 46525\nT05Z 46526\nIHRyYW5zbHVjZW50 46527\nIHJvdW5kaW5n 46528\nIGdydWVz 46529\n15nXoNeU 46530\nYXByw6hz 46531\nIHBydWViYQ== 46532\nIHBvbHlnb24= 46533\nIGJsdWViZXJyeQ== 46534\nIFByb2dyYW1t 46535\nIHRyZW5jaGVz 46536\nIHNlYmFnYWk= 46537\nIHBhbGF0ZQ== 46538\nIGxhdWRl 46539\nIGJlaGF2ZWQ= 46540\nIGxvbmdpdHVkaW5hbA== 46541\nIE1vZHVsZQ== 46542\nIGFkbWly 46543\nzrvOuQ== 46544\nR3JlZw== 46545\nIHd5c3Q= 46546\nIHByb3BhZ2F0ZQ== 46547\nIG1vbGRz 46548\nIFR1Yg== 46549\nIExvdWQ= 46550\ndXN0bw== 46551\nIHVuc3RvcHBhYmxl 46552\nIHJlaW5mb3JjaW5n 46553\nINC/0YDQvtCx0LvQtdC80LA= 46554\nIHBvdGVuY2lhbA== 46555\nIGhlbXA= 46556\n7J6U 46557\n4KSv 46558\nIG9wdGlj 46559\nIGVyZm9sZ3JlaWNo 46560\n0YHRiw== 46561\n0L7Qu9GM0YjQtQ== 46562\ndXJzdA== 46563\nIFBvaXM= 46564\nIHJlc3BvbmRlbnRz 46565\nIG5laG1l 46566\nIEV4dGVybmFs 46567\nb2xhdGU= 46568\nSHl1bg== 46569\nIHF1YXJ0eg== 46570\nIG1hdGhlbWF0aWNpYW4= 46571\nIGLDoXNpY2FtZW50ZQ== 46572\nIGFpbA== 46573\n7KCc66W8 46574\nYXR0dXR0bw== 46575\nIG5vb2l0 46576\nIGFmZmxpY3Q= 46577\nIE9sZ2E= 46578\nINC90LDRgg== 46579\nIGRpdGVz 46580\nIHJlYWxpZGFkZQ== 46581\nIGvDpG4= 46582\nIHVuaXF1ZW5lc3M= 46583\nIHBhZHJlcw== 46584\nIHN1YnNpZGk= 46585\nIHBpZ2VvbnM= 46586\nzrLOsQ== 46587\nc3RhZA== 46588\nIGRlcmVu 46589\nINCh0LvQtdC0 46590\nZG9v 46591\nINC+0L/QuNGB0LDQvdC40Lg= 46592\nIGFtYmVy 46593\nIGdvb3NlYnVtcHM= 46594\nIGZyw6Vnb3I= 46595\nIFZpdGFs 46596\nIElzcmFlbGl0ZXM= 46597\nd2Fzc2Vy 46598\nSXNu 46599\nIGNvbW1pdHM= 46600\nIFNURVZFTg== 46601\nIEJldsO2bGtlcg== 46602\ndWl0aXZl 46603\nIGxlZ2Vu 46604\nIGJydWs= 46605\n0LjRgNC+0LLQsNC9 46606\neW5lbg== 46607\naGVsbQ== 46608\nIGdlbmVyYXRpb25hbA== 46609\nIEzDpG5kZXJu 46610\nzr/Ouc+Az4zOvQ== 46611\ndXp1 46612\nIGNhbGxlcg== 46613\n0L7QvdGM 46614\nw7xtw7w= 46615\nIGJlc2Fy 46616\nIHBsYXRz 46617\nIG1pZ3JhdGVk 46618\nIGphcA== 46619\nIFdBUg== 46620\nIGRpc3NlY3Q= 46621\nIFp1c2No 46622\nIFplaXRlbg== 46623\nIExpb25z 46624\nIERG 46625\n4pQ= 46626\n0LrQuNCy 46627\nIHBlZGVzdHJpYW5z 46628\nIE1hcmlseW4= 46629\nZG9jaw== 46630\nIHlodA== 46631\nIHJlaW5jYXJu 46632\nIFNvbm8= 46633\nIEdyb3d0aA== 46634\n0YPRgdC+0LI= 46635\nIGR1bmdlb25z 46636\nIGJhZ3Vz 46637\na2ljaA== 46638\nINGD0LrRgNCw0Zc= 46639\nIEtlbGxlcg== 46640\nY2hlbWlzdHJ5 46641\nSmFwYW5lc2U= 46642\nIHdpbGxzdA== 46643\nIGRlY29tcG9zaXRpb24= 46644\nINGB0YLQtdC9 46645\nIHJldml2ZWQ= 46646\n7ZWZ6rWQ 46647\nIMWT 46648\n7Iu4 46649\naXBweQ== 46650\nIGhvdXJseQ== 46651\nasOkbg== 46652\nIFdvcmtzaG9w 46653\nnbzshJw= 46654\nIGN1YXJ0bw== 46655\nIHBhdHJpbQ== 46656\nIEJ1cmNo 46657\nIOyeiOq4sA== 46658\nIGhlcGF0 46659\nIGjDoG5n 46660\nIOuMgO2VtA== 46661\nINCy0LDRiNC4 46662\nIHJld29yaw== 46663\nIHBhcnNl 46664\nIMOnxLFrdMSx 46665\nIFNheA== 46666\nIE1vbmdv 46667\nIEFhYWg= 46668\ncmFtYmxl 46669\nREo= 46670\nIHN0YWJpbGl6ZWQ= 46671\nIFNwZWVjaA== 46672\nQm9va3M= 46673\nIGh1cmRsZXM= 46674\nIFdP 46675\nIExhbWJvcmc= 46676\nIDE5MzM= 46677\nIHZvcmJlcmU= 46678\nIGNsaW5pY2FsbHk= 46679\nIGJyZWF0aHRha2luZw== 46680\nIEdhdGV3YXk= 46681\n0L/QtdGA0LLRi9GF 46682\ndXRlcnM= 46683\nIOu5tQ== 46684\nIHlldGVy 46685\nIHB1bGxleQ== 46686\nIG11ZmZpbg== 46687\nIFByZWZlcg== 46688\nIFBlbmNl 46689\nIGluZm9ybWHDp8Ojbw== 46690\n7Iqk7Yq46w== 46691\nIFR1cnRsZQ== 46692\nIFJlZ2luYQ== 46693\nIExvYWQ= 46694\nZG9lcw== 46695\ncGFuemU= 46696\nuJQ= 46697\nIG1pbmE= 46698\nIExhdGlub3M= 46699\nYW1tZXJz 46700\nIFRvcnQ= 46701\nIEJleW9uY2U= 46702\n0LjQvNC+0YHRgtC4 46703\nINCy0L7Qv9GA0L7RgdGL 46704\nIGJ1bHVu 46705\naW5law== 46706\nYmVyZWljaA== 46707\nIHBhc3R1cmU= 46708\nIE9B 46709\nIE1lbHQ= 46710\nIEV0dA== 46711\nIERZ 46712\nIG9id29obA== 46713\nIGxlYWd1ZXM= 46714\n0YLQtdGB0Yw= 46715\nINC60YPRgQ== 46716\nIHZvcnM= 46717\nIHRvcHA= 46718\nb2dyYXBoaWNhbA== 46719\nYXNzdA== 46720\nIGxpbmRv 46721\nIOuwne2YlA== 46722\nIHLDqWZs 46723\nIGNsaW1icw== 46724\nIHZhcnNh 46725\nIG1ldGh5bA== 46726\nIEthcmVyZQ== 46727\nxrDhu58= 46728\nUmFk 46729\nIHByZXBhcmVkbmVzcw== 46730\n0L7QvdGH 46731\nIE9E 46732\nIENHSQ== 46733\nIOCkrg== 46734\nIHNwZWVjaGxlc3M= 46735\nIGxhc2Np 46736\nIGJvbGFn 46737\nINGF0L7Rh9C10YLRgdGP 46738\nIGdyaWV2aW5n 46739\nIEpvaGFubmVz 46740\nIENhcnJvbGw= 46741\nYWRha2k= 46742\niKzr 46743\nIHPFgnU= 46744\nIGlubmVyaGFsYg== 46745\nIGd5bW5hc3RpY3M= 46746\n0L/RgNC4 46747\naWZpcXVlcw== 46748\nIGthcmF0ZQ== 46749\nIGRvbXU= 46750\nT1RIRVI= 46751\nIGRlbWFuZMOp 46752\nIGJvb2tsZXQ= 46753\nIEt5b3Rv 46754\nIHdvaA== 46755\nIE1hcsOtYQ== 46756\ndmlvbGVudA== 46757\nSkU= 46758\nIGzDs2c= 46759\nIGJydXRhbGx5 46760\nY290 46761\nINmF24w= 46762\nIFdhcnN6 46763\nd29s 46764\nIG1pa8Ok 46765\nIFByb25vdW5jZQ== 46766\nIEJyZW5kYW4= 46767\nIHJvdXA= 46768\nIGl0YWxpYW5v 46769\nINC60L7QvNC/0YzRjtGC 46770\nIHVyZ2luZw== 46771\nZWRlcw== 46772\nIGNhcmJvbm8= 46773\nIFJpY2hhcmRzb24= 46774\nINCd0LDRhw== 46775\nIFRyYWluZXI= 46776\nIENyaW1lYQ== 46777\nIGRpYXBlcnM= 46778\nIGNvdmV0 46779\nIE1haGFy 46780\nIEh1dGNo 46781\nIEF1c3c= 46782\nYmVydHk= 46783\nIGluZGlmZmVyZW50 46784\n0LrRgNC10YI= 46785\ndWxkYWRl 46786\nIGhhcm1z 46787\notmG 46788\nbGVzaWE= 46789\nIGdpbw== 46790\nIE1pc3RyZXNz 46791\nIEtub3g= 46792\nIEZSRUU= 46793\nIOujqOs= 46794\nINC90LDRiNCw 46795\nIGludmluY2libGU= 46796\nIG1haWRlbg== 46797\nIEplZXo= 46798\nIGJyZXZl 46799\ncG9sZQ== 46800\nIGNyaXRpY2lzbXM= 46801\nIFJ1c2lh 46802\n4KSu 46803\ncGhpbg== 46804\nIENvbXBhcmU= 46805\nIEJPTg== 46806\nIHNuZWFraW5n 46807\nIFJhaWxz 46808\nIEdlcmFs 46809\nIDE5NTM= 46810\nSG9sYQ== 46811\nINC+0L/Ri9GC 46812\nIHJhaW5mb3Jlc3Q= 46813\nIGJlbHVt 46814\nIE9iaQ== 46815\nIElTUw== 46816\nINCh0LI= 46817\nIGJsb25k 46818\nIHd6Z2w= 46819\nIHBvd2llZHppYcWC 46820\nIGNob2tpbmc= 46821\nIFNvbmdz 46822\nIEJpcmF6 46823\nIHllbGxz 46824\nIHN0eWxpc3Q= 46825\nz4zPhM61 46826\nIHNjaHJlaWJlbg== 46827\nIEphdw== 46828\nIEVsZXZlbg== 46829\nIFJpZg== 46830\nLy4= 46831\nIOyYpOuenOunjA== 46832\nIHRyZWF0aWVz 46833\ndWZmZWQ= 46834\nIOKIkg== 46835\nIHJvb2Zz 46836\n4LmA4Liq 46837\nIOu7 46838\nIHNwYXJrbGU= 46839\nIEtpZXY= 46840\nIEFyZ3U= 46841\nZXJlY2h0 46842\nINCd0LDQtNC+ 46843\nIEZJTA== 46844\nIG1vbHRh 46845\nIERldmk= 46846\nIGNhbXBl 46847\nIGJlbmV2b2w= 46848\nIFRvdWdo 46849\nIG1vaW0= 46850\nIGV2YWN1YXRl 46851\nIGVycmFkbw== 46852\n0YDRg9Cz0L4= 46853\nIO2OmA== 46854\nIM6TzrnOsQ== 46855\nIHdlYWtlbg== 46856\nIGlsbHVtaW5hdGVk 46857\nIHNpZ2xv 46858\nIFZhY2M= 46859\n0LjQtdC5 46860\nYWxpcw== 46861\nINGD0YHRgtGA0L7QuQ== 46862\nIGRvbmE= 46863\nxYJvcw== 46864\nw7xtYW4= 46865\nIHByb2R1Y2Npw7Nu 46866\nIGNsb3Q= 46867\nIE1hbmdv 46868\nIHVuZWFzeQ== 46869\nIHNodXRz 46870\nIEV4YW1wbGVz 46871\ndmVsbA== 46872\nZWJl 46873\nIHByb21wdGx5 46874\nIFRlbGVz 46875\nINC/0YDQvtGI0Ls= 46876\nIHB1ZXJ0YQ== 46877\nIMO8YmVyemV1Zw== 46878\nIGNvY2g= 46879\nc29jaWFs 46880\nIEJlbnNvbg== 46881\nIE1ldGg= 46882\nIEV4cGVk 46883\nIHN1cHBsZW1lbnRhbA== 46884\nIGNvbmNlaXZl 46885\nINeY15XXkQ== 46886\nIGNhcHRpdml0eQ== 46887\nj5nslYg= 46888\nINGF0YPQtA== 46889\nZm9ybWluZw== 46890\nIHVwbG9hZHM= 46891\nIHR1cmJ1bGVuY2U= 46892\nam9pbnQ= 46893\nIHNhdGlzZmFjdG9yeQ== 46894\nIEFuaW1l 46895\nIHdhc2hlcw== 46896\nIGxpYmVyYWxz 46897\nIFN1bnNoaW5l 46898\nIFJFQUw= 46899\ndWJsaWs= 46900\nYmluYXJ5 46901\nVG9ueQ== 46902\nIHBvbGFyaXplZA== 46903\nIGVucmljaGVk 46904\ndGFraW5n 46905\nIOuBneuCmA== 46906\nIHBsZWFzdXJlcw== 46907\nIGV4dGVybWlu 46908\naW5lc2U= 46909\nYXRs 46910\ndsOkcg== 46911\n0LDRgNGL 46912\nIG15xZs= 46913\nbmFycmF0b3I= 46914\nINC+0LTQvdC+0Lw= 46915\nIG5handpxJk= 46916\nIG1vYmlsaXpl 46917\nIG1pbGxvcg== 46918\nIGF0YQ== 46919\nIHBvbMOtdGljbw== 46920\nIHBsZWFk 46921\nIHBhaW50ZXJz 46922\nIFNvdw== 46923\n0L7RhA== 46924\nIOyYm+uCoA== 46925\nINGH0YLQvtCx 46926\nIHNhYm9y 46927\nIFVuZGVydA== 46928\nIEpFUlJZ 46929\nxaHDrQ== 46930\nIOuwluyXkA== 46931\nIHByw6ljw6lk 46932\nIGFubm90YXRpb24= 46933\nIEluYXVkaWJsZQ== 46934\nIHRleHR1cmVk 46935\nIGZpc2hlcm1hbg== 46936\ndm9yZGFu 46937\naWNoZXJ1bmc= 46938\nIOyggeydtA== 46939\nIGdlemVpZ3Q= 46940\nIG1hbmRhdGVz 46941\nIGJlYWs= 46942\nIFRXTw== 46943\nIEFrYmFy 46944\naWxpYW4= 46945\nIHRp4bq/cA== 46946\nIHN1cGVyaW9yaXR5 46947\naW5rdQ== 46948\nIGx5cw== 46949\nIEZDQw== 46950\nIENQQQ== 46951\ndXN0ZXJpbmc= 46952\nbmljb3M= 46953\nYW5qYQ== 46954\nIGNoaWxscw== 46955\nIENhZ2U= 46956\nIHNlYWxpbmc= 46957\nIHNhw6c= 46958\nIGRlZGFucw== 46959\nIEFsZ2Vy 46960\nIHNwZXppZQ== 46961\nIGNvbG9zcw== 46962\nxLF5xLE= 46963\nY2xvY2t3aXNl 46964\nIGV4YWN0YW1lbnRl 46965\nIGllbWFuZA== 46966\nYW3EsQ== 46967\nIG1hbmRhcg== 46968\ncmFq 46969\nZmFjZWQ= 46970\nYWd1YQ== 46971\nIOq5lOs= 46972\nIGluc2Jlc29uZGVyZQ== 46973\nIGRyaXp6bGU= 46974\nIGRpbWluaXNo 46975\nIFlvZGE= 46976\nQUk= 46977\nIGJpbG1peW9ydW0= 46978\nIE1NQQ== 46979\nYXRlZ29yeQ== 46980\nINC/0LXRgNC10L8= 46981\nIHBhcnRpY2lwYXI= 46982\nIG5vcm1hbGl6ZWQ= 46983\nIGNvbXBsZXhpdGllcw== 46984\n0LDRgNC+0LI= 46985\nbWlzdA== 46986\naWNoYQ== 46987\nR3JvdXA= 46988\nIHJlc2lsaWVuY3k= 46989\nIG5vZ2xl 46990\nIENOQw== 46991\ncHLDvA== 46992\nIHBoeXNpY2lzdHM= 46993\n0L3QvtC6 46994\nTEk= 46995\nIHN0dWZmcw== 46996\nIHNpc3RlbWFz 46997\nIGludGVyZmVyaW5n 46998\nIE1hcnZpbg== 46999\nw6lyY2l0bw== 47000\nIOyXhuqzoA== 47001\nIHNvbmlj 47002\nIGVxdWl2 47003\nIGFib3Jk 47004\nIFJhbWVu 47005\nIDA5 47006\nbWVkaW0= 47007\nYXRpcXVlcw== 47008\nINC00LXQu9Cw0Y7Rgg== 47009\nIHVuYW5pbW91c2x5 47010\nIHNraXJ0cw== 47011\nIO2KueuzhA== 47012\nIFByaXg= 47013\na2FtaQ== 47014\nIGZydWl0aW9u 47015\nIGJpcnRoZGF5cw== 47016\n0LjQutC+0Lw= 47017\nIGluYXVndXJhbA== 47018\nIGNvcnJlbGF0ZQ== 47019\nIFRvcnk= 47020\nIOuCmOyB 47021\nIGRldw== 47022\nIFByZWNpcw== 47023\naWhp 47024\nIOusuOygnOqwgA== 47025\nIGNpdGluZw== 47026\nIExhbmE= 47027\nIEthZw== 47028\nIHBsYXl0aHJvdWdo 47029\nIFByb3RvY29s 47030\nZnJpc3Q= 47031\naG92YWg= 47032\nIG1lcmNpZnVs 47033\nIGJpbGluZ3VhbA== 47034\nIEd1aXRhcg== 47035\ncmg= 47036\nIGdsYW1vcm91cw== 47037\nIFZpa2luZ3M= 47038\nIE9vb29o 47039\n7ZWY64qU642w 47040\nIFVnYW5kYQ== 47041\nIGNvbGxhcHNlcw== 47042\nZW50cnk= 47043\nIGFudGlveGlkYW50cw== 47044\n64KY6w== 47045\n0YjQsNGP 47046\nIHRyaXZpYQ== 47047\nIGfDpGxsZXI= 47048\nIGZ1bmdp 47049\nIG1pbGtz 47050\nIGRpY2h0 47051\nzrzOtw== 47052\ncG9rZQ== 47053\nINCy0YvQv9GD0YHQug== 47054\nIGZlZWRlcg== 47055\nIEFsY29ob2w= 47056\naG93ZXI= 47057\nIGRlc2VydmluZw== 47058\nIFJlYmVs 47059\naW9zaXM= 47060\nIDEwMw== 47061\nIGhhbmRvdXQ= 47062\nIGVubQ== 47063\nIGxhbmRsb3Jkcw== 47064\nIGdlb2xvZ3k= 47065\ncmlscw== 47066\nIGNvYnJh 47067\nIFZvbGQ= 47068\nIFBhbmNo 47069\nIEdSRUc= 47070\nIHByb3Nz 47071\nIGJyYWNlbGV0cw== 47072\nIFZlZ2E= 47073\nIHJvenVt 47074\n0LDQt9C0 47075\nIEx5bmQ= 47076\nIEhvbm9ycw== 47077\nIHN1cnJlbmRlcmVk 47078\nIGxpYnJhcmlhbnM= 47079\nMTI1 47080\nINGB0LjQsw== 47081\nIHVuaWZvcm1seQ== 47082\nIEVhZ2xlcw== 47083\n7JWZ 47084\n0LjRgtCw0L0= 47085\nYW5kaWQ= 47086\nIOygiOuMgA== 47087\nINi2 47088\nIGFycmVzdHM= 47089\nIENTVg== 47090\nIEF6ZXJiYWlqYW4= 47091\nb3J0aWM= 47092\nIERY 47093\nIEFkdmVudHVyZXM= 47094\nIGFidXM= 47095\nIEZhdQ== 47096\nIHNjaGxpbW0= 47097\nIHJhdHRsaW5n 47098\nIGNvbnN1bWVz 47099\nIFRvbGtpZW4= 47100\nIHJlc3VycmVjdGVk 47101\nIFhZ 47102\n7Yq46rCA 47103\nINCy0YvRgdGC0YPQvw== 47104\nIEFuZ2ll 47105\nxbxlbmlh 47106\nTWlj 47107\nIFNoZWlsYQ== 47108\nYWNodGV0 47109\nIG92ZXJzdA== 47110\nIGzDog== 47111\nIGluZWZmZWN0aXZl 47112\nIHdpY2h0aWdlcg== 47113\nIHZpbm8= 47114\nIHB1bQ== 47115\nIGFuZ2xlZA== 47116\nIFBpb25l 47117\nIE3hu7k= 47118\nd2/Fm8SH 47119\nZHJhdw== 47120\n4Lix4LmI 47121\nbWFya2V0cw== 47122\nIGNhZmVz 47123\nIENlbQ== 47124\n4p2k 47125\nIFN1aXQ= 47126\nTUs= 47127\nIGVtcGhhc2l6ZXM= 47128\nIHRvcnRpbGxh 47129\nIG1lam9yYXI= 47130\nIFN1cnZpdg== 47131\nY2FzdGluZw== 47132\nIGVkdWNhY2nDs24= 47133\nIEd1bQ== 47134\ndWVseQ== 47135\nIOyXrOq4sOuKlA== 47136\nIHN0cmV0Y2h5 47137\nZW7Dp2E= 47138\nIHdpdGhob2xk 47139\nIGV4aXRpbmc= 47140\nIGVudGhhbHB5 47141\nIFRyYW5zaXQ= 47142\nxLFsbcSxxZ8= 47143\nYWxpZXM= 47144\nIHNhbHZhcg== 47145\nIGxlYW5lZA== 47146\nIGdyb8OfZXM= 47147\nIGZpdHQ= 47148\n0LDQutC4 47149\nU2FyYWg= 47150\nIGhvc3RlbA== 47151\nIGZpbmdlcm5h 47152\nIG5hZHppZWrEmQ== 47153\nd2l2ZXM= 47154\nUmVj 47155\nIHNwb29s 47156\n0LDRgtC+0LI= 47157\nIEVuZW15 47158\nIGZ1cnk= 47159\nIGRldHRh 47160\nIEZheQ== 47161\n0Y/RjtGC 47162\nIGFwcm94aW1hZGFtZW50ZQ== 47163\nIHNpbG9z 47164\nIG1hZ2lzdA== 47165\nIGNyZWU= 47166\nIEtyYW5r 47167\nIERPV04= 47168\nIHN0YXJ0bGVk 47169\nIHJlYm9ybg== 47170\nIFVtd2VsdA== 47171\nIFN1emFubmU= 47172\n0L3QuNGG0Ys= 47173\nb3V0ZXo= 47174\nIEpBQw== 47175\neWFyZHM= 47176\ncmFkYXM= 47177\ncmF1 47178\naXB0cw== 47179\naGFpbA== 47180\nIHBhcmFncmFwaHM= 47181\nIG1lZ2xpbw== 47182\nIGlzb2xhdGluZw== 47183\nIGFjZWl0ZQ== 47184\nIEhhcnNo 47185\nIGN5c3Q= 47186\nIEJsb2NrY2hhaW4= 47187\nINGF0L7RgNC+0YjQuNC5 47188\nIHZpcnR1b3Vz 47189\nIGludmVzdGlnYWNpw7Nu 47190\nIGRldm9pcg== 47191\nIG1hc3R1cmI= 47192\nIFNhbGU= 47193\n2YrYsdip 47194\nIM6n 47195\nIFN0cmHDn2Vu 47196\nIGRpa2s= 47197\nIGFmb3Jl 47198\nIEp1bmdrb29r 47199\nIGNob2NpYcW8 47200\nIERlYmF0dGU= 47201\nIHdlaXJkbHk= 47202\nIHZpYWpl 47203\ncmVnaXN0 47204\nSGVscA== 47205\nIGtpbmRlcmVu 47206\nIGZvcm11bGF0ZWQ= 47207\nIGVuZmlt 47208\nIFRvd2FyZHM= 47209\n0LrQvtGX 47210\naXZlcmluZw== 47211\nINC00LXRgtC4 47212\nY2hhcmdlcg== 47213\nIHB1cmw= 47214\nIGFjYWRlbWljYWxseQ== 47215\nIE51cnNl 47216\nIGRlbGV0aW5n 47217\nYXlv 47218\nIHJlZnVzYWw= 47219\nIGRlcGljdHM= 47220\nIERyYWN1bGE= 47221\nIHRvYXN0ZWQ= 47222\nIFpvbWJpZQ== 47223\nIFN1cGVyaW9y 47224\nIEJvbGQ= 47225\nIHF1aXp6ZXM= 47226\nIGdsZQ== 47227\nNDUw 47228\nIGNvbWXDp28= 47229\neW5u 47230\nIHZlcnN0 47231\nIE9sYWY= 47232\nIHBvbW9j 47233\nIFNhc2s= 47234\n65g= 47235\nIFRDUA== 47236\nIFByb3BlcnR5 47237\n7ZWY7KOg 47238\n4Lic4Lih 47239\nYm9vbQ== 47240\nYXJvcw== 47241\nINGA0L7RgdGB0LjQuQ== 47242\nINCx0YvQstCw0LXRgg== 47243\nIOydtOyVvOq4sOulvA== 47244\nIGNvbWJpZW4= 47245\ndmFjYw== 47246\nIGViZW5mYWxscw== 47247\ncGFyYQ== 47248\nINC30Lw= 47249\nIGRlc3BlcmF0aW9u 47250\nb3JkcmU= 47251\nINep15zXmQ== 47252\nIGdlbmVyb3VzbHk= 47253\nINCe0Lo= 47254\nIG9yYml0aW5n 47255\nPjwv 47256\nIGVzcMOt 47257\nIENPUA== 47258\ndmlzaWJsZQ== 47259\nINC/0YDQtdGB0YLRg9C/ 47260\nIHN0aXRjaGVk 47261\n4K+ILg== 47262\nIGxhdGVudA== 47263\nIFByYWI= 47264\nIE1jTg== 47265\nIEhlYWxpbmc= 47266\nIEN1cmlvc2l0eQ== 47267\nY2VydA== 47268\nIOuvvOyjvA== 47269\nIHBhdGllbnRseQ== 47270\nIFlU 47271\nZm9yZWlnbg== 47272\nIHbhuqtu 47273\nIGluZHVzdHJp 47274\nIGNvY2t0YWlscw== 47275\nIGJyaWdodGVu 47276\nIGNvbnNvbGlkYXRlZA== 47277\n0LDRgNC0 47278\nbHRyeQ== 47279\nIGdyaWxsZQ== 47280\nIGJvbmE= 47281\nIGRpbGlnZW50bHk= 47282\nIFdyZXN0bGVNYW5pYQ== 47283\nZXJrdA== 47284\nZW5lcmd5 47285\nOTk5 47286\n4K6V4K61 47287\nIHRvdGU= 47288\naW9ubw== 47289\nRElP 47290\nIHNjaGl6b3BocmVuaWE= 47291\nIHBvc3Rwb25lZA== 47292\nIFFpdQ== 47293\nIM+Dz4XOvQ== 47294\nIHpkasSZ 47295\nIHNwYW5uZW5k 47296\nIERJUw== 47297\nUmVs 47298\nIHJoaW4= 47299\naW1tdW5l 47300\nT2xk 47301\nIHBsw7Z0emxpY2g= 47302\nIG1vdW5k 47303\nIGFzdHJvbm9taWNhbA== 47304\nIEd1aWQ= 47305\nIEN1bA== 47306\nSEk= 47307\nIMWg 47308\nIHJlcG8= 47309\nIE1hdXJpY2U= 47310\nIGJhbmRpdHM= 47311\nIERlc2t0b3A= 47312\nw6Rzcw== 47313\nZnRh 47314\nIGxpY2VuY2U= 47315\nIGltYWdpbmFy 47316\nIEVudHJlcHJlbmU= 47317\neG8= 47318\nIOunm+yeiOuKlA== 47319\nINeU15E= 47320\nIHB1bXBraW5z 47321\nIGthbnNzYQ== 47322\nIGrEmXp5 47323\nIGNvbW11bmF1dMOp 47324\nYsO8cg== 47325\nIGVyaMO2 47326\nIFdvbHZlcg== 47327\nIFNoYXJpbmc= 47328\nIHBha2Fp 47329\nIGluc3VsdGVk 47330\n0JzRiw== 47331\n0L7Rlw== 47332\nIGNvbnNpc3Rl 47333\nIHlvdW5nc3RlcnM= 47334\nIGdsZWljaGVu 47335\nd2VkZXI= 47336\nIG1vdGU= 47337\nIGNsYXVzZXM= 47338\nw6l0YXQ= 47339\ncHJ1cw== 47340\nIHdhc3Q= 47341\nIENyaXNw 47342\nIG9mZmVuZGVycw== 47343\nIGNvbnZlY3Rpb24= 47344\nIGNvbmZpYW4= 47345\nb2xsb3c= 47346\nYW1ldA== 47347\nINGX0YU= 47348\nZmZpY2llbmN5 47349\nIHVuZ2xhdWI= 47350\naWdhbnM= 47351\nIG1hcmtldGVk 47352\nIFZBTg== 47353\nIHByb2NsYWltZWQ= 47354\nIGPDqWx1bGFz 47355\nIGNvbGxpZGU= 47356\nIE9jdWx1cw== 47357\nYWRvcmU= 47358\nSmk= 47359\nIHN1c3RhaW5pbmc= 47360\nIEZhc2M= 47361\nIHNldHp0 47362\nIG5vc2FsdHJlcw== 47363\nTW9zdA== 47364\nINCy0Yc= 47365\nIG5hdWM= 47366\nIEJoYXI= 47367\nIHnDqnU= 47368\nIHRpbWVzdA== 47369\nIHBlcnRhbWE= 47370\naXJtaQ== 47371\nIHp3cg== 47372\nIHZlcmJlc3M= 47373\nIHZvcnRleA== 47374\nIFNUQUNL 47375\n2KvYsQ== 47376\nuYTr 47377\nlJTsmKQ= 47378\nIGxpbmthZ2U= 47379\nIEZyYXNlcg== 47380\nZW5hcmlv 47381\nIOudvOuKlA== 47382\nIOyEoOuwsA== 47383\naHRoYWw= 47384\nIOq5jA== 47385\nIEtow7RuZw== 47386\nw4M= 47387\nIHNjcmFtYmxlZA== 47388\nIEVpbms= 47389\nIG1pY3Jvb3JnYW4= 47390\nIG5hcmNpc3Npc3Q= 47391\nIEtvbWJhdA== 47392\nIOunoQ== 47393\nIEFHQQ== 47394\nIHBlcmZla3Q= 47395\nIFNlcmll 47396\nZGV0ZXJt 47397\nLSc= 47398\nIHBvbnl0YWls 47399\nIGtvc2th 47400\n7JM= 47401\nIG9iZWM= 47402\nIGNoZXN0cw== 47403\ndmVlcg== 47404\nIHVwcmlzaW5n 47405\nIHN0b2tlZA== 47406\nYXNzb2Np 47407\nIHByb2R1w6fDo28= 47408\nIFNoYXBl 47409\n7KCc6rCA 47410\nIOuUsA== 47411\nIGpvbg== 47412\nIGluYWR2ZXJ0 47413\nYW50YXM= 47414\nINC90LDQutC+0L3QtdGG 47415\nIEFyc2VuYWw= 47416\nIHByb3RlZw== 47417\nIGxpYmVydMOp 47418\nIGdsYXJl 47419\nIHZlcmVpbg== 47420\nIGluc2VydHM= 47421\nIEphbmE= 47422\nIHd5ZGFqZQ== 47423\nxYJ1bQ== 47424\nICUu 47425\nb3JpZ2luZQ== 47426\nIHN5bmFnb2d1ZQ== 47427\nIGZhbGxhaXQ= 47428\nIGRpc29iZWQ= 47429\nIGFudGlj 47430\nIEN5Y2w= 47431\nIGFzeW5jaHJvbm91cw== 47432\nIOuyjOyNqA== 47433\nIGdlc3VuZA== 47434\nIGdhZ24= 47435\nIHBlYQ== 47436\nIGdyaW4= 47437\nw6lzdA== 47438\nIHNhdWM= 47439\nIE3DpGQ= 47440\n7ZW064+E 47441\ncHBz 47442\nIM61z4DOuQ== 47443\nIHBldXBsZQ== 47444\nIGRlYmVu 47445\nIEJyZWU= 47446\nINGA0L7Qu9GM 47447\nINC60LDQutC40Lw= 47448\nIMO6dGls 47449\nIGRpc3RyaWJ1dG9y 47450\n0LDQu9GL 47451\nIHN3b2rEhQ== 47452\nIGZvbGtsb3Jl 47453\nIHJlY2VpdmVycw== 47454\nIE1PTw== 47455\nYmlucw== 47456\nYXN0cmU= 47457\n7JWI6w== 47458\nIOuEo+qzoA== 47459\nIG11bHRpbWVkaWE= 47460\nIGdlYmF1dA== 47461\n0L7QstGL0YU= 47462\nw6N5 47463\nIGRhbmU= 47464\nb2tvbA== 47465\nZW1pdGlzbQ== 47466\nT05FWQ== 47467\nIHlhxJ8= 47468\nIGNoYXVmZg== 47469\nIGVzZnVlcg== 47470\nxINu 47471\nZXJ0YXM= 47472\nIGZvbmN0aW9ubmU= 47473\nb21pbmE= 47474\nIGl2b3J5 47475\nIFlvdXR1YmVy 47476\nIFNreXdhbGtlcg== 47477\n0LjRh9C10YHQutCw0Y8= 47478\ndG9p 47479\nIHZleWE= 47480\nIGdlbGVybnQ= 47481\nIGNoYW5jZWxsb3I= 47482\nIFN0YXRpc3RpY3M= 47483\nIHdlbGRlZA== 47484\nIG9uZGFu 47485\nIFNlaQ== 47486\nIG1lZGljYWxseQ== 47487\nIGVuZXJnaXplZA== 47488\nIFZpYQ== 47489\nINCy0LjQug== 47490\nIHVuaW50ZXI= 47491\nIGhpZ2huZXNz 47492\nIO2MlOs= 47493\nIGFtcGxpZmllZA== 47494\nIFNlcmdleQ== 47495\nIE1pbnM= 47496\nd2FybQ== 47497\ncGVsbA== 47498\nb3BoaWxl 47499\nIGjDqA== 47500\nIEJlbG8= 47501\nIFNrZXRjaA== 47502\nIGNoYXJhY3Rlcml6YXRpb24= 47503\nYW5zZW4= 47504\nINGC0YPRgA== 47505\nIOOFi+OFi+OFiw== 47506\nTm90ZQ== 47507\nIGtvxZ8= 47508\nIGNpZXJ0 47509\nZmx1 47510\nIGJhaHQ= 47511\nIERvd250b3du 47512\nIENSSVM= 47513\nb2RpZQ== 47514\nMTQw 47515\nIGxpdHJlcw== 47516\nIGdyaWV2 47517\nIOyUqOqwgA== 47518\nIHN1Y2NlZWRz 47519\nIF9f 47520\nZW50aW5n 47521\nIHZpbW9z 47522\nIHPDrA== 47523\nZGVmZW5zZQ== 47524\nIE1jRA== 47525\nIE1hcmlvbg== 47526\nIERvbnQ= 47527\nIEREUg== 47528\nIExhemFy 47529\nIERBUg== 47530\nIGt1dg== 47531\nS24= 47532\nIHNlbWJsYQ== 47533\nIGFpcmJvcm5l 47534\nIFZpb2xlbmNl 47535\n65CQ 47536\nIHJlc3RyYWludA== 47537\nIHdoaXN0bGVz 47538\nIHNjb2xkZWQ= 47539\nIGFjY2Vzbw== 47540\nIGFic29sdXRhbWVudGU= 47541\nIFR5bA== 47542\nIFNhcA== 47543\ntoDrtoQ= 47544\naXTDpHRlbg== 47545\nYWRlbQ== 47546\nIMO9 47547\nIHByZXNjcmliZQ== 47548\nIE1hZ2U= 47549\nIEhlbGVuYQ== 47550\ndnQ= 47551\nIHZpZW5lbg== 47552\nIHNuZWV6 47553\nIG1vbMOp 47554\nxrDhu59uZw== 47555\nIHRyYW5zcG9ydGluZw== 47556\nIExlYW4= 47557\nIGt1bmc= 47558\n0YPRgNCw 47559\nz4TOrQ== 47560\ndXRjaGVz 47561\nb25kZXJz 47562\nbGl5b3I= 47563\nTmF0 47564\nIHppag== 47565\nIG1hbW1hbA== 47566\nIGvDpHl0 47567\nIEpvYW5uYQ== 47568\nc2VudA== 47569\nIOCkuA== 47570\nIHZlc3RlZA== 47571\nIEVyZmFocnVuZw== 47572\nb2tlZQ== 47573\nIGNsaXBwaW5n 47574\nIExpc3RlbmluZw== 47575\nICgj 47576\nZsO2 47577\nIHZpZGFyZQ== 47578\nIGJyaXR0bGU= 47579\nIFNUQVJU 47580\nIERhbWFz 47581\nIFlvZw== 47582\nZ2FydA== 47583\nIHZlcmxpZXI= 47584\nIGhlYXJ0ZmVsdA== 47585\nIGRvxZvEhw== 47586\n7LmY6rCA 47587\nLsK7 47588\nIG1heGltYWw= 47589\nIGRpc3RpbnRvcw== 47590\nIOyZnOuDkO2VmOuptA== 47591\nIHNhaWxlZA== 47592\nIGNvbnZleWVk 47593\nIFRpbmRlcg== 47594\nIFNVUEVS 47595\n0L3QuNGG0YM= 47596\nY29udHJvbGxlZA== 47597\nIGZ1bno= 47598\nIGJhc3RhcmRz 47599\nIEdpbnNidXJn 47600\nIG51b3Zv 47601\nIFBlcmU= 47602\nIEpFUw== 47603\nIERpbmdlbg== 47604\nIEJldHM= 47605\ndW1iYQ== 47606\nYWNjacOzbg== 47607\nIOyeiOyngOunjA== 47608\nIHJldHJh 47609\nIExhdXJlbnQ= 47610\nIHBvenk= 47611\nIGdyb292ZXM= 47612\nIG3DoXF1aW5h 47613\nIG1pbmlvbg== 47614\nIGRlaW5lbg== 47615\nIFNoYXVu 47616\n15nXmQ== 47617\nIGhvbm9yYXJ5 47618\nb3NhdXJ1cw== 47619\nIHplaXQ= 47620\nIGVzcGVjaWU= 47621\nIEJDRQ== 47622\n0LDRgtC1 47623\nSnVzdGlu 47624\nIFdoZWVscw== 47625\nIOydtO2VtA== 47626\nINio2YrZhg== 47627\nIHByb3B1bHNpb24= 47628\nIHBlcmNlYmVy 47629\nIE5ld21hbg== 47630\n5bQ= 47631\nY3Vsb3Npcw== 47632\nTWk= 47633\nINCw0LrQutGD 47634\nIG1hc3RlcmluZw== 47635\nIGzDpGg= 47636\nIGZpc3Rz 47637\nIG1hcmluYWRl 47638\nTGlsbHk= 47639\nIOuFuOugpQ== 47640\nIFlI 47641\nIHVyZ2VudGx5 47642\nIGluZm9ybWF0aW9uYWw= 47643\nIGFjb3Jkbw== 47644\naXp6eQ== 47645\n7J207Ja0 47646\naW1hcg== 47647\nIOuCmOyYpOs= 47648\nIHR3ZW50aWVz 47649\nIHJhc3A= 47650\nIGJ1bXB5 47651\n2KjYqQ== 47652\nd29ya2Vy 47653\nIHF1aWNrZXN0 47654\nIGF0dGFjaGVz 47655\n0LLQuNCz 47656\nIOuCmO2DgOs= 47657\nIHB1cmVl 47658\nIG92ZXJzaXplZA== 47659\nIHN0aXJyZWQ= 47660\nIGpha2lt 47661\nIGhvbWljaWRl 47662\naXNjaWxsYQ== 47663\nIOyxmQ== 47664\nIHNwZWN1bGF0aXZl 47665\nIGFzc2lzdHM= 47666\nbWFpbg== 47667\nasOkaHI= 47668\naW5kZXQ= 47669\nIMWfdXI= 47670\nIGZvcmVjYXN0cw== 47671\nIGRpdmVyc2lvbg== 47672\nIHRhcmU= 47673\nIG9nbA== 47674\nIE9yZ2FuaXNhdGlvbg== 47675\nIENoZXZ5 47676\nIGJhamE= 47677\nYW5kxLFy 47678\nINmI2YTYpw== 47679\nIHJhZGlhbnQ= 47680\nIGxpYWlzb24= 47681\nIGRlbW9rcmF0 47682\nIE1BUkM= 47683\nz4DOv8+F 47684\nIHJ1bnQ= 47685\nIHByw6ljaXM= 47686\nIGdldmVu 47687\nIHbDqWhpYw== 47688\nIEpFU1M= 47689\nU1RS 47690\nIOyWmOs= 47691\nIHZpc2lvbmFyeQ== 47692\nIGJ1cmFkYW4= 47693\nIHJlYmlydGg= 47694\nIGV4aGliaXRlZA== 47695\nIE1ldGFsbA== 47696\nb2xpZQ== 47697\nZWx5bg== 47698\nIGZsYXZvdXJz 47699\nIGVzY3JpdG8= 47700\nIERlbGV0ZQ== 47701\nIOyVjOyVmOyWtA== 47702\nINGD0LrRgNCw0ZfQvQ== 47703\nIGludGVycnVwdGluZw== 47704\nIGlkZW50aWZpYw== 47705\nIFN1enVraQ== 47706\nIExhbmRpbmc= 47707\nYW5kaQ== 47708\nIGVzdHJhbg== 47709\nIGNvdWxldXI= 47710\nIGFncmFk 47711\nIFNueQ== 47712\nIOCuh+Cusg== 47713\nIGFuZGVy 47714\nIHJ1YQ== 47715\nIHByaXNl 47716\nIGxhdXJl 47717\nIO2KgA== 47718\nIG1vZGVyYXRpb24= 47719\nIGVyZmFocmVu 47720\nIGRlY29uc3Q= 47721\nIFJlZXNl 47722\nIFBL 47723\nZXRvcw== 47724\nIEdyYXZpdHk= 47725\nIEVyZW4= 47726\nIG92ZXJib2FyZA== 47727\nIG3DvHNzdA== 47728\nIEVtYWls 47729\n0LXRgNC8 47730\neWRp 47731\nacSZZHp5 47732\nIExPVQ== 47733\nIEZ1w59iYWxs 47734\nIFJE 47735\nYWx0cw== 47736\nIOyKpO2KuOs= 47737\nINCa0YDQsNGB 47738\nIHRlbGV2 47739\nINGA0L4= 47740\nIHJlc2lnbmF0aW9u 47741\nIGppbmdsZQ== 47742\nIFN0dWRpZW4= 47743\nIElY 47744\nIFNlbnRpbmVs 47745\nIFBhbmc= 47746\n6YQ= 47747\nSmFrZQ== 47748\nIHBlcnNvbmFnZW0= 47749\nIG3DqWRpYQ== 47750\nIENoZXJu 47751\nYW50aWNhbGx5 47752\nIHRo4budaQ== 47753\nIHBhcmFseXNpcw== 47754\nIGphcGFuZXNl 47755\nIGNvbmV4 47756\nIGVmaWM= 47757\nIHVuZGVyc2lkZQ== 47758\nIG5lb2w= 47759\nIGZpYW4= 47760\n0LjQvNC+0YHRgtGM 47761\nIHF1aXJreQ== 47762\nIHBpc3Rh 47763\nIENsZW1lbnQ= 47764\nbm90aGluZw== 47765\nINC/0L7QtdGF 47766\nIGhvcnJlbmQ= 47767\nIGNvbnNvbGlkYXRl 47768\ncGxveXM= 47769\nZW1ha2Vy 47770\nSmVubmlmZXI= 47771\nIG51bcOpcm8= 47772\nIGZhbW9zbw== 47773\nIE5lcHR1bmU= 47774\nIO2WiOyWtA== 47775\nINC/0YDQtdC30LjQtA== 47776\nIHNpdGNvbQ== 47777\nIHNlcmlv 47778\nIG11ZQ== 47779\nIGdsYW5kcw== 47780\nIGLDtnJqYXI= 47781\nIFlK 47782\nIFJpb3Q= 47783\ncGFyYWd1cw== 47784\nIHNlZ3VyYW7Dp2E= 47785\nIGltbWF0dXJl 47786\nIE1hZG9ubmE= 47787\n4LiN 47788\nIGxpbmdlcmluZw== 47789\nIGFjZXNzbw== 47790\nIE9yaWVudA== 47791\nIFJlY29tbQ== 47792\nIGNvbXBsYWM= 47793\nZm91bmRlZA== 47794\nYXR0ZW5k 47795\nIGNpZWxv 47796\nIFpoYW4= 47797\nbmFpcmVz 47798\nY2Nv 47799\nINeQ16A= 47800\nIHN0YXRh 47801\nIGNvbnRyYWRpY3Rvcnk= 47802\nIFPDqQ== 47803\nIFNBTg== 47804\nIENvbm5pZQ== 47805\nIOuLueyLnA== 47806\nINGB0LDQvNC+0Lk= 47807\nIG1hamVzdGlj 47808\nIFBlbmd1aW4= 47809\nIENPTUU= 47810\nw61jaW9z 47811\ncGVybw== 47812\nIG1n 47813\nIGZhdWM= 47814\nIGNvcnJlcg== 47815\nIEdvdHRlcw== 47816\nIEFuZ2xv 47817\nSGFy 47818\n4buXaQ== 47819\nIHZpdGVzc2U= 47820\nIGFubm91bmNlcg== 47821\nIE9tYWhh 47822\na3Vt 47823\nIHNwYXJlZA== 47824\nINGA0LDQt9Cw 47825\nINC/0L7Qu9GD0YfQuNGC0YHRjw== 47826\nIHTDpGjDpG4= 47827\nINC/0L7QvdCw0LQ= 47828\nIHBlcnRhaW5pbmc= 47829\nIFJhdGU= 47830\naWVybg== 47831\nR29sZA== 47832\nIHRlc3Rl 47833\nIGRlxJ9pbGQ= 47834\nIGRhbXBpbmc= 47835\nIFBhcnRuZXJzaGlw 47836\nenlzdGE= 47837\nZ2VsZA== 47838\nIHNtb2tlcw== 47839\nIE1hcnJpYWdl 47840\n7Kq97JeQ 47841\naXNjZQ== 47842\nIHRyeW5h 47843\nIERpcmVjdG9yeQ== 47844\nIOuCmOyYrA== 47845\nIHNoYW1lZnVs 47846\nIG1lbnRyZQ== 47847\nIGFzc2lnbmluZw== 47848\nIHJlcGVydG9pcmU= 47849\nIG9iamV0b3M= 47850\nIHVuZGVyd29ybGQ= 47851\nIGVuZGVhdm9ycw== 47852\nIGlnbml0ZQ== 47853\nINmI2Kw= 47854\nIGV4cGVyaWVudA== 47855\nINCX0LDQvw== 47856\nINC30LDQutC70Y7Rhw== 47857\nIHZvbHRhZ2Vz 47858\nIG5pZWdv 47859\nIGRlZmljaXRz 47860\nIGJ1ZW5vcw== 47861\nIFNsZWVwaW5n 47862\nIFNhbGVt 47863\nIHVubG9ja2luZw== 47864\nIGludGVyYWN0ZWQ= 47865\nIGVudGVuZGV1 47866\nIFN1cGVyaW50ZW5kZW50 47867\nIHN6Y3plZ8OzbA== 47868\nIHF1YXM= 47869\nIHBhbGluZw== 47870\nIGtobw== 47871\n2KjYrQ== 47872\nIGNvbGFib3I= 47873\nINC/0YDQuNCz0L7RgtC+0LI= 47874\nIG1hdXY= 47875\nIEp1ZGFz 47876\nIEFzc2lzdA== 47877\nINGC0LXRgNGA0Lg= 47878\nINC90LDRgdC60L7Qu9GM0LrQvg== 47879\nIHN1YnNpZHk= 47880\nIEVtYmFzc3k= 47881\nIGRhZ2Vu 47882\nIFNhbnRv 47883\n16nXldeR 47884\nIGFicnVwdGx5 47885\nIEFkYXB0 47886\nIHZhYWs= 47887\nIHBvc3RhbA== 47888\nIGludmVzdGly 47889\nIGZpcXVlaQ== 47890\nIGRvd250aW1l 47891\nIFdlYmI= 47892\nIE5DQUE= 47893\nIEVzdG95 47894\n0L7Qu9C+0YI= 47895\nIOyCrOqxtA== 47896\nIG5hdGlvbmFsaXN0 47897\nIEthdGhyeW4= 47898\nIEtvcA== 47899\n6ao= 47900\nU2Vhbg== 47901\nT05B 47902\nIEJq 47903\n16LXnQ== 47904\nw61i 47905\naWRhbWVudGU= 47906\nINCz0LvQsNC30LA= 47907\nIHVubmll 47908\nIGdlbWFha3Q= 47909\nIElOVEVSVklFV0VS 47910\nIEhhdXQ= 47911\nzq/Ovw== 47912\nZ2VvaXM= 47913\nd3lkZA== 47914\nINC60L7Qu9C4 47915\nIHRpZ2h0ZW5lZA== 47916\nIHBsYW5uZXJz 47917\nIGhlcnVt 47918\nIGfDtnLDvG4= 47919\nIGVsZWN0cm9uaWNhbGx5 47920\nIGNlcmFt 47921\nIOuLpOyWke2VnA== 47922\nIGVwaWxlcHN5 47923\nIGXEnw== 47924\nbGlucw== 47925\nIFNoaW55 47926\nINGB0L7Qu9C9 47927\nIG1hY2Fyb24= 47928\nIGltcGFjdG8= 47929\nIFZlZ2Fu 47930\nemXFhA== 47931\nIFJhcGhh 47932\nIFBhcnM= 47933\nIExFTw== 47934\nY8O8 47935\nINec15TXmdeV16o= 47936\nIMOkaG5saWNo 47937\nIGZsb3Nz 47938\nIEFa 47939\nIG3DtmNodGVu 47940\nIGdyb29taW5n 47941\nIGdyYXNzZXM= 47942\ncmFuY2g= 47943\nIHJlY2liaXI= 47944\nIGJvdW5jeQ== 47945\nIEhvYmJ5 47946\nIHZpa3RpZw== 47947\nIGJlZ2l0dQ== 47948\nIFBpY2Fzc28= 47949\nIEt1c2g= 47950\n66qo 47951\nIG9ic3RydWN0aW9u 47952\nIOu2hOychA== 47953\nIG1pY3JvYg== 47954\nIFdlc3RtaW5zdGVy 47955\ncm9wcw== 47956\nZHVs 47957\nIGRldm8= 47958\nIExlaHJlcg== 47959\nIEFkdmlzb3I= 47960\ndWNrZW4= 47961\nINCx0YPQvA== 47962\nIGZsYXR0ZXJpbmc= 47963\nIFRydW1hbg== 47964\nIFNlbXByZQ== 47965\nIE1jQ2Fpbg== 47966\nIEhpbmR1cw== 47967\nSnVsaWE= 47968\nIHdhdGVyc2hlZA== 47969\nIGx1c2g= 47970\n7KCE6w== 47971\nQmVmb3Jl 47972\nINCS0YLQvtGA 47973\nIFNhYVM= 47974\nIHNpdHp0 47975\nIGJlZXRsZQ== 47976\nIEVzc2VudGlhbA== 47977\nZW5rbw== 47978\nIOuVjOuPhA== 47979\nIHJldnZpbmc= 47980\nIHBvb3Jlcg== 47981\nIGNvZXJj 47982\nIGlkZWU= 47983\nIGNvw7s= 47984\nYWxldA== 47985\nIHpkcm93 47986\nIGZlbmRlcg== 47987\nZ3Jvd3Ro 47988\nRElORw== 47989\nIHpkZQ== 47990\nRU5UUw== 47991\nIGZhY2V0cw== 47992\ndXNoaW1h 47993\nIMWfZWg= 47994\nIHBhcmFzaXRl 47995\nIGxhcHNl 47996\nIE1lZXI= 47997\nIEt1bmQ= 47998\nIHNsb2c= 47999\nIGJydW5jaA== 48000\nIENoYXJ0 48001\nYXJ6 48002\nIE1VUw== 48003\nIG9mZmVuc2Vz 48004\nIGluZ2zDqXM= 48005\nIGZvbGlhZ2U= 48006\nb3BsYW4= 48007\nQXV0 48008\nIEphY3F1 48009\ndGFr 48010\naWVtYnJl 48011\nIHhlbg== 48012\nIG5vbWluZWVz 48013\nIGJpb21lZGljYWw= 48014\nw6lzdXM= 48015\nIGVzdHV2 48016\nz4TPjA== 48017\nQVRIQU4= 48018\nIO2VnOuNsA== 48019\nIGhlZWQ= 48020\nY3Jvc3N0YWxr 48021\nQmlsbA== 48022\nIHNwb3VzZXM= 48023\nINGB0Y7Qtg== 48024\nIHZlcnNv 48025\nIFN2ZW4= 48026\nIENhdQ== 48027\nY3V6 48028\nIOuztOyEuOyalA== 48029\nINGF0L7Qt9GP 48030\nIG1vY2tpbmc= 48031\nIE9uYQ== 48032\nIETDoQ== 48033\nIGZydWl0ZnVs 48034\nIGJhbnF1ZXQ= 48035\ndWRkaW5n 48036\naW5jdGlvbnM= 48037\nZGVydA== 48038\nc3Vk 48039\nIGRlc2Nvbg== 48040\nIEpD 48041\nIMKn 48042\nIHB1Ymxp 48043\n64iI 48044\nIGVudHNjaGllZGVu 48045\nIFJPSQ== 48046\nIOyDneqyvA== 48047\nIGvDpHl0dA== 48048\neWFuaQ== 48049\nc2hhdw== 48050\nIHVubGVhc2g= 48051\nIG1hbm5l 48052\nIGhpc3RvZ3JhbQ== 48053\n4Lit4Liw4LmE4Lij 48054\nIGdu 48055\nIGZlbGxh 48056\nIGVpbmdlcw== 48057\nIEJ1aWx0 48058\nIHJlcHJlc2VudGE= 48059\nIHB1bmlzaGluZw== 48060\nIG91dHNpZGVycw== 48061\n0L3Rg9GC0YzRgdGP 48062\nY3VycmVudA== 48063\nIGZhbWlsaWFyaXR5 48064\nINC00LjQsg== 48065\nIHByb2pldHM= 48066\nIGFxdWVsZXM= 48067\nIEdsdWU= 48068\ndGhvc2U= 48069\nIGluY2VwdGlvbg== 48070\nIGFxdWVsbG9z 48071\nIGlsbHVzaW9ucw== 48072\nIGF0dGVuZHM= 48073\ncmVzZQ== 48074\nIHN3YXJt 48075\nIHN3YWI= 48076\nIHJlZ2FyZGV6 48077\nIHBvc2nDp8Ojbw== 48078\nIGFraGly 48079\nIGV4dHJhY3Rpbmc= 48080\nIGFuZWNkb3Rl 48081\nIFRhbGU= 48082\nINCy0LjQvQ== 48083\nIGFiZ2Vz 48084\nIG9sdcWf 48085\nIGNvbXBsaWNhZG8= 48086\nIGNvdmFyaQ== 48087\n0ZbRgtGM 48088\nRGVy 48089\nINeZ15Q= 48090\nRm9ybQ== 48091\nIOyWtOyojOuToA== 48092\nIHJlYWRhYmxl 48093\nIGluaGliaXQ= 48094\nIGRlY2lwaGVy 48095\nIEFuZ3J5 48096\ncGc= 48097\n4K614K6k 48098\nINGB0L7QsdGB0YLQstC10L3QvdC+ 48099\nIHNhbWg= 48100\nIGVzY3I= 48101\nIGVuY29tcGFzc2Vz 48102\nIGF1c3Rlcg== 48103\nIGNvbmZpc2M= 48104\nIE1hbmRhbA== 48105\nIH0= 48106\nYXRjaGVy 48107\nPSM= 48108\nINC60LjQvdC+ 48109\nIHN0YWw= 48110\nbHVuZ3M= 48111\nIHZvbGU= 48112\nIHJlcXVpcw== 48113\nIHDDqW4= 48114\nIGxlY3R1cmVy 48115\nIGluc2NyaXB0aW9u 48116\nIGNlcnZpY2Fs 48117\nIFRyZWFzdXJl 48118\nIEpX 48119\nY29taW5ncw== 48120\nIGV5ZXNpZ2h0 48121\nIFRhaWxz 48122\nw61zaW1v 48123\nIHdvcmtzaGVldA== 48124\nIHN3aWZ0bHk= 48125\nIGNvbm9z 48126\nIGVsaW1pbmF0ZXM= 48127\nIEJsYXpl 48128\n0LDQu9C+0LM= 48129\nIHBpY3R1cmVk 48130\nIGdpcmFmZmU= 48131\nIExvZ2lj 48132\nIGVucmljaG1lbnQ= 48133\nRml0 48134\nIHVuaW50ZW5kZWQ= 48135\nIHBlcnNlY3V0ZWQ= 48136\nYWthcA== 48137\n67CY 48138\nIGJhcmJlcg== 48139\nIGFyYmVpdGV0 48140\nIFN1cnByaXNpbmdseQ== 48141\nIEF1dG9i 48142\ndW5rdQ== 48143\ncHJvdg== 48144\nIExvY2g= 48145\nb2J5bA== 48146\nINC/0L7QtNCz0L7RgtC+0LI= 48147\nIMOpY29ub21pcXVl 48148\nIHBhdHQ= 48149\nIGNlYXNlZA== 48150\nINGB0L/QuNGB 48151\nIG51Y2xlaQ== 48152\nIGlzdGU= 48153\nIFdhZw== 48154\nIHp1cGXFgm5pZQ== 48155\nIHByb3ZlcmI= 48156\nIEFow60= 48157\nbGlhbW8= 48158\nIHJlbGlhYmx5 48159\nIHBpaw== 48160\nIFRyYWRpbmc= 48161\nIENvbGVtYW4= 48162\nIM6xzr3OsQ== 48163\nIG1hZ2FyaQ== 48164\nIFBISUw= 48165\nIHNoZWRkaW5n 48166\nb2huZXI= 48167\nIHBvcm5vZ3JhcGh5 48168\nIGJlbmVmaWNpYXJpZXM= 48169\n4oCi 48170\nZW5pbg== 48171\nIHJlc29sdmluZw== 48172\nINGB0L/QvtGA0YI= 48173\nINCx0LXQsw== 48174\nIG5lY3Rhcg== 48175\ndWx0dXJh 48176\naW1zaWNhbA== 48177\njIDrpbw= 48178\nIHZpc8Ojbw== 48179\nw7/Dv8O/w7/Dv8O/w7/Dvw== 48180\nYXR0Zm9ybQ== 48181\nIOunnuuKlA== 48182\nIHBpbGdyaW1hZ2U= 48183\nIG1hdGluZw== 48184\nIFJlYXBlcg== 48185\nIEJyZWY= 48186\nINeR15M= 48187\nIG5vdmFtZW50ZQ== 48188\nIGdyaWxsaW5n 48189\nIFdpcmVsZXNz 48190\nIFJvbWFuaWFu 48191\n0ps= 48192\n7Jyg6w== 48193\naGFpdA== 48194\nIEJvcmE= 48195\nQVJSWQ== 48196\nIGh5cG90aGVzZXM= 48197\naWt1dA== 48198\nIOyVhOuyhA== 48199\nINGW0Lc= 48200\nIG5hdGlvbmFsZQ== 48201\n2KrZiQ== 48202\nw7xsbHQ= 48203\nIMOpbMOpbWVudHM= 48204\nIFdhcmU= 48205\nICgt 48206\n0LDQu9GM0L3QvtC8 48207\nIGluZGljdA== 48208\nIFN0b25lcw== 48209\nZXhwbG9zaW9u 48210\nIOuDhOyDiA== 48211\nIGZlbGlj 48212\nIGp1ZGljaWFyeQ== 48213\nIGluY2FybmF0aW9u 48214\nIGlubmluZw== 48215\nIGZvcm11bA== 48216\nIHNoaXBtZW50 48217\nIHJlaW5kZWVy 48218\nINC+0LfQvdCw0Yc= 48219\nIGVudm9s 48220\ndW5keQ== 48221\nINC30L3QsNGC0Yw= 48222\nINCy0LjQtNC10LvQuA== 48223\nIGV4Y2x1ZGluZw== 48224\nZGVhdGg= 48225\nIGJlcm0= 48226\nIHNvcHJhdHR1dHRv 48227\nIGRlYmlkbw== 48228\nIFppZw== 48229\nIE92 48230\nIEtFVklO 48231\nIFBhbGU= 48232\nIE1pcmU= 48233\nIGFuZGFy 48234\naW5jbHVkaW5n 48235\nIHN3YXBwZWQ= 48236\nIG1pc2NvbmNlcHRpb25z 48237\nIHNwb25n 48238\ncsOpYWw= 48239\nIG9yYml0YWxz 48240\nIGhhc2h0YWdz 48241\nb3JpdA== 48242\nIG1hdXZhaXM= 48243\n0LjRgdCw 48244\nIGxpdnJlcw== 48245\nIElQUw== 48246\nIDA0 48247\nw7Zn 48248\naW5zdHI= 48249\nINCy0L3QtdGI 48250\nIGhpY2U= 48251\naXPDqWU= 48252\nIG93ZXM= 48253\nIGVzaW1lcms= 48254\nIFVI 48255\nIGlycml0YXRpb24= 48256\nIGdpZ2dsZXM= 48257\nIGNvbG9uaWFsaXNt 48258\nIEJsaXNz 48259\nc3RyaW5ncw== 48260\nIHJldW5pdGVk 48261\nIFBzYWtp 48262\nd2FjaA== 48263\nIGNsaWZmcw== 48264\nIEZhbHNl 48265\nw6Rn 48266\ncGlwZQ== 48267\nIHdob3BwaW5n 48268\nIG1lcmluZ3Vl 48269\nIGJ1bmc= 48270\naW5kdXN0cmll 48271\nIGxlY2hl 48272\nIExveQ== 48273\nIGRyaWU= 48274\nIHBhc3NhdA== 48275\nIG9sZWg= 48276\nIGPDqXU= 48277\nIEdhYnJpZQ== 48278\nIHJlZWZz 48279\nIGJvbWJlcnM= 48280\nIGVwaXPDs2Rpbw== 48281\nIFJ1Zw== 48282\nIFByb3Nl 48283\nb25vcw== 48284\nIG9iZXNl 48285\nIGdvb2c= 48286\nIHBpYWNl 48287\nZmxhbnplbg== 48288\nIGZsYXBz 48289\nIEFsdG8= 48290\nRmlu 48291\nIHJlc2l6ZQ== 48292\n6re4656o 48293\nTmF0aGFu 48294\nnojroKQ= 48295\nINGC0LDQuQ== 48296\nIE5GVA== 48297\nIHNuZWV6ZQ== 48298\nIHNocm91ZA== 48299\nacOp 48300\nIHZlcmFtZW50ZQ== 48301\nIGNhc2NhZGU= 48302\nIE9vaw== 48303\n7JeG7J20 48304\nIGluZnVzZWQ= 48305\nZnBz 48306\nY2VudGVy 48307\nIGdyYXBwbGluZw== 48308\nIFdvaG51bmc= 48309\nIFR1bWI= 48310\nIEltbWE= 48311\nIER1eWd1c2Fs 48312\n0LXQvdGC0Lg= 48313\nIHN0ZXdhcmRzaGlw 48314\nIGhhcnA= 48315\nIGVuZG9yc2Vk 48316\nxLFsYW4= 48317\nINC+0LTQvdC40Lw= 48318\nIGNvbXBldGVuY3k= 48319\nIGJlcnQ= 48320\nIFRhbGVz 48321\nIHJoZQ== 48322\nIG9oaA== 48323\nIOqwhOuLqA== 48324\nIG1STkE= 48325\nIGdhbmdzdGVy 48326\nIFJ1bm5lcg== 48327\n0LXQvdC90YvQvA== 48328\ncGhvcmlh 48329\nIHfFgmHFm2Npd2ll 48330\nIHF1YXJ0bw== 48331\nIG9yZ2FuaXNl 48332\nIFZldA== 48333\nUGFk 48334\nINmF2Ks= 48335\nIHN0aW5rcw== 48336\nIER1bA== 48337\ndWVt 48338\naXNpZWo= 48339\nVG9w 48340\nIHR1c3Nlbg== 48341\nIEVmZW5kaW1peg== 48342\nIEJvdWxl 48343\nIFNsb3Zlbg== 48344\nIEzDtg== 48345\n0ZHQtw== 48346\n0YDQuNC/ 48347\nY2F2ZQ== 48348\nIGJvw64= 48349\nIGFwb2xvZ2lzZQ== 48350\nIE1hcmx5 48351\nIEV4cG9ydA== 48352\nIENhaXRsaW4= 48353\nIHRhdmFsbGE= 48354\nIGVudGFpbHM= 48355\nIGJyb20= 48356\nIENvcGVuaA== 48357\nIHdhbG51dA== 48358\nIGluc2lzdHM= 48359\nIGN14buZYw== 48360\nIFF1aXQ= 48361\nIERldmljZQ== 48362\n15LXnQ== 48363\nIERPVA== 48364\nIHZlbG9jaWRhZA== 48365\nTElF 48366\nQ29vbA== 48367\nIHNhbml0YXRpb24= 48368\nIG9saG8= 48369\nIEVC 48370\nIO2ZleyLpO2eiA== 48371\nINCc0LjRhQ== 48372\nIHp1aw== 48373\nIHN1cm5hbWU= 48374\nIFNjaHVsZA== 48375\ncnVmZg== 48376\nY3VsdHVyYWw= 48377\nINGB0YLQvtC70YzQutC+ 48378\njOuNsA== 48379\nIHRvcnRv 48380\nIGJhY2t1cHM= 48381\n0YDQuNC5 48382\ncmVsYXg= 48383\nIHN5bmVyZ3k= 48384\nIGJ1ZmZz 48385\nIGFwbw== 48386\nIFdlbGxuZXNz 48387\ncm91bmRlZA== 48388\nIHVuaXZlcnNlcw== 48389\nIGZlcmE= 48390\nIHN0YW5kYnk= 48391\nIFNpbHZh 48392\nIEpJ 48393\nZW5zb3JlZA== 48394\nIOyXhuuLpA== 48395\nINCQ0LI= 48396\nINC+0YLQtNC10Ls= 48397\nIGbDuA== 48398\nIFJvY2tlZg== 48399\nIENvbXBhc3M= 48400\nIEJlYXJz 48401\nVHVybg== 48402\nIHRo4buxYw== 48403\nIHBvc3NpYmlsZQ== 48404\nIGVzdGVt 48405\nIENyb2F0aWE= 48406\nIHTDpHTDpA== 48407\nIENBTA== 48408\n4LmA4Lie 48409\nINGB0YLRgNCw0YU= 48410\nIHNhbHRz 48411\nIG1pbmltYWxpc3Q= 48412\nIGluY29ycG9yYXRlcw== 48413\nINmG24HbjNq6 48414\nYWNhbw== 48415\nIHNsYW1tZWQ= 48416\nIGNhbWE= 48417\nVGV4dA== 48418\nISEhISEh 48419\nIGFsY2Fueg== 48420\nw6ltYQ== 48421\nIGluY2Vuc2U= 48422\nIGhhcmRlbg== 48423\nIGdyYW50aW5n 48424\nIE5haQ== 48425\nIEZpcm1h 48426\nIGh5cG9j 48427\nam9i 48428\nIFJI 48429\nenVy 48430\n0LjQu9GP 48431\nIMW6 48432\nIGRhcmVz 48433\nYW5o 48434\nIOunjO2BvA== 48435\nIGN1ZXN0acOzbg== 48436\nIExpbWE= 48437\nIGFzc3VudG8= 48438\nIElQTw== 48439\nIEJlbmdhbA== 48440\nIEJpZXI= 48441\nIHBzeWNoZQ== 48442\nIGFjcXVhaW50ZWQ= 48443\nIEfDvG4= 48444\n0L7Qt9C4 48445\nxZtjacSF 48446\nQUc= 48447\nIG1hbGZ1bmN0aW9u 48448\nIGFzdGVyb2lkcw== 48449\naXJleg== 48450\nYW1vcnBo 48451\nINGB0L7RgtGA0YPQtA== 48452\nIGZyZXNod2F0ZXI= 48453\nIGFycmFu 48454\nINC/0YDRiw== 48455\n0L3QvtCz 48456\nIGRpYWJldGlj 48457\nINmC2KfZhA== 48458\nIG9wcHJlc3M= 48459\nIGNhcGFjaXRhbmNl 48460\ncGVyZm9ybWFuY2U= 48461\nY3JhdGVz 48462\nIGFwb3N0bGU= 48463\nIEpFTg== 48464\nT1VMRA== 48465\nSW50cm8= 48466\nIHN0YWxscw== 48467\nIEFCT1VU 48468\nY3RpY2FtZW50ZQ== 48469\nIGRpbGlnZW50 48470\nIG1hbmlmZXN0cw== 48471\nIFBha2lzdGFuaQ== 48472\nICgn 48473\n= 48474\n6ZM= 48475\n6bI= 48476\n55g= 48477\n6Jw= 48478\n6bg= 48479\n6a4= 48480\n6Jo= 48481\n6J0= 48482\n6a8= 48483\n6JU= 48484\n6KQ= 48485\n6bA= 48486\n6J8= 48487\n56M= 48488\n6KA= 48489\n6ZE= 48490\n6bU= 48491\n6bE= 48492\n6bQ= 48493\n5bU= 48494\n54A= 48495\n6Z4= 48496\n6bY= 48497\n6Y4= 48498\n6ac= 48499\n6bc= 48500\n5aw= 48501\n6Ys= 48502\n5bY= 48503\n5qs= 48504\n55M= 48505\n77w= 48506\n46k= 48507\n770= 48508\n45Y= 48509\n45c= 48510\n5IE= 48511\n8KA= 48512\n4oCY 48513\n4oCZ 48514\n4oCc 48515\n4oCd 48516\n4oCn 48517\n4oSD 48518\n4peL 48519\n44CD 48520\n44CG 48521\n44CH 48522\n44CI 48523\n44CJ 48524\n44CS 48525\n44Cd 48526\n44Ce 48527\n44GB 48528\n44GC 48529\n44GD 48530\n44GE 48531\n44GF 48532\n44GG 48533\n44GH 48534\n44GI 48535\n44GJ 48536\n44GK 48537\n44GL 48538\n44GM 48539\n44GN 48540\n44GO 48541\n44GP 48542\n44GQ 48543\n44GR 48544\n44GS 48545\n44GT 48546\n44GU 48547\n44GV 48548\n44GW 48549\n44GX 48550\n44GY 48551\n44GZ 48552\n44Ga 48553\n44Gb 48554\n44Gc 48555\n44Gd 48556\n44Ge 48557\n44Gf 48558\n44Gg 48559\n44Gh 48560\n44Gi 48561\n44Gj 48562\n44Gk 48563\n44Gl 48564\n44Gm 48565\n44Gn 48566\n44Go 48567\n44Gp 48568\n44Gq 48569\n44Gr 48570\n44Gs 48571\n44Gt 48572\n44Gu 48573\n44Gv 48574\n44Gw 48575\n44Gx 48576\n44Gy 48577\n44Gz 48578\n44G0 48579\n44G1 48580\n44G2 48581\n44G3 48582\n44G4 48583\n44G5 48584\n44G6 48585\n44G7 48586\n44G8 48587\n44G9 48588\n44G+ 48589\n44G/ 48590\n44KA 48591\n44KB 48592\n44KC 48593\n44KD 48594\n44KE 48595\n44KF 48596\n44KG 48597\n44KH 48598\n44KI 48599\n44KJ 48600\n44KK 48601\n44KL 48602\n44KM 48603\n44KN 48604\n44KP 48605\n44KQ 48606\n44KR 48607\n44KS 48608\n44KT 48609\n44Kd 48610\n44Ke 48611\n44Kh 48612\n44Ki 48613\n44Kj 48614\n44Kk 48615\n44Kl 48616\n44Km 48617\n44Kn 48618\n44Ko 48619\n44Kp 48620\n44Kq 48621\n44Kr 48622\n44Ks 48623\n44Kt 48624\n44Ku 48625\n44Kv 48626\n44Kw 48627\n44Kx 48628\n44Ky 48629\n44Kz 48630\n44K0 48631\n44K1 48632\n44K2 48633\n44K3 48634\n44K4 48635\n44K5 48636\n44K6 48637\n44K7 48638\n44K8 48639\n44K9 48640\n44K+ 48641\n44K/ 48642\n44OA 48643\n44OB 48644\n44OC 48645\n44OD 48646\n44OE 48647\n44OF 48648\n44OG 48649\n44OH 48650\n44OI 48651\n44OJ 48652\n44OK 48653\n44OL 48654\n44OM 48655\n44ON 48656\n44OO 48657\n44OP 48658\n44OQ 48659\n44OR 48660\n44OS 48661\n44OT 48662\n44OU 48663\n44OV 48664\n44OW 48665\n44OX 48666\n44OY 48667\n44OZ 48668\n44Oa 48669\n44Ob 48670\n44Oc 48671\n44Od 48672\n44Oe 48673\n44Of 48674\n44Og 48675\n44Oh 48676\n44Oi 48677\n44Oj 48678\n44Ok 48679\n44Ol 48680\n44Om 48681\n44On 48682\n44Oo 48683\n44Op 48684\n44Oq 48685\n44Or 48686\n44Os 48687\n44Ot 48688\n44Ou 48689\n44Ov 48690\n44Ow 48691\n44Ox 48692\n44Oy 48693\n44Oz 48694\n44O0 48695\n44O1 48696\n44O2 48697\n44O7 48698\n44O8 48699\n44O+ 48700\n45at 48701\n45eO 48702\n46mS 48703\n46mn 48704\n5IGv 48705\n5LiA 48706\n5LiB 48707\n5LiD 48708\n5LiH 48709\n5LiI 48710\n5LiJ 48711\n5LiK 48712\n5LiL 48713\n5LiN 48714\n5LiO 48715\n5LiQ 48716\n5LiR 48717\n5LiT 48718\n5LiU 48719\n5LiV 48720\n5LiW 48721\n5LiX 48722\n5LiY 48723\n5LiZ 48724\n5Lia 48725\n5Lib 48726\n5Lic 48727\n5Lid 48728\n5Lie 48729\n5Lif 48730\n5Lih 48731\n5Lii 48732\n5Lik 48733\n5Lil 48734\n5Lim 48735\n5Lin 48736\n5Lio 48737\n5Liq 48738\n5Lir 48739\n5Lit 48740\n5Liw 48741\n5Liy 48742\n5Li0 48743\n5Li2 48744\n5Li4 48745\n5Li5 48746\n5Li6 48747\n5Li7 48748\n5Li8 48749\n5Li9 48750\n5Li+ 48751\n5LmC 48752\n5LmD 48753\n5LmF 48754\n5LmH 48755\n5LmI 48756\n5LmJ 48757\n5LmL 48758\n5LmM 48759\n5LmN 48760\n5LmO 48761\n5LmP 48762\n5LmQ 48763\n5LmS 48764\n5LmT 48765\n5LmU 48766\n5LmW 48767\n5LmX 48768\n5LmY 48769\n5LmZ 48770\n5Lmc 48771\n5Lmd 48772\n5Lme 48773\n5Lmf 48774\n5Lmg 48775\n5Lmh 48776\n5Lmi 48777\n5Lmm 48778\n5Lmp 48779\n5Lmq 48780\n5Lmw 48781\n5Lmx 48782\n5Lmz 48783\n5Lm4 48784\n5Lm+ 48785\n5LqA 48786\n5LqB 48787\n5LqC 48788\n5LqG 48789\n5LqI 48790\n5LqJ 48791\n5LqL 48792\n5LqM 48793\n5LqN 48794\n5LqO 48795\n5LqP 48796\n5LqR 48797\n5LqS 48798\n5LqT 48799\n5LqU 48800\n5LqV 48801\n5LqY 48802\n5LqZ 48803\n5Lqa 48804\n5Lqb 48805\n5Lqc 48806\n5Lqe 48807\n5Lqf 48808\n5Lqh 48809\n5Lqi 48810\n5Lqk 48811\n5Lql 48812\n5Lqm 48813\n5Lqn 48814\n5Lqo 48815\n5Lqp 48816\n5Lqr 48817\n5Lqs 48818\n5Lqt 48819\n5Lqu 48820\n5Lqw 48821\n5Lqy 48822\n5Lqz 48823\n5Lq1 48824\n5Lq2 48825\n5Lq5 48826\n5Lq6 48827\n5Lq/ 48828\n5LuA 48829\n5LuB 48830\n5LuC 48831\n5LuD 48832\n5LuE 48833\n5LuF 48834\n5LuG 48835\n5LuH 48836\n5LuJ 48837\n5LuK 48838\n5LuL 48839\n5LuN 48840\n5LuO 48841\n5LuP 48842\n5LuR 48843\n5LuT 48844\n5LuU 48845\n5LuV 48846\n5LuW 48847\n5LuX 48848\n5LuY 48849\n5LuZ 48850\n5Lud 48851\n5Lue 48852\n5Luf 48853\n5Luh 48854\n5Luj 48855\n5Luk 48856\n5Lul 48857\n5Luo 48858\n5Luq 48859\n5Lur 48860\n5Lus 48861\n5Lut 48862\n5Luu 48863\n5Luw 48864\n5Luy 48865\n5Luz 48866\n5Lu1 48867\n5Lu2 48868\n5Lu3 48869\n5Lu7 48870\n5Lu9 48871\n5Lu/ 48872\n5LyB 48873\n5LyD 48874\n5LyE 48875\n5LyJ 48876\n5LyK 48877\n5LyL 48878\n5LyN 48879\n5LyO 48880\n5LyP 48881\n5LyQ 48882\n5LyR 48883\n5LyX 48884\n5LyY 48885\n5LyZ 48886\n5Lya 48887\n5Lyb 48888\n5Lyc 48889\n5Lyd 48890\n5Lye 48891\n5Lyf 48892\n5Lyg 48893\n5Lyi 48894\n5Lyk 48895\n5Lyl 48896\n5Lym 48897\n5Lyn 48898\n5Lyq 48899\n5Lyr 48900\n5Lyv 48901\n5Lyw 48902\n5Lyx 48903\n5Lyy 48904\n5Ly0 48905\n5Ly2 48906\n5Ly3 48907\n5Ly4 48908\n5Ly6 48909\n5Ly8 48910\n5Ly9 48911\n5L2D 48912\n5L2G 48913\n5L2H 48914\n5L2I 48915\n5L2J 48916\n5L2N 48917\n5L2O 48918\n5L2P 48919\n5L2Q 48920\n5L2R 48921\n5L2T 48922\n5L2U 48923\n5L2V 48924\n5L2X 48925\n5L2Y 48926\n5L2Z 48927\n5L2a 48928\n5L2b 48929\n5L2c 48930\n5L2d 48931\n5L2e 48932\n5L2f 48933\n5L2g 48934\n5L2i 48935\n5L2j 48936\n5L2k 48937\n5L2l 48938\n5L2p 48939\n5L2s 48940\n5L2v 48941\n5L2w 48942\n5L2z 48943\n5L21 48944\n5L22 48945\n5L23 48946\n5L26 48947\n5L27 48948\n5L28 48949\n5L2+ 48950\n5L2/ 48951\n5L6C 48952\n5L6D 48953\n5L6E 48954\n5L6G 48955\n5L6I 48956\n5L6J 48957\n5L6L 48958\n5L6N 48959\n5L6P 48960\n5L6R 48961\n5L6T 48962\n5L6U 48963\n5L6X 48964\n5L6Y 48965\n5L6b 48966\n5L6d 48967\n5L6g 48968\n5L6h 48969\n5L6j 48970\n5L6l 48971\n5L6m 48972\n5L6n 48973\n5L6o 48974\n5L6p 48975\n5L6q 48976\n5L6s 48977\n5L6t 48978\n5L6u 48979\n5L6v 48980\n5L61 48981\n5L62 48982\n5L63 48983\n5L6/ 48984\n5L+C 48985\n5L+D 48986\n5L+E 48987\n5L+F 48988\n5L+K 48989\n5L+O 48990\n5L+P 48991\n5L+Q 48992\n5L+R 48993\n5L+U 48994\n5L+X 48995\n5L+Y 48996\n5L+a 48997\n5L+b 48998\n5L+c 48999\n5L+d 49000\n5L+e 49001\n5L+f 49002\n5L+g 49003\n5L+h 49004\n5L+i 49005\n5L+j 49006\n5L+k 49007\n5L+m 49008\n5L+o 49009\n5L+p 49010\n5L+q 49011\n5L+s 49012\n5L+t 49013\n5L+u 49014\n5L+v 49015\n5L+x 49016\n5L+z 49017\n5L+1 49018\n5L+2 49019\n5L+4 49020\n5L+6 49021\n5L++ 49022\n5YCF 49023\n5YCG 49024\n5YCJ 49025\n5YCL 49026\n5YCM 49027\n5YCN 49028\n5YCP 49029\n5YCR 49030\n5YCS 49031\n5YCT 49032\n5YCU 49033\n5YCW 49034\n5YCY 49035\n5YCZ 49036\n5YCa 49037\n5YCc 49038\n5YCf 49039\n5YCh 49040\n5YCi 49041\n5YCj 49042\n5YCk 49043\n5YCl 49044\n5YCm 49045\n5YCn 49046\n5YCo 49047\n5YCp 49048\n5YCq 49049\n5YCr 49050\n5YCs 49051\n5YCt 49052\n5YCu 49053\n5YC2 49054\n5YC5 49055\n5YC6 49056\n5YC8 49057\n5YC+ 49058\n5YGB 49059\n5YGD 49060\n5YGH 49061\n5YGI 49062\n5YGJ 49063\n5YGM 49064\n5YGO 49065\n5YGP 49066\n5YGT 49067\n5YGV 49068\n5YGW 49069\n5YGa 49070\n5YGc 49071\n5YGl 49072\n5YGs 49073\n5YGt 49074\n5YGx 49075\n5YGy 49076\n5YG0 49077\n5YG1 49078\n5YG2 49079\n5YG3 49080\n5YG4 49081\n5YG7 49082\n5YG9 49083\n5YG+ 49084\n5YG/ 49085\n5YKA 49086\n5YKF 49087\n5YKI 49088\n5YKN 49089\n5YKR 49090\n5YKV 49091\n5YKY 49092\n5YKZ 49093\n5YKc 49094\n5YKi 49095\n5YKj 49096\n5YKl 49097\n5YKn 49098\n5YKo 49099\n5YKp 49100\n5YKr 49101\n5YKs 49102\n5YKt 49103\n5YKy 49104\n5YKz 49105\n5YK0 49106\n5YK1 49107\n5YK3 49108\n5YK6 49109\n5YK7 49110\n5YK+ 49111\n5YOC 49112\n5YOF 49113\n5YOG 49114\n5YOJ 49115\n5YOK 49116\n5YON 49117\n5YOP 49118\n5YOR 49119\n5YOU 49120\n5YOV 49121\n5YOW 49122\n5YOa 49123\n5YOe 49124\n5YOj 49125\n5YOl 49126\n5YOm 49127\n5YOn 49128\n5YOs 49129\n5YOt 49130\n5YOu 49131\n5YOx 49132\n5YOz 49133\n5YO1 49134\n5YO5 49135\n5YO7 49136\n5YSA 49137\n5YSB 49138\n5YSC 49139\n5YSE 49140\n5YSG 49141\n5YSI 49142\n5YSJ 49143\n5YSL 49144\n5YSS 49145\n5YSU 49146\n5YSV 49147\n5YSY 49148\n5YSa 49149\n5YSf 49150\n5YSh 49151\n5YSq 49152\n5YSy 49153\n5YS3 49154\n5YS6 49155\n5YS8 49156\n5YS/ 49157\n5YWA 49158\n5YWB 49159\n5YWD 49160\n5YWE 49161\n5YWF 49162\n5YWG 49163\n5YWH 49164\n5YWI 49165\n5YWJ 49166\n5YWK 49167\n5YWL 49168\n5YWM 49169\n5YWN 49170\n5YWO 49171\n5YWQ 49172\n5YWR 49173\n5YWS 49174\n5YWU 49175\n5YWV 49176\n5YWW 49177\n5YWa 49178\n5YWc 49179\n5YWi 49180\n5YWl 49181\n5YWn 49182\n5YWo 49183\n5YWp 49184\n5YWq 49185\n5YWr 49186\n5YWs 49187\n5YWt 49188\n5YWu 49189\n5YWw 49190\n5YWx 49191\n5YWz 49192\n5YW0 49193\n5YW1 49194\n5YW2 49195\n5YW3 49196\n5YW4 49197\n5YW5 49198\n5YW7 49199\n5YW8 49200\n5YW9 49201\n5YaA 49202\n5YaC 49203\n5YaF 49204\n5YaG 49205\n5YaH 49206\n5YaI 49207\n5YaJ 49208\n5YaK 49209\n5YaM 49210\n5YaN 49211\n5YaP 49212\n5YaR 49213\n5YaS 49214\n5YaV 49215\n5YaW 49216\n5YaX 49217\n5YaZ 49218\n5Yaa 49219\n5Yab 49220\n5Yac 49221\n5Yag 49222\n5Yai 49223\n5Yak 49224\n5Yal 49225\n5Yam 49226\n5Yan 49227\n5Yao 49228\n5Yap 49229\n5Yaq 49230\n5Yar 49231\n5Yas 49232\n5Yau 49233\n5Yav 49234\n5Yaw 49235\n5Yax 49236\n5Yay 49237\n5Yaz 49238\n5Ya0 49239\n5Ya1 49240\n5Ya2 49241\n5Ya3 49242\n5Ya7 49243\n5Ya8 49244\n5Ya9 49245\n5Ya/ 49246\n5YeA 49247\n5YeE 49248\n5YeG 49249\n5YeH 49250\n5YeI 49251\n5YeJ 49252\n5YeK 49253\n5YeL 49254\n5YeM 49255\n5YeN 49256\n5YeP 49257\n5YeR 49258\n5YeW 49259\n5Yeb 49260\n5Yec 49261\n5Yed 49262\n5Yeg 49263\n5Yeh 49264\n5Yei 49265\n5Yek 49266\n5Yem 49267\n5Yen 49268\n5Yep 49269\n5Yeq 49270\n5Yer 49271\n5Yet 49272\n5Yev 49273\n5Yew 49274\n5Yex 49275\n5Yez 49276\n5Ye1 49277\n5Ye2 49278\n5Ye4 49279\n5Ye5 49280\n5Ye6 49281\n5Ye7 49282\n5Ye8 49283\n5Ye9 49284\n5Ye/ 49285\n5YiA 49286\n5YiB 49287\n5YiD 49288\n5YiG 49289\n5YiH 49290\n5YiI 49291\n5YiK 49292\n5YiN 49293\n5YiO 49294\n5YiR 49295\n5YiS 49296\n5YiU 49297\n5YiX 49298\n5YiY 49299\n5YiZ 49300\n5Yia 49301\n5Yib 49302\n5Yid 49303\n5Yig 49304\n5Yik 49305\n5Yil 49306\n5Yio 49307\n5Yip 49308\n5Yiq 49309\n5Yir 49310\n5Yis 49311\n5Yit 49312\n5Yiu 49313\n5Yiw 49314\n5Yiz 49315\n5Yi2 49316\n5Yi3 49317\n5Yi4 49318\n5Yi5 49319\n5Yi6 49320\n5Yi7 49321\n5Yi8 49322\n5Yi9 49323\n5Yi/ 49324\n5YmA 49325\n5YmB 49326\n5YmC 49327\n5YmD 49328\n5YmF 49329\n5YmH 49330\n5YmK 49331\n5YmL 49332\n5YmM 49333\n5YmN 49334\n5YmO 49335\n5YmQ 49336\n5YmR 49337\n5YmU 49338\n5YmV 49339\n5YmW 49340\n5Ymb 49341\n5Ymc 49342\n5Ymd 49343\n5Yme 49344\n5Ymf 49345\n5Ymh 49346\n5Ymj 49347\n5Ymk 49348\n5Yml 49349\n5Ymn 49350\n5Ymp 49351\n5Ymq 49352\n5Ymv 49353\n5Ymw 49354\n5Ymx 49355\n5Ymy 49356\n5Ym0 49357\n5Ym1 49358\n5Ym9 49359\n5Ym/ 49360\n5YqC 49361\n5YqD 49362\n5YqH 49363\n5YqI 49364\n5YqJ 49365\n5YqN 49366\n5YqP 49367\n5YqR 49368\n5YqS 49369\n5YqT 49370\n5YqU 49371\n5Yqb 49372\n5Yqd 49373\n5Yqe 49374\n5Yqf 49375\n5Yqg 49376\n5Yqh 49377\n5Yqi 49378\n5Yqj 49379\n5Yqo 49380\n5Yqp 49381\n5Yqq 49382\n5Yqr 49383\n5Yqs 49384\n5Yqt 49385\n5Yqx 49386\n5Yqy 49387\n5Yqz 49388\n5Yq0 49389\n5Yq1 49390\n5Yq5 49391\n5Yq8 49392\n5Yq+ 49393\n5Yq/ 49394\n5YuB 49395\n5YuD 49396\n5YuF 49397\n5YuH 49398\n5YuJ 49399\n5YuL 49400\n5YuN 49401\n5YuQ 49402\n5YuS 49403\n5YuV 49404\n5YuW 49405\n5YuX 49406\n5YuY 49407\n5YuZ 49408\n5Yub 49409\n5Yud 49410\n5Yue 49411\n5Yuf 49412\n5Yug 49413\n5Yui 49414\n5Yuj 49415\n5Yuk 49416\n5Yum 49417\n5Yun 49418\n5Yuu 49419\n5Yuw 49420\n5Yuy 49421\n5Yuz 49422\n5Yu1 49423\n5Yu4 49424\n5Yu5 49425\n5Yu6 49426\n5Yu7 49427\n5Yu+ 49428\n5Yu/ 49429\n5YyA 49430\n5YyB 49431\n5YyC 49432\n5YyF 49433\n5YyG 49434\n5YyI 49435\n5YyN 49436\n5YyP 49437\n5YyQ 49438\n5YyV 49439\n5YyW 49440\n5YyX 49441\n5YyZ 49442\n5Yya 49443\n5Yyc 49444\n5Yyd 49445\n5Yyg 49446\n5Yyh 49447\n5Yyj 49448\n5Yyq 49449\n5Yyu 49450\n5Yyv 49451\n5Yyx 49452\n5Yy4 49453\n5Yy5 49454\n5Yy6 49455\n5Yy7 49456\n5Yy8 49457\n5Yy9 49458\n5Yy+ 49459\n5Yy/ 49460\n5Y2A 49461\n5Y2B 49462\n5Y2D 49463\n5Y2F 49464\n5Y2G 49465\n5Y2H 49466\n5Y2I 49467\n5Y2J 49468\n5Y2K 49469\n5Y2N 49470\n5Y2O 49471\n5Y2P 49472\n5Y2R 49473\n5Y2S 49474\n5Y2T 49475\n5Y2U 49476\n5Y2V 49477\n5Y2W 49478\n5Y2X 49479\n5Y2Y 49480\n5Y2a 49481\n5Y2c 49482\n5Y2e 49483\n5Y2f 49484\n5Y2g 49485\n5Y2h 49486\n5Y2i 49487\n5Y2j 49488\n5Y2k 49489\n5Y2m 49490\n5Y2n 49491\n5Y2r 49492\n5Y2s 49493\n5Y2u 49494\n5Y2v 49495\n5Y2w 49496\n5Y2x 49497\n5Y2y 49498\n5Y2z 49499\n5Y20 49500\n5Y21 49501\n5Y23 49502\n5Y24 49503\n5Y26 49504\n5Y27 49505\n5Y2/ 49506\n5Y6C 49507\n5Y6E 49508\n5Y6F 49509\n5Y6G 49510\n5Y6J 49511\n5Y6L 49512\n5Y6M 49513\n5Y6N 49514\n5Y6Q 49515\n5Y6T 49516\n5Y6U 49517\n5Y6V 49518\n5Y6W 49519\n5Y6Y 49520\n5Y6a 49521\n5Y6d 49522\n5Y6f 49523\n5Y6g 49524\n5Y6i 49525\n5Y6j 49526\n5Y6l 49527\n5Y6m 49528\n5Y6o 49529\n5Y6p 49530\n5Y6t 49531\n5Y6u 49532\n5Y6w 49533\n5Y6y 49534\n5Y6z 49535\n5Y62 49536\n5Y67 49537\n5Y6/ 49538\n5Y+B 49539\n5Y+C 49540\n5Y+D 49541\n5Y+G 49542\n5Y+I 49543\n5Y+J 49544\n5Y+K 49545\n5Y+L 49546\n5Y+M 49547\n5Y+N 49548\n5Y+O 49549\n5Y+R 49550\n5Y+U 49551\n5Y+W 49552\n5Y+X 49553\n5Y+Y 49554\n5Y+Z 49555\n5Y+b 49556\n5Y+f 49557\n5Y+g 49558\n5Y+h 49559\n5Y+i 49560\n5Y+j 49561\n5Y+k 49562\n5Y+l 49563\n5Y+m 49564\n5Y+o 49565\n5Y+p 49566\n5Y+q 49567\n5Y+r 49568\n5Y+s 49569\n5Y+t 49570\n5Y+u 49571\n5Y+v 49572\n5Y+w 49573\n5Y+x 49574\n5Y+y 49575\n5Y+z 49576\n5Y+1 49577\n5Y+2 49578\n5Y+3 49579\n5Y+4 49580\n5Y+5 49581\n5Y+6 49582\n5Y+7 49583\n5Y+8 49584\n5Y+9 49585\n5ZCB 49586\n5ZCD 49587\n5ZCE 49588\n5ZCF 49589\n5ZCG 49590\n5ZCH 49591\n5ZCI 49592\n5ZCJ 49593\n5ZCK 49594\n5ZCL 49595\n5ZCM 49596\n5ZCN 49597\n5ZCO 49598\n5ZCP 49599\n5ZCQ 49600\n5ZCR 49601\n5ZCS 49602\n5ZCT 49603\n5ZCU 49604\n5ZCV 49605\n5ZCW 49606\n5ZCX 49607\n5ZCZ 49608\n5ZCb 49609\n5ZCd 49610\n5ZCe 49611\n5ZCf 49612\n5ZCg 49613\n5ZCh 49614\n5ZCj 49615\n5ZCl 49616\n5ZCm 49617\n5ZCn 49618\n5ZCo 49619\n5ZCp 49620\n5ZCr 49621\n5ZCs 49622\n5ZCt 49623\n5ZCu 49624\n5ZCv 49625\n5ZCx 49626\n5ZCy 49627\n5ZCz 49628\n5ZC0 49629\n5ZC1 49630\n5ZC2 49631\n5ZC4 49632\n5ZC5 49633\n5ZC7 49634\n5ZC8 49635\n5ZC9 49636\n5ZC+ 49637\n5ZC/ 49638\n5ZGA 49639\n5ZGC 49640\n5ZGD 49641\n5ZGG 49642\n5ZGI 49643\n5ZGJ 49644\n5ZGK 49645\n5ZGL 49646\n5ZGO 49647\n5ZGQ 49648\n5ZGR 49649\n5ZGS 49650\n5ZGT 49651\n5ZGU 49652\n5ZGV 49653\n5ZGW 49654\n5ZGX 49655\n5ZGY 49656\n5ZGZ 49657\n5ZGb 49658\n5ZGc 49659\n5ZGf 49660\n5ZGi 49661\n5ZGj 49662\n5ZGk 49663\n5ZGm 49664\n5ZGo 49665\n5ZGq 49666\n5ZGr 49667\n5ZGv 49668\n5ZGw 49669\n5ZGx 49670\n5ZGy 49671\n5ZGz 49672\n5ZG1 49673\n5ZG2 49674\n5ZG3 49675\n5ZG4 49676\n5ZG7 49677\n5ZG8 49678\n5ZG9 49679\n5ZKA 49680\n5ZKB 49681\n5ZKC 49682\n5ZKE 49683\n5ZKG 49684\n5ZKJ 49685\n5ZKL 49686\n5ZKM 49687\n5ZKO 49688\n5ZKP 49689\n5ZKQ 49690\n5ZKS 49691\n5ZKU 49692\n5ZKV 49693\n5ZKW 49694\n5ZKX 49695\n5ZKY 49696\n5ZKZ 49697\n5ZKa 49698\n5ZKb 49699\n5ZKd 49700\n5ZKj 49701\n5ZKk 49702\n5ZKm 49703\n5ZKn 49704\n5ZKo 49705\n5ZKp 49706\n5ZKq 49707\n5ZKr 49708\n5ZKs 49709\n5ZKt 49710\n5ZKv 49711\n5ZKx 49712\n5ZKy 49713\n5ZKz 49714\n5ZK0 49715\n5ZK1 49716\n5ZK2 49717\n5ZK3 49718\n5ZK4 49719\n5ZK5 49720\n5ZK7 49721\n5ZK9 49722\n5ZK+ 49723\n5ZK/ 49724\n5ZOA 49725\n5ZOB 49726\n5ZOC 49727\n5ZOD 49728\n5ZOE 49729\n5ZOG 49730\n5ZOH 49731\n5ZOI 49732\n5ZOJ 49733\n5ZOL 49734\n5ZOM 49735\n5ZON 49736\n5ZOO 49737\n5ZOP 49738\n5ZOQ 49739\n5ZOR 49740\n5ZOS 49741\n5ZOT 49742\n5ZOU 49743\n5ZOV 49744\n5ZOW 49745\n5ZOX 49746\n5ZOY 49747\n5ZOZ 49748\n5ZOa 49749\n5ZOc 49750\n5ZOd 49751\n5ZOe 49752\n5ZOf 49753\n5ZOg 49754\n5ZOh 49755\n5ZOl 49756\n5ZOm 49757\n5ZOn 49758\n5ZOo 49759\n5ZOp 49760\n5ZOq 49761\n5ZOt 49762\n5ZOu 49763\n5ZOy 49764\n5ZO6 49765\n5ZO8 49766\n5ZO9 49767\n5ZSB 49768\n5ZSE 49769\n5ZSG 49770\n5ZSH 49771\n5ZSJ 49772\n5ZSP 49773\n5ZSQ 49774\n5ZSR 49775\n5ZSU 49776\n5ZSW 49777\n5ZSb 49778\n5ZSe 49779\n5ZSg 49780\n5ZSi 49781\n5ZSj 49782\n5ZSk 49783\n5ZSn 49784\n5ZSq 49785\n5ZSs 49786\n5ZSu 49787\n5ZSv 49788\n5ZSw 49789\n5ZSx 49790\n5ZSz 49791\n5ZS1 49792\n5ZS3 49793\n5ZS4 49794\n5ZS7 49795\n5ZS8 49796\n5ZS+ 49797\n5ZS/ 49798\n5ZWA 49799\n5ZWB 49800\n5ZWC 49801\n5ZWD 49802\n5ZWE 49803\n5ZWG 49804\n5ZWJ 49805\n5ZWK 49806\n5ZWL 49807\n5ZWP 49808\n5ZWQ 49809\n5ZWT 49810\n5ZWV 49811\n5ZWW 49812\n5ZWc 49813\n5ZWe 49814\n5ZWf 49815\n5ZWh 49816\n5ZWk 49817\n5ZWl 49818\n5ZWm 49819\n5ZWn 49820\n5ZWp 49821\n5ZWq 49822\n5ZWr 49823\n5ZWs 49824\n5ZWt 49825\n5ZWu 49826\n5ZWv 49827\n5ZWw 49828\n5ZWx 49829\n5ZWy 49830\n5ZW1 49831\n5ZW2 49832\n5ZW3 49833\n5ZW4 49834\n5ZW7 49835\n5ZW8 49836\n5ZW+ 49837\n5ZaA 49838\n5ZaB 49839\n5ZaC 49840\n5ZaD 49841\n5ZaE 49842\n5ZaG 49843\n5ZaH 49844\n5ZaI 49845\n5ZaJ 49846\n5ZaK 49847\n5ZaL 49848\n5ZaO 49849\n5ZaP 49850\n5ZaQ 49851\n5ZaR 49852\n5ZaS 49853\n5ZaT 49854\n5ZaU 49855\n5ZaY 49856\n5ZaZ 49857\n5Zaa 49858\n5Zab 49859\n5Zac 49860\n5Zad 49861\n5Zaf 49862\n5Zak 49863\n5Zan 49864\n5Zao 49865\n5Zap 49866\n5Zaq 49867\n5Zar 49868\n5Zas 49869\n5Zau 49870\n5Zaw 49871\n5Zax 49872\n5Zay 49873\n5Zaz 49874\n5Za1 49875\n5Za2 49876\n5Za3 49877\n5Za5 49878\n5Za6 49879\n5Za7 49880\n5Za9 49881\n5Za+ 49882\n5ZeE 49883\n5ZeF 49884\n5ZeG 49885\n5ZeH 49886\n5ZeJ 49887\n5ZeM 49888\n5ZeN 49889\n5ZeO 49890\n5ZeQ 49891\n5ZeR 49892\n5ZeS 49893\n5ZeT 49894\n5ZeU 49895\n5ZeW 49896\n5ZeZ 49897\n5Zea 49898\n5Zeb 49899\n5Zec 49900\n5Zed 49901\n5Zee 49902\n5Zef 49903\n5Zeh 49904\n5Zej 49905\n5Zek 49906\n5Zel 49907\n5Zem 49908\n5Zeo 49909\n5Zeq 49910\n5Zer 49911\n5Zes 49912\n5Zeu 49913\n5Zev 49914\n5Zew 49915\n5Zex 49916\n5Zey 49917\n5Zez 49918\n5Ze1 49919\n5Ze2 49920\n5Ze3 49921\n5Ze7 49922\n5Ze9 49923\n5Ze+ 49924\n5ZiA 49925\n5ZiB 49926\n5ZiF 49927\n5ZiG 49928\n5ZiI 49929\n5ZiJ 49930\n5ZiM 49931\n5ZiO 49932\n5ZiP 49933\n5ZiU 49934\n5ZiW 49935\n5ZiX 49936\n5ZiY 49937\n5Zia 49938\n5Zib 49939\n5Zie 49940\n5Zif 49941\n5Zih 49942\n5Zii 49943\n5Zij 49944\n5Zik 49945\n5Zil 49946\n5Zin 49947\n5Zip 49948\n5Zis 49949\n5Zit 49950\n5Ziv 49951\n5Ziw 49952\n5Zix 49953\n5Ziy 49954\n5Zi0 49955\n5Zi2 49956\n5Zi4 49957\n5Zi5 49958\n5Zi7 49959\n5Zi/ 49960\n5ZmC 49961\n5ZmD 49962\n5ZmM 49963\n5ZmN 49964\n5ZmO 49965\n5ZmT 49966\n5ZmU 49967\n5ZmX 49968\n5ZmY 49969\n5ZmZ 49970\n5Zmb 49971\n5Zmc 49972\n5Zmg 49973\n5Zmi 49974\n5Zmk 49975\n5Zmo 49976\n5Zmp 49977\n5Zmq 49978\n5Zmr 49979\n5Zms 49980\n5Zmx 49981\n5Zm0 49982\n5Zm2 49983\n5Zm4 49984\n5Zm5 49985\n5Zm6 49986\n5Zm7 49987\n5Zm8 49988\n5ZqA 49989\n5ZqF 49990\n5ZqG 49991\n5ZqH 49992\n5ZqK 49993\n5ZqO 49994\n5ZqP 49995\n5ZqQ 49996\n5ZqS 49997\n5ZqT 49998\n5ZqU 49999\n5ZqV 50000\n5ZqX 50001\n5Zqc 50002\n5Zqf 50003\n5Zqg 50004\n5Zqi 50005\n5Zqj 50006\n5Zql 50007\n5Zqo 50008\n5Zqp 50009\n5Zqt 50010\n5Zqu 50011\n5Zqv 50012\n5Zq0 50013\n5Zq2 50014\n5Zq3 50015\n5Zq8 50016\n5ZuA 50017\n5ZuB 50018\n5ZuC 50019\n5ZuD 50020\n5ZuI 50021\n5ZuJ 50022\n5ZuK 50023\n5ZuN 50024\n5ZuO 50025\n5ZuR 50026\n5ZuU 50027\n5ZuW 50028\n5ZuX 50029\n5Zua 50030\n5Zub 50031\n5Zud 50032\n5Zue 50033\n5Zuf 50034\n5Zug 50035\n5Zuh 50036\n5Zui 50037\n5Zuj 50038\n5Zuk 50039\n5Zun 50040\n5Zuo 50041\n5Zur 50042\n5Zut 50043\n5Zuu 50044\n5Zuv 50045\n5Zuw 50046\n5Zux 50047\n5Zuy 50048\n5Zuz 50049\n5Zu0 50050\n5Zu1 50051\n5Zu3 50052\n5Zu5 50053\n5Zu6 50054\n5Zu9 50055\n5Zu+ 50056\n5Zu/ 50057\n5ZyA 50058\n5ZyD 50059\n5ZyE 50060\n5ZyG 50061\n5ZyI 50062\n5ZyJ 50063\n5ZyK 50064\n5ZyL 50065\n5ZyN 50066\n5ZyP 50067\n5ZyS 50068\n5ZyT 50069\n5ZyW 50070\n5ZyY 50071\n5Zyc 50072\n5Zyf 50073\n5Zyj 50074\n5Zym 50075\n5Zyn 50076\n5Zyo 50077\n5Zyp 50078\n5Zyq 50079\n5Zys 50080\n5Zyt 50081\n5Zyu 50082\n5Zyv 50083\n5Zyw 50084\n5Zyz 50085\n5Zy3 50086\n5Zy5 50087\n5Zy6 50088\n5Zy7 50089\n5Zy+ 50090\n5Z2A 50091\n5Z2C 50092\n5Z2H 50093\n5Z2K 50094\n5Z2N 50095\n5Z2O 50096\n5Z2P 50097\n5Z2Q 50098\n5Z2R 50099\n5Z2S 50100\n5Z2X 50101\n5Z2a 50102\n5Z2b 50103\n5Z2c 50104\n5Z2d 50105\n5Z2e 50106\n5Z2f 50107\n5Z2g 50108\n5Z2h 50109\n5Z2k 50110\n5Z2m 50111\n5Z2o 50112\n5Z2p 50113\n5Z2q 50114\n5Z2t 50115\n5Z2u 50116\n5Z2v 50117\n5Z2z 50118\n5Z23 50119\n5Z27 50120\n5Z28 50121\n5Z6C 50122\n5Z6D 50123\n5Z6E 50124\n5Z6F 50125\n5Z6G 50126\n5Z6H 50127\n5Z6I 50128\n5Z6L 50129\n5Z6M 50130\n5Z6N 50131\n5Z6S 50132\n5Z6T 50133\n5Z6V 50134\n5Z6X 50135\n5Z6a 50136\n5Z6b 50137\n5Z6d 50138\n5Z6g 50139\n5Z6h 50140\n5Z6i 50141\n5Z6j 50142\n5Z6k 50143\n5Z6m 50144\n5Z6n 50145\n5Z6p 50146\n5Z6q 50147\n5Z6r 50148\n5Z6t 50149\n5Z6u 50150\n5Z6v 50151\n5Z6w 50152\n5Z6x 50153\n5Z6z 50154\n5Z60 50155\n5Z61 50156\n5Z64 50157\n5Z+A 50158\n5Z+C 50159\n5Z+D 50160\n5Z+G 50161\n5Z+H 50162\n5Z+L 50163\n5Z+M 50164\n5Z+O 50165\n5Z+P 50166\n5Z+S 50167\n5Z+T 50168\n5Z+U 50169\n5Z+V 50170\n5Z+W 50171\n5Z+X 50172\n5Z+Z 50173\n5Z+a 50174\n5Z+c 50175\n5Z+d 50176\n5Z+f 50177\n5Z+g 50178\n5Z+j 50179\n5Z+k 50180\n5Z+q 50181\n5Z+t 50182\n5Z+y 50183\n5Z+0 50184\n5Z+1 50185\n5Z+3 50186\n5Z+4 50187\n5Z+5 50188\n5Z+6 50189\n5Z+8 50190\n5Z+9 50191\n5aCA 50192\n5aCC 50193\n5aCD 50194\n5aCF 50195\n5aCG 50196\n5aCH 50197\n5aCK 50198\n5aCL 50199\n5aCM 50200\n5aCN 50201\n5aCO 50202\n5aCQ 50203\n5aCR 50204\n5aCV 50205\n5aCZ 50206\n5aCd 50207\n5aCe 50208\n5aCg 50209\n5aCh 50210\n5aCi 50211\n5aCk 50212\n5aCo 50213\n5aCq 50214\n5aCv 50215\n5aCw 50216\n5aCx 50217\n5aC0 50218\n5aC1 50219\n5aC6 50220\n5aC8 50221\n5aGA 50222\n5aGB 50223\n5aGE 50224\n5aGK 50225\n5aGL 50226\n5aGM 50227\n5aGN 50228\n5aGR 50229\n5aGS 50230\n5aGU 50231\n5aGX 50232\n5aGY 50233\n5aGZ 50234\n5aGa 50235\n5aGe 50236\n5aGi 50237\n5aGp 50238\n5aGr 50239\n5aGs 50240\n5aGy 50241\n5aG1 50242\n5aG5 50243\n5aG9 50244\n5aG+ 50245\n5aKA 50246\n5aKB 50247\n5aKD 50248\n5aKF 50249\n5aKJ 50250\n5aKK 50251\n5aKO 50252\n5aKS 50253\n5aKT 50254\n5aKV 50255\n5aKX 50256\n5aKZ 50257\n5aKa 50258\n5aKc 50259\n5aKe 50260\n5aKf 50261\n5aKh 50262\n5aKo 50263\n5aKp 50264\n5aKr 50265\n5aKu 50266\n5aKz 50267\n5aK5 50268\n5aK6 50269\n5aK7 50270\n5aK8 50271\n5aK+ 50272\n5aOB 50273\n5aOF 50274\n5aOH 50275\n5aOK 50276\n5aOM 50277\n5aOR 50278\n5aOT 50279\n5aOV 50280\n5aOX 50281\n5aOY 50282\n5aOc 50283\n5aOe 50284\n5aOf 50285\n5aOk 50286\n5aOp 50287\n5aOr 50288\n5aOs 50289\n5aOu 50290\n5aOv 50291\n5aOw 50292\n5aOx 50293\n5aOy 50294\n5aOz 50295\n5aO2 50296\n5aO3 50297\n5aO4 50298\n5aO5 50299\n5aO6 50300\n5aO7 50301\n5aO9 50302\n5aSE 50303\n5aSH 50304\n5aSJ 50305\n5aSK 50306\n5aSM 50307\n5aSN 50308\n5aSP 50309\n5aSQ 50310\n5aSU 50311\n5aSV 50312\n5aSW 50313\n5aSZ 50314\n5aSa 50315\n5aSb 50316\n5aSc 50317\n5aSf 50318\n5aSg 50319\n5aSi 50320\n5aSk 50321\n5aSl 50322\n5aSn 50323\n5aSp 50324\n5aSq 50325\n5aSr 50326\n5aSs 50327\n5aSt 50328\n5aSu 50329\n5aSv 50330\n5aSx 50331\n5aS0 50332\n5aS3 50333\n5aS4 50334\n5aS5 50335\n5aS6 50336\n5aS8 50337\n5aS+ 50338\n5aWB 50339\n5aWC 50340\n5aWE 50341\n5aWH 50342\n5aWI 50343\n5aWJ 50344\n5aWL 50345\n5aWM 50346\n5aWO 50347\n5aWP 50348\n5aWQ 50349\n5aWR 50350\n5aWU 50351\n5aWV 50352\n5aWW 50353\n5aWX 50354\n5aWY 50355\n5aWa 50356\n5aWg 50357\n5aWi 50358\n5aWl 50359\n5aWn 50360\n5aWo 50361\n5aWq 50362\n5aWs 50363\n5aWt 50364\n5aWu 50365\n5aWz 50366\n5aW0 50367\n5aW2 50368\n5aW4 50369\n5aW5 50370\n5aW9 50371\n5aaB 50372\n5aaC 50373\n5aaD 50374\n5aaE 50375\n5aaG 50376\n5aaH 50377\n5aaI 50378\n5aaK 50379\n5aaN 50380\n5aaS 50381\n5aaT 50382\n5aaW 50383\n5aaX 50384\n5aaZ 50385\n5aad 50386\n5aae 50387\n5aaj 50388\n5aak 50389\n5aal 50390\n5aan 50391\n5aao 50392\n5aap 50393\n5aaq 50394\n5aar 50395\n5aas 50396\n5aau 50397\n5aav 50398\n5aax 50399\n5aay 50400\n5aa5 50401\n5aa6 50402\n5aa7 50403\n5aa9 50404\n5aa+ 50405\n5aeG 50406\n5aeJ 50407\n5aeK 50408\n5aeL 50409\n5aeN 50410\n5aeQ 50411\n5aeR 50412\n5aeS 50413\n5aeT 50414\n5aeU 50415\n5aeX 50416\n5aeY 50417\n5aea 50418\n5aec 50419\n5aed 50420\n5aej 50421\n5aek 50422\n5ael 50423\n5aem 50424\n5aeo 50425\n5aep 50426\n5aeq 50427\n5aer 50428\n5aes 50429\n5aeu 50430\n5ae2 50431\n5ae4 50432\n5ae5 50433\n5ae6 50434\n5ae7 50435\n5ae/ 50436\n5aiB 50437\n5aiD 50438\n5aiE 50439\n5aiF 50440\n5aiG 50441\n5aiH 50442\n5aiI 50443\n5aiJ 50444\n5aiM 50445\n5aiR 50446\n5aiT 50447\n5aiY 50448\n5aia 50449\n5aib 50450\n5aic 50451\n5aif 50452\n5aig 50453\n5aih 50454\n5aij 50455\n5ail 50456\n5aip 50457\n5aiv 50458\n5aix 50459\n5aiy 50460\n5ai0 50461\n5ai2 50462\n5ai8 50463\n5ai/ 50464\n5amA 50465\n5amB 50466\n5amE 50467\n5amG 50468\n5amJ 50469\n5amK 50470\n5amM 50471\n5amV 50472\n5ama 50473\n5ami 50474\n5amm 50475\n5amn 50476\n5amq 50477\n5ams 50478\n5am0 50479\n5am1 50480\n5am2 50481\n5am3 50482\n5am6 50483\n5am/ 50484\n5aqS 50485\n5aqW 50486\n5aqa 50487\n5aqb 50488\n5aqc 50489\n5aqe 50490\n5aqq 50491\n5aqx 50492\n5aqy 50493\n5aqz 50494\n5aq1 50495\n5aq8 50496\n5aq9 50497\n5aq+ 50498\n5auB 50499\n5auC 50500\n5auE 50501\n5auJ 50502\n5auL 50503\n5auM 50504\n5auS 50505\n5auU 50506\n5auW 50507\n5auX 50508\n5auY 50509\n5aua 50510\n5auh 50511\n5auj 50512\n5auk 50513\n5aum 50514\n5aup 50515\n5auq 50516\n5aur 50517\n5auw 50518\n5aux 50519\n5auy 50520\n5au1 50521\n5au7 50522\n5ayF 50523\n5ayJ 50524\n5ayL 50525\n5ayM 50526\n5ayW 50527\n5ayX 50528\n5ayb 50529\n5ayi 50530\n5ayl 50531\n5ayq 50532\n5ays 50533\n5ayw 50534\n5ayy 50535\n5ay0 50536\n5ay2 50537\n5ay3 50538\n5ay4 50539\n5a2A 50540\n5a2D 50541\n5a2Q 50542\n5a2R 50543\n5a2T 50544\n5a2U 50545\n5a2V 50546\n5a2W 50547\n5a2X 50548\n5a2Y 50549\n5a2Z 50550\n5a2a 50551\n5a2b 50552\n5a2c 50553\n5a2d 50554\n5a2f 50555\n5a2i 50556\n5a2j 50557\n5a2k 50558\n5a2l 50559\n5a2m 50560\n5a2p 50561\n5a2q 50562\n5a2r 50563\n5a2s 50564\n5a2t 50565\n5a2w 50566\n5a2x 50567\n5a2z 50568\n5a21 50569\n5a24 50570\n5a26 50571\n5a29 50572\n5a6B 50573\n5a6D 50574\n5a6E 50575\n5a6F 50576\n5a6H 50577\n5a6I 50578\n5a6J 50579\n5a6L 50580\n5a6M 50581\n5a6N 50582\n5a6P 50583\n5a6T 50584\n5a6V 50585\n5a6X 50586\n5a6Y 50587\n5a6Z 50588\n5a6a 50589\n5a6b 50590\n5a6c 50591\n5a6d 50592\n5a6e 50593\n5a6f 50594\n5a6g 50595\n5a6h 50596\n5a6i 50597\n5a6j 50598\n5a6k 50599\n5a6l 50600\n5a6m 50601\n5a6q 50602\n5a6r 50603\n5a6u 50604\n5a6w 50605\n5a6z 50606\n5a60 50607\n5a61 50608\n5a62 50609\n5a64 50610\n5a65 50611\n5a69 50612\n5a6+ 50613\n5a6/ 50614\n5a+C 50615\n5a+E 50616\n5a+F 50617\n5a+G 50618\n5a+H 50619\n5a+M 50620\n5a+Q 50621\n5a+S 50622\n5a+T 50623\n5a+U 50624\n5a+V 50625\n5a+W 50626\n5a+b 50627\n5a+d 50628\n5a+e 50629\n5a+f 50630\n5a+g 50631\n5a+h 50632\n5a+i 50633\n5a+k 50634\n5a+l 50635\n5a+m 50636\n5a+n 50637\n5a+o 50638\n5a+p 50639\n5a+r 50640\n5a+s 50641\n5a+u 50642\n5a+w 50643\n5a+z 50644\n5a+1 50645\n5a+2 50646\n5a+4 50647\n5a+5 50648\n5a+6 50649\n5a+7 50650\n5a+8 50651\n5a++ 50652\n5a+/ 50653\n5bCB 50654\n5bCC 50655\n5bCE 50656\n5bCF 50657\n5bCG 50658\n5bCH 50659\n5bCI 50660\n5bCJ 50661\n5bCK 50662\n5bCL 50663\n5bCN 50664\n5bCO 50665\n5bCP 50666\n5bCR 50667\n5bCT 50668\n5bCU 50669\n5bCV 50670\n5bCW 50671\n5bCY 50672\n5bCZ 50673\n5bCa 50674\n5bCd 50675\n5bCe 50676\n5bCg 50677\n5bCh 50678\n5bCi 50679\n5bCk 50680\n5bCl 50681\n5bCn 50682\n5bCo 50683\n5bCq 50684\n5bCs 50685\n5bCt 50686\n5bCw 50687\n5bCx 50688\n5bC0 50689\n5bC3 50690\n5bC4 50691\n5bC5 50692\n5bC6 50693\n5bC7 50694\n5bC8 50695\n5bC9 50696\n5bC+ 50697\n5bC/ 50698\n5bGA 50699\n5bGB 50700\n5bGC 50701\n5bGE 50702\n5bGF 50703\n5bGG 50704\n5bGI 50705\n5bGJ 50706\n5bGK 50707\n5bGL 50708\n5bGM 50709\n5bGN 50710\n5bGO 50711\n5bGP 50712\n5bGQ 50713\n5bGR 50714\n5bGT 50715\n5bGV 50716\n5bGY 50717\n5bGZ 50718\n5bGc 50719\n5bGe 50720\n5bGg 50721\n5bGh 50722\n5bGi 50723\n5bGj 50724\n5bGk 50725\n5bGl 50726\n5bGm 50727\n5bGs 50728\n5bGv 50729\n5bGx 50730\n5bG5 50731\n5bG6 50732\n5bG/ 50733\n5bKA 50734\n5bKB 50735\n5bKC 50736\n5bKI 50737\n5bKM 50738\n5bKN 50739\n5bKQ 50740\n5bKR 50741\n5bKU 50742\n5bKV 50743\n5bKW 50744\n5bKX 50745\n5bKY 50746\n5bKZ 50747\n5bKa 50748\n5bKb 50749\n5bKc 50750\n5bKe 50751\n5bKh 50752\n5bKi 50753\n5bKo 50754\n5bKp 50755\n5bKr 50756\n5bKs 50757\n5bKt 50758\n5bKx 50759\n5bKz 50760\n5bK1 50761\n5bK3 50762\n5bK4 50763\n5bK7 50764\n5bK8 50765\n5bK9 50766\n5bK/ 50767\n5bOB 50768\n5bOE 50769\n5bOF 50770\n5bOH 50771\n5bOL 50772\n5bOS 50773\n5bOZ 50774\n5bOg 50775\n5bOh 50776\n5bOj 50777\n5bOk 50778\n5bOl 50779\n5bOm 50780\n5bOo 50781\n5bOq 50782\n5bOt 50783\n5bOv 50784\n5bOw 50785\n5bO2 50786\n5bO7 50787\n5bO9 50788\n5bSC 50789\n5bSD 50790\n5bSG 50791\n5bSH 50792\n5bSL 50793\n5bSO 50794\n5bSQ 50795\n5bSR 50796\n5bSS 50797\n5bSU 50798\n5bSV 50799\n5bSW 50800\n5bSX 50801\n5bSZ 50802\n5bSa 50803\n5bSb 50804\n5bSe 50805\n5bSf 50806\n5bSi 50807\n5bSk 50808\n5bSm 50809\n5bSn 50810\n5bSp 50811\n5bSt 50812\n5bSu 50813\n5bS0 50814\n5bS9 50815\n5bS+ 50816\n5bWC 50817\n5bWH 50818\n5bWK 50819\n5bWL 50820\n5bWM 50821\n5bWO 50822\n5bWQ 50823\n5bWS 50824\n5bWW 50825\n5bWY 50826\n5bWb 50827\n5bWc 50828\n5bWo 50829\n5bWp 50830\n5bWq 50831\n5bWr 50832\n5bWs 50833\n5bWv 50834\n5bW0 50835\n5baC 50836\n5baD 50837\n5baE 50838\n5baH 50839\n5baL 50840\n5baM 50841\n5baT 50842\n5baW 50843\n5baZ 50844\n5bad 50845\n5bas 50846\n5bau 50847\n5ba3 50848\n5ba6 50849\n5ba8 50850\n5ba9 50851\n5beC 50852\n5beF 50853\n5beH 50854\n5beJ 50855\n5beM 50856\n5beN 50857\n5beS 50858\n5beT 50859\n5beW 50860\n5bed 50861\n5bee 50862\n5beh 50863\n5bei 50864\n5bej 50865\n5bel 50866\n5bem 50867\n5ben 50868\n5beo 50869\n5bep 50870\n5ber 50871\n5beu 50872\n5bev 50873\n5bex 50874\n5bey 50875\n5bez 50876\n5be0 50877\n5be1 50878\n5be3 50879\n5be6 50880\n5be7 50881\n5be9 50882\n5be+ 50883\n5be/ 50884\n5biA 50885\n5biB 50886\n5biC 50887\n5biD 50888\n5biF 50889\n5biG 50890\n5biI 50891\n5biM 50892\n5biP 50893\n5biQ 50894\n5biR 50895\n5biU 50896\n5biV 50897\n5biW 50898\n5biY 50899\n5biZ 50900\n5bia 50901\n5bib 50902\n5bic 50903\n5bid 50904\n5bil 50905\n5bim 50906\n5bin 50907\n5bir 50908\n5bit 50909\n5biu 50910\n5biv 50911\n5biw 50912\n5biz 50913\n5bi2 50914\n5bi3 50915\n5bi4 50916\n5bi7 50917\n5bi8 50918\n5bi9 50919\n5bmA 50920\n5bmC 50921\n5bmE 50922\n5bmF 50923\n5bmH 50924\n5bmM 50925\n5bmU 50926\n5bmV 50927\n5bmX 50928\n5bmb 50929\n5bmf 50930\n5bmh 50931\n5bmi 50932\n5bmj 50933\n5bmr 50934\n5bmy 50935\n5bmz 50936\n5bm0 50937\n5bm2 50938\n5bm3 50939\n5bm4 50940\n5bm5 50941\n5bm6 50942\n5bm7 50943\n5bm8 50944\n5bm9 50945\n5bm+ 50946\n5bm/ 50947\n5bqB 50948\n5bqD 50949\n5bqE 50950\n5bqF 50951\n5bqG 50952\n5bqH 50953\n5bqK 50954\n5bqP 50955\n5bqQ 50956\n5bqR 50957\n5bqT 50958\n5bqU 50959\n5bqV 50960\n5bqW 50961\n5bqX 50962\n5bqZ 50963\n5bqa 50964\n5bqc 50965\n5bqe 50966\n5bqf 50967\n5bqg 50968\n5bqm 50969\n5bqn 50970\n5bqr 50971\n5bqt 50972\n5bq1 50973\n5bq2 50974\n5bq3 50975\n5bq4 50976\n5bq5 50977\n5bq+ 50978\n5buB 50979\n5buC 50980\n5buD 50981\n5buG 50982\n5buI 50983\n5buJ 50984\n5buK 50985\n5buL 50986\n5buR 50987\n5buT 50988\n5buW 50989\n5bua 50990\n5bub 50991\n5bud 50992\n5buf 50993\n5bug 50994\n5bui 50995\n5buj 50996\n5buo 50997\n5buq 50998\n5bus 50999\n5buz 51000\n5bu0 51001\n5bu2 51002\n5bu3 51003\n5bu6 51004\n5bu7 51005\n5bu8 51006\n5bu/ 51007\n5byA 51008\n5byB 51009\n5byC 51010\n5byD 51011\n5byE 51012\n5byH 51013\n5byI 51014\n5byJ 51015\n5byK 51016\n5byL 51017\n5byP 51018\n5byQ 51019\n5byR 51020\n5byT 51021\n5byU 51022\n5byV 51023\n5byW 51024\n5byX 51025\n5byY 51026\n5byb 51027\n5byf 51028\n5byg 51029\n5byi 51030\n5byl 51031\n5bym 51032\n5byn 51033\n5byo 51034\n5byp 51035\n5byt 51036\n5byv 51037\n5byx 51038\n5by1 51039\n5by3 51040\n5by5 51041\n5by6 51042\n5by8 51043\n5by+ 51044\n5b2A 51045\n5b2F 51046\n5b2G 51047\n5b2I 51048\n5b2K 51049\n5b2M 51050\n5b2O 51051\n5b2R 51052\n5b2S 51053\n5b2T 51054\n5b2V 51055\n5b2W 51056\n5b2X 51057\n5b2Y 51058\n5b2Z 51059\n5b2d 51060\n5b2f 51061\n5b2h 51062\n5b2i 51063\n5b2k 51064\n5b2l 51065\n5b2m 51066\n5b2n 51067\n5b2p 51068\n5b2q 51069\n5b2r 51070\n5b2s 51071\n5b2t 51072\n5b2w 51073\n5b2x 51074\n5b2z 51075\n5b23 51076\n5b25 51077\n5b26 51078\n5b27 51079\n5b28 51080\n5b2/ 51081\n5b6A 51082\n5b6B 51083\n5b6C 51084\n5b6D 51085\n5b6E 51086\n5b6F 51087\n5b6H 51088\n5b6I 51089\n5b6J 51090\n5b6K 51091\n5b6L 51092\n5b6M 51093\n5b6N 51094\n5b6Q 51095\n5b6R 51096\n5b6S 51097\n5b6T 51098\n5b6V 51099\n5b6X 51100\n5b6Y 51101\n5b6Z 51102\n5b6c 51103\n5b6e 51104\n5b6g 51105\n5b6h 51106\n5b6o 51107\n5b6p 51108\n5b6q 51109\n5b6s 51110\n5b6t 51111\n5b6u 51112\n5b6z 51113\n5b60 51114\n5b61 51115\n5b63 51116\n5b65 51117\n5b68 51118\n5b69 51119\n5b+D 51120\n5b+E 51121\n5b+F 51122\n5b+G 51123\n5b+L 51124\n5b+M 51125\n5b+N 51126\n5b+P 51127\n5b+Q 51128\n5b+R 51129\n5b+S 51130\n5b+W 51131\n5b+X 51132\n5b+Y 51133\n5b+Z 51134\n5b+c 51135\n5b+d 51136\n5b+g 51137\n5b+h 51138\n5b+k 51139\n5b+n 51140\n5b+q 51141\n5b+r 51142\n5b+w 51143\n5b+x 51144\n5b+1 51145\n5b+4 51146\n5b+7 51147\n5b+9 51148\n5b++ 51149\n5b+/ 51150\n5oCA 51151\n5oCB 51152\n5oCC 51153\n5oCD 51154\n5oCE 51155\n5oCF 51156\n5oCG 51157\n5oCN 51158\n5oCO 51159\n5oCP 51160\n5oCS 51161\n5oCU 51162\n5oCV 51163\n5oCW 51164\n5oCX 51165\n5oCZ 51166\n5oCb 51167\n5oCc 51168\n5oCd 51169\n5oCg 51170\n5oCh 51171\n5oCl 51172\n5oCm 51173\n5oCn 51174\n5oCo 51175\n5oCp 51176\n5oCq 51177\n5oCr 51178\n5oCv 51179\n5oCx 51180\n5oC1 51181\n5oC5 51182\n5oC7 51183\n5oC8 51184\n5oC/ 51185\n5oGB 51186\n5oGC 51187\n5oGD 51188\n5oGG 51189\n5oGL 51190\n5oGN 51191\n5oGQ 51192\n5oGS 51193\n5oGT 51194\n5oGV 51195\n5oGZ 51196\n5oGa 51197\n5oGf 51198\n5oGi 51199\n5oGj 51200\n5oGk 51201\n5oGl 51202\n5oGo 51203\n5oGp 51204\n5oGq 51205\n5oGr 51206\n5oGs 51207\n5oGt 51208\n5oGv 51209\n5oGw 51210\n5oGz 51211\n5oG1 51212\n5oG2 51213\n5oG4 51214\n5oG5 51215\n5oG6 51216\n5oG7 51217\n5oG8 51218\n5oG9 51219\n5oG/ 51220\n5oKD 51221\n5oKE 51222\n5oKF 51223\n5oKG 51224\n5oKJ 51225\n5oKL 51226\n5oKM 51227\n5oKN 51228\n5oKS 51229\n5oKU 51230\n5oKV 51231\n5oKW 51232\n5oKa 51233\n5oKb 51234\n5oKd 51235\n5oKf 51236\n5oKg 51237\n5oKj 51238\n5oKm 51239\n5oKn 51240\n5oKo 51241\n5oKp 51242\n5oKq 51243\n5oKr 51244\n5oKs 51245\n5oKt 51246\n5oKv 51247\n5oKx 51248\n5oKy 51249\n5oKz 51250\n5oK0 51251\n5oK1 51252\n5oK2 51253\n5oK4 51254\n5oK7 51255\n5oK8 51256\n5oK9 51257\n5oOF 51258\n5oOG 51259\n5oOH 51260\n5oOK 51261\n5oOL 51262\n5oOO 51263\n5oOR 51264\n5oOV 51265\n5oOY 51266\n5oOZ 51267\n5oOa 51268\n5oOc 51269\n5oOf 51270\n5oOg 51271\n5oOh 51272\n5oOj 51273\n5oOm 51274\n5oOn 51275\n5oOo 51276\n5oOp 51277\n5oOr 51278\n5oOs 51279\n5oOt 51280\n5oOu 51281\n5oOv 51282\n5oOw 51283\n5oOx 51284\n5oOz 51285\n5oO0 51286\n5oO2 51287\n5oO5 51288\n5oO6 51289\n5oO7 51290\n5oSA 51291\n5oSB 51292\n5oSG 51293\n5oSH 51294\n5oSI 51295\n5oSJ 51296\n5oSK 51297\n5oSN 51298\n5oSO 51299\n5oSP 51300\n5oSU 51301\n5oSV 51302\n5oSa 51303\n5oSb 51304\n5oSf 51305\n5oSg 51306\n5oSj 51307\n5oSk 51308\n5oSm 51309\n5oSn 51310\n5oSr 51311\n5oSs 51312\n5oS0 51313\n5oS3 51314\n5oS8 51315\n5oS+ 51316\n5oS/ 51317\n5oWC 51318\n5oWE 51319\n5oWG 51320\n5oWH 51321\n5oWI 51322\n5oWK 51323\n5oWL 51324\n5oWM 51325\n5oWO 51326\n5oWR 51327\n5oWT 51328\n5oWV 51329\n5oWY 51330\n5oWZ 51331\n5oWa 51332\n5oWc 51333\n5oWd 51334\n5oWf 51335\n5oWi 51336\n5oWj 51337\n5oWl 51338\n5oWn 51339\n5oWo 51340\n5oWr 51341\n5oWu 51342\n5oWw 51343\n5oWz 51344\n5oW0 51345\n5oW1 51346\n5oW2 51347\n5oW3 51348\n5oW+ 51349\n5oaC 51350\n5oaK 51351\n5oaL 51352\n5oaN 51353\n5oaO 51354\n5oaQ 51355\n5oaR 51356\n5oaU 51357\n5oaW 51358\n5oaZ 51359\n5oaa 51360\n5oak 51361\n5oan 51362\n5oao 51363\n5oap 51364\n5oar 51365\n5oas 51366\n5oau 51367\n5oay 51368\n5oa2 51369\n5oa3 51370\n5oa6 51371\n5oa+ 51372\n5oeC 51373\n5oeD 51374\n5oeG 51375\n5oeH 51376\n5oeI 51377\n5oeJ 51378\n5oeK 51379\n5oeL 51380\n5oeQ 51381\n5oeR 51382\n5oeS 51383\n5oej 51384\n5oem 51385\n5oey 51386\n5oe1 51387\n5oe2 51388\n5oe3 51389\n5oe4 51390\n5oe6 51391\n5oe8 51392\n5oe+ 51393\n5oe/ 51394\n5oiA 51395\n5oiG 51396\n5oiH 51397\n5oiI 51398\n5oiK 51399\n5oiM 51400\n5oiN 51401\n5oiO 51402\n5oiP 51403\n5oiQ 51404\n5oiR 51405\n5oiS 51406\n5oiU 51407\n5oiV 51408\n5oiW 51409\n5oiX 51410\n5oiY 51411\n5oia 51412\n5oib 51413\n5oie 51414\n5oif 51415\n5oih 51416\n5oii 51417\n5oil 51418\n5oim 51419\n5oiq 51420\n5ois 51421\n5oiu 51422\n5oiv 51423\n5oiw 51424\n5oiy 51425\n5oiz 51426\n5oi0 51427\n5oi2 51428\n5oi3 51429\n5oi4 51430\n5oi7 51431\n5oi9 51432\n5oi+ 51433\n5oi/ 51434\n5omA 51435\n5omB 51436\n5omD 51437\n5omG 51438\n5omH 51439\n5omI 51440\n5omJ 51441\n5omL 51442\n5omN 51443\n5omO 51444\n5omQ 51445\n5omR 51446\n5omS 51447\n5omT 51448\n5omU 51449\n5omV 51450\n5omY 51451\n5omb 51452\n5ome 51453\n5omg 51454\n5omj 51455\n5omk 51456\n5oml 51457\n5omm 51458\n5omn 51459\n5omo 51460\n5omp 51461\n5omq 51462\n5omr 51463\n5oms 51464\n5omt 51465\n5omu 51466\n5omv 51467\n5omw 51468\n5omx 51469\n5omz 51470\n5om2 51471\n5om5 51472\n5om8 51473\n5om+ 51474\n5om/ 51475\n5oqA 51476\n5oqD 51477\n5oqE 51478\n5oqF 51479\n5oqJ 51480\n5oqK 51481\n5oqM 51482\n5oqR 51483\n5oqS 51484\n5oqT 51485\n5oqU 51486\n5oqV 51487\n5oqW 51488\n5oqX 51489\n5oqY 51490\n5oqa 51491\n5oqb 51492\n5oqc 51493\n5oqe 51494\n5oqf 51495\n5oqg 51496\n5oqh 51497\n5oqi 51498\n5oqk 51499\n5oql 51500\n5oqo 51501\n5oqr 51502\n5oqs 51503\n5oqx 51504\n5oq1 51505\n5oq5 51506\n5oq7 51507\n5oq8 51508\n5oq9 51509\n5oq+ 51510\n5oq/ 51511\n5ouC 51512\n5ouD 51513\n5ouE 51514\n5ouF 51515\n5ouG 51516\n5ouH 51517\n5ouI 51518\n5ouJ 51519\n5ouK 51520\n5ouL 51521\n5ouM 51522\n5ouN 51523\n5ouO 51524\n5ouQ 51525\n5ouS 51526\n5ouT 51527\n5ouU 51528\n5ouW 51529\n5ouX 51530\n5ouY 51531\n5ouZ 51532\n5oua 51533\n5oub 51534\n5ouc 51535\n5oud 51536\n5ouf 51537\n5oug 51538\n5ouh 51539\n5oui 51540\n5ouj 51541\n5ouk 51542\n5oul 51543\n5oum 51544\n5oun 51545\n5ouo 51546\n5oup 51547\n5ous 51548\n5out 51549\n5ouu 51550\n5ouv 51551\n5oux 51552\n5ouz 51553\n5ou0 51554\n5ou1 51555\n5ou2 51556\n5ou3 51557\n5ou8 51558\n5ou9 51559\n5ou+ 51560\n5ou/ 51561\n5oyB 51562\n5oyC 51563\n5oyH 51564\n5oyI 51565\n5oyJ 51566\n5oyM 51567\n5oyO 51568\n5oyR 51569\n5oyS 51570\n5oyW 51571\n5oyZ 51572\n5oya 51573\n5oyb 51574\n5oyd 51575\n5oye 51576\n5oyf 51577\n5oyg 51578\n5oyh 51579\n5oyi 51580\n5oyj 51581\n5oyk 51582\n5oyl 51583\n5oyo 51584\n5oyq 51585\n5oyr 51586\n5oyv 51587\n5oyy 51588\n5oy5 51589\n5oy6 51590\n5oy8 51591\n5oy9 51592\n5oy+ 51593\n5oy/ 51594\n5o2C 51595\n5o2F 51596\n5o2G 51597\n5o2J 51598\n5o2K 51599\n5o2L 51600\n5o2M 51601\n5o2N 51602\n5o2O 51603\n5o2P 51604\n5o2Q 51605\n5o2V 51606\n5o2X 51607\n5o2c 51608\n5o2e 51609\n5o2f 51610\n5o2h 51611\n5o2i 51612\n5o2j 51613\n5o2n 51614\n5o2o 51615\n5o2p 51616\n5o2r 51617\n5o2t 51618\n5o2u 51619\n5o2v 51620\n5o2x 51621\n5o2y 51622\n5o22 51623\n5o23 51624\n5o26 51625\n5o27 51626\n5o6A 51627\n5o6C 51628\n5o6D 51629\n5o6H 51630\n5o6I 51631\n5o6J 51632\n5o6K 51633\n5o6M 51634\n5o6O 51635\n5o6P 51636\n5o6Q 51637\n5o6S 51638\n5o6V 51639\n5o6W 51640\n5o6Y 51641\n5o6Z 51642\n5o6b 51643\n5o6e 51644\n5o6f 51645\n5o6g 51646\n5o6h 51647\n5o6i 51648\n5o6j 51649\n5o6l 51650\n5o6n 51651\n5o6o 51652\n5o6p 51653\n5o6q 51654\n5o6s 51655\n5o6u 51656\n5o6w 51657\n5o6y 51658\n5o6z 51659\n5o60 51660\n5o63 51661\n5o64 51662\n5o65 51663\n5o66 51664\n5o67 51665\n5o68 51666\n5o6+ 51667\n5o+A 51668\n5o+D 51669\n5o+E 51670\n5o+G 51671\n5o+I 51672\n5o+J 51673\n5o+N 51674\n5o+O 51675\n5o+P 51676\n5o+Q 51677\n5o+S 51678\n5o+W 51679\n5o+a 51680\n5o+b 51681\n5o+e 51682\n5o+g 51683\n5o+h 51684\n5o+j 51685\n5o+p 51686\n5o+q 51687\n5o+t 51688\n5o+u 51689\n5o+y 51690\n5o+0 51691\n5o+1 51692\n5o+2 51693\n5o+4 51694\n5o+6 51695\n5o+8 51696\n5o+9 51697\n5o+/ 51698\n5pCA 51699\n5pCB 51700\n5pCC 51701\n5pCF 51702\n5pCG 51703\n5pCL 51704\n5pCM 51705\n5pCN 51706\n5pCP 51707\n5pCQ 51708\n5pCT 51709\n5pCU 51710\n5pCW 51711\n5pCX 51712\n5pCb 51713\n5pCc 51714\n5pCe 51715\n5pCg 51716\n5pCh 51717\n5pCi 51718\n5pCj 51719\n5pCm 51720\n5pCn 51721\n5pCo 51722\n5pCq 51723\n5pCs 51724\n5pCt 51725\n5pC0 51726\n5pC1 51727\n5pC2 51728\n5pC5 51729\n5pC6 51730\n5pC9 51731\n5pC+ 51732\n5pGB 51733\n5pGC 51734\n5pGE 51735\n5pGF 51736\n5pGG 51737\n5pGH 51738\n5pGI 51739\n5pGK 51740\n5pGQ 51741\n5pGS 51742\n5pGU 51743\n5pGY 51744\n5pGb 51745\n5pGe 51746\n5pGf 51747\n5pGn 51748\n5pGp 51749\n5pGt 51750\n5pGv 51751\n5pG1 51752\n5pG4 51753\n5pG5 51754\n5pG6 51755\n5pG9 51756\n5pKC 51757\n5pKD 51758\n5pKE 51759\n5pKF 51760\n5pKH 51761\n5pKI 51762\n5pKQ 51763\n5pKR 51764\n5pKS 51765\n5pKT 51766\n5pKV 51767\n5pKW 51768\n5pKZ 51769\n5pKa 51770\n5pKe 51771\n5pKk 51772\n5pKl 51773\n5pKp 51774\n5pKr 51775\n5pKs 51776\n5pKt 51777\n5pKu 51778\n5pKw 51779\n5pKy 51780\n5pKz 51781\n5pK0 51782\n5pK1 51783\n5pK3 51784\n5pK4 51785\n5pK5 51786\n5pK6 51787\n5pK7 51788\n5pK8 51789\n5pK/ 51790\n5pOA 51791\n5pOB 51792\n5pOC 51793\n5pOF 51794\n5pOH 51795\n5pOK 51796\n5pOL 51797\n5pON 51798\n5pOO 51799\n5pOQ 51800\n5pOS 51801\n5pOU 51802\n5pOX 51803\n5pOY 51804\n5pOa 51805\n5pOe 51806\n5pOg 51807\n5pOh 51808\n5pOi 51809\n5pOj 51810\n5pOk 51811\n5pOm 51812\n5pOn 51813\n5pOs 51814\n5pOv 51815\n5pOw 51816\n5pOx 51817\n5pOy 51818\n5pOz 51819\n5pO0 51820\n5pO2 51821\n5pO6 51822\n5pO7 51823\n5pO9 51824\n5pO+ 51825\n5pSA 51826\n5pSG 51827\n5pSJ 51828\n5pSP 51829\n5pSS 51830\n5pSU 51831\n5pSY 51832\n5pSZ 51833\n5pSc 51834\n5pSd 51835\n5pSe 51836\n5pSj 51837\n5pSk 51838\n5pSl 51839\n5pSq 51840\n5pSr 51841\n5pSs 51842\n5pSu 51843\n5pSv 51844\n5pSw 51845\n5pS0 51846\n5pS1 51847\n5pS2 51848\n5pS3 51849\n5pS4 51850\n5pS5 51851\n5pS7 51852\n5pS+ 51853\n5pS/ 51854\n5pWF 51855\n5pWI 51856\n5pWJ 51857\n5pWM 51858\n5pWN 51859\n5pWP 51860\n5pWR 51861\n5pWV 51862\n5pWW 51863\n5pWX 51864\n5pWY 51865\n5pWZ 51866\n5pWb 51867\n5pWd 51868\n5pWe 51869\n5pWi 51870\n5pWj 51871\n5pWm 51872\n5pWr 51873\n5pWs 51874\n5pWw 51875\n5pWy 51876\n5pW0 51877\n5pW1 51878\n5pW3 51879\n5pW4 51880\n5paB 51881\n5paC 51882\n5paD 51883\n5paH 51884\n5paJ 51885\n5paL 51886\n5paM 51887\n5paO 51888\n5paQ 51889\n5paR 51890\n5paT 51891\n5paV 51892\n5paX 51893\n5paZ 51894\n5pab 51895\n5pac 51896\n5pad 51897\n5paf 51898\n5pah 51899\n5pak 51900\n5pal 51901\n5pan 51902\n5pap 51903\n5par 51904\n5pas 51905\n5pat 51906\n5pav 51907\n5paw 51908\n5pa3 51909\n5pa5 51910\n5pa8 51911\n5pa9 51912\n5pa/ 51913\n5peB 51914\n5peD 51915\n5peE 51916\n5peF 51917\n5peG 51918\n5peJ 51919\n5peL 51920\n5peM 51921\n5peO 51922\n5peP 51923\n5peS 51924\n5peW 51925\n5peX 51926\n5peb 51927\n5peg 51928\n5pei 51929\n5pel 51930\n5pem 51931\n5pen 51932\n5peo 51933\n5pep 51934\n5pes 51935\n5pet 51936\n5peu 51937\n5pev 51938\n5pew 51939\n5pex 51940\n5pez 51941\n5pe2 51942\n5pe3 51943\n5pe4 51944\n5pe6 51945\n5pe7 51946\n5pe8 51947\n5piA 51948\n5piC 51949\n5piD 51950\n5piG 51951\n5piH 51952\n5piJ 51953\n5piK 51954\n5piM 51955\n5piO 51956\n5piP 51957\n5piT 51958\n5piU 51959\n5piV 51960\n5piZ 51961\n5pia 51962\n5pid 51963\n5pie 51964\n5pif 51965\n5pig 51966\n5pil 51967\n5pin 51968\n5pio 51969\n5pit 51970\n5piv 51971\n5pix 51972\n5pi0 51973\n5pi1 51974\n5pi2 51975\n5pi6 51976\n5pi8 51977\n5pi+ 51978\n5pmB 51979\n5pmC 51980\n5pmD 51981\n5pmE 51982\n5pmJ 51983\n5pmL 51984\n5pmM 51985\n5pmP 51986\n5pmS 51987\n5pmT 51988\n5pmU 51989\n5pmV 51990\n5pmW 51991\n5pmX 51992\n5pma 51993\n5pmd 51994\n5pme 51995\n5pmf 51996\n5pmh 51997\n5pmi 51998\n5pmk 51999\n5pml 52000\n5pmm 52001\n5pmn 52002\n5pmo 52003\n5pmp 52004\n5pms 52005\n5pmu 52006\n5pmv 52007\n5pmw 52008\n5pmz 52009\n5pm0 52010\n5pm2 52011\n5pm3 52012\n5pm6 52013\n5pm7 52014\n5pm+ 52015\n5pqB 52016\n5pqC 52017\n5pqE 52018\n5pqH 52019\n5pqI 52020\n5pqJ 52021\n5pqM 52022\n5pqN 52023\n5pqO 52024\n5pqR 52025\n5pqW 52026\n5pqX 52027\n5pqY 52028\n5pqd 52029\n5pqi 52030\n5pqm 52031\n5pqn 52032\n5pqo 52033\n5pqr 52034\n5pqu 52035\n5pqy 52036\n5pq0 52037\n5pq5 52038\n5pq7 52039\n5pq8 52040\n5pq+ 52041\n5puE 52042\n5puG 52043\n5puH 52044\n5puI 52045\n5puJ 52046\n5puM 52047\n5puW 52048\n5puZ 52049\n5pua 52050\n5pub 52051\n5puc 52052\n5pud 52053\n5pug 52054\n5puh 52055\n5pum 52056\n5pup 52057\n5pus 52058\n5puw 52059\n5pux 52060\n5puy 52061\n5puz 52062\n5pu0 52063\n5pu1 52064\n5pu3 52065\n5pu4 52066\n5pu5 52067\n5pu6 52068\n5pu8 52069\n5pu9 52070\n5pu+ 52071\n5pu/ 52072\n5pyA 52073\n5pyD 52074\n5pyI 52075\n5pyJ 52076\n5pyK 52077\n5pyL 52078\n5pyN 52079\n5pyP 52080\n5pyQ 52081\n5pyT 52082\n5pyU 52083\n5pyV 52084\n5pyX 52085\n5pyb 52086\n5pyd 52087\n5pyf 52088\n5pym 52089\n5pyn 52090\n5pyo 52091\n5pyq 52092\n5pyr 52093\n5pys 52094\n5pyt 52095\n5pyu 52096\n5pyv 52097\n5pyx 52098\n5py0 52099\n5py1 52100\n5py2 52101\n5py4 52102\n5py6 52103\n5py9 52104\n5py+ 52105\n5p2A 52106\n5p2B 52107\n5p2C 52108\n5p2D 52109\n5p2G 52110\n5p2I 52111\n5p2J 52112\n5p2M 52113\n5p2O 52114\n5p2P 52115\n5p2Q 52116\n5p2R 52117\n5p2T 52118\n5p2W 52119\n5p2Z 52120\n5p2c 52121\n5p2e 52122\n5p2f 52123\n5p2g 52124\n5p2h 52125\n5p2i 52126\n5p2j 52127\n5p2k 52128\n5p2l 52129\n5p2o 52130\n5p2p 52131\n5p2q 52132\n5p2s 52133\n5p2t 52134\n5p2u 52135\n5p2v 52136\n5p2w 52137\n5p2x 52138\n5p2y 52139\n5p2z 52140\n5p21 52141\n5p23 52142\n5p27 52143\n5p28 52144\n5p2+ 52145\n5p2/ 52146\n5p6B 52147\n5p6E 52148\n5p6F 52149\n5p6H 52150\n5p6J 52151\n5p6L 52152\n5p6M 52153\n5p6O 52154\n5p6Q 52155\n5p6T 52156\n5p6V 52157\n5p6X 52158\n5p6Y 52159\n5p6a 52160\n5p6c 52161\n5p6d 52162\n5p6e 52163\n5p6g 52164\n5p6h 52165\n5p6i 52166\n5p6j 52167\n5p6l 52168\n5p6m 52169\n5p6n 52170\n5p6o 52171\n5p6q 52172\n5p6r 52173\n5p6t 52174\n5p6v 52175\n5p6w 52176\n5p6x 52177\n5p6y 52178\n5p6z 52179\n5p60 52180\n5p62 52181\n5p63 52182\n5p64 52183\n5p65 52184\n5p+A 52185\n5p+B 52186\n5p+D 52187\n5p+E 52188\n5p+H 52189\n5p+K 52190\n5p+P 52191\n5p+Q 52192\n5p+R 52193\n5p+S 52194\n5p+T 52195\n5p+U 52196\n5p+Y 52197\n5p+a 52198\n5p+c 52199\n5p+d 52200\n5p+e 52201\n5p+g 52202\n5p+i 52203\n5p+k 52204\n5p+l 52205\n5p+n 52206\n5p+p 52207\n5p+s 52208\n5p+v 52209\n5p+w 52210\n5p+x 52211\n5p+z 52212\n5p+0 52213\n5p+1 52214\n5p+3 52215\n5p+4 52216\n5p+5 52217\n5p+7 52218\n5p+9 52219\n5p++ 52220\n5p+/ 52221\n5qCA 52222\n5qCC 52223\n5qCD 52224\n5qCE 52225\n5qCF 52226\n5qCH 52227\n5qCI 52228\n5qCJ 52229\n5qCK 52230\n5qCL 52231\n5qCM 52232\n5qCO 52233\n5qCP 52234\n5qCR 52235\n5qCT 52236\n5qCW 52237\n5qCX 52238\n5qCY 52239\n5qCd 52240\n5qCe 52241\n5qCf 52242\n5qCh 52243\n5qCi 52244\n5qCn 52245\n5qCp 52246\n5qCq 52247\n5qCr 52248\n5qCs 52249\n5qCx 52250\n5qCy 52251\n5qCz 52252\n5qC0 52253\n5qC3 52254\n5qC4 52255\n5qC5 52256\n5qC7 52257\n5qC8 52258\n5qC9 52259\n5qC+ 52260\n5qGA 52261\n5qGB 52262\n5qGC 52263\n5qGD 52264\n5qGE 52265\n5qGF 52266\n5qGG 52267\n5qGI 52268\n5qGJ 52269\n5qGM 52270\n5qGO 52271\n5qGQ 52272\n5qGR 52273\n5qGT 52274\n5qGU 52275\n5qGV 52276\n5qGW 52277\n5qGZ 52278\n5qGc 52279\n5qGd 52280\n5qGf 52281\n5qGg 52282\n5qGh 52283\n5qGi 52284\n5qGj 52285\n5qGk 52286\n5qGl 52287\n5qGm 52288\n5qGn 52289\n5qGo 52290\n5qGp 52291\n5qGr 52292\n5qGv 52293\n5qG0 52294\n5qG2 52295\n5qG3 52296\n5qG8 52297\n5qG+ 52298\n5qG/ 52299\n5qKB 52300\n5qKD 52301\n5qKF 52302\n5qKG 52303\n5qKI 52304\n5qKP 52305\n5qKT 52306\n5qKU 52307\n5qKX 52308\n5qKb 52309\n5qKd 52310\n5qKf 52311\n5qKg 52312\n5qKh 52313\n5qKi 52314\n5qKj 52315\n5qKm 52316\n5qKn 52317\n5qKo 52318\n5qKq 52319\n5qKr 52320\n5qKt 52321\n5qKv 52322\n5qKw 52323\n5qKx 52324\n5qKz 52325\n5qK1 52326\n5qK2 52327\n5qK5 52328\n5qK6 52329\n5qK7 52330\n5qK8 52331\n5qK/ 52332\n5qOA 52333\n5qOC 52334\n5qOE 52335\n5qOF 52336\n5qOI 52337\n5qOJ 52338\n5qOK 52339\n5qOL 52340\n5qON 52341\n5qOS 52342\n5qOU 52343\n5qOV 52344\n5qOX 52345\n5qOY 52346\n5qOa 52347\n5qOf 52348\n5qOg 52349\n5qOh 52350\n5qOj 52351\n5qOn 52352\n5qOo 52353\n5qOs 52354\n5qOu 52355\n5qOv 52356\n5qOw 52357\n5qOx 52358\n5qOy 52359\n5qO1 52360\n5qO2 52361\n5qO3 52362\n5qO5 52363\n5qO6 52364\n5qO7 52365\n5qO8 52366\n5qSA 52367\n5qSB 52368\n5qSF 52369\n5qSI 52370\n5qSK 52371\n5qSL 52372\n5qSM 52373\n5qSN 52374\n5qSO 52375\n5qSP 52376\n5qSQ 52377\n5qSS 52378\n5qSZ 52379\n5qSa 52380\n5qSb 52381\n5qSc 52382\n5qSf 52383\n5qSh 52384\n5qSj 52385\n5qSk 52386\n5qSl 52387\n5qSo 52388\n5qSq 52389\n5qSt 52390\n5qSw 52391\n5qS0 52392\n5qS5 52393\n5qS9 52394\n5qS/ 52395\n5qWA 52396\n5qWC 52397\n5qWJ 52398\n5qWK 52399\n5qWT 52400\n5qWU 52401\n5qWV 52402\n5qWX 52403\n5qWZ 52404\n5qWa 52405\n5qWc 52406\n5qWd 52407\n5qWe 52408\n5qWg 52409\n5qWh 52410\n5qWi 52411\n5qWj 52412\n5qWm 52413\n5qWq 52414\n5qWr 52415\n5qWt 52416\n5qWu 52417\n5qWv 52418\n5qWx 52419\n5qWz 52420\n5qW1 52421\n5qW3 52422\n5qW4 52423\n5qW5 52424\n5qW8 52425\n5qW9 52426\n5qW+ 52427\n5qaB 52428\n5qaC 52429\n5qaE 52430\n5qaG 52431\n5qaH 52432\n5qaI 52433\n5qaJ 52434\n5qaK 52435\n5qaO 52436\n5qaR 52437\n5qaU 52438\n5qaV 52439\n5qaW 52440\n5qaY 52441\n5qab 52442\n5qac 52443\n5qan 52444\n5qao 52445\n5qar 52446\n5qat 52447\n5qau 52448\n5qay 52449\n5qa0 52450\n5qa3 52451\n5qa7 52452\n5qa8 52453\n5qa+ 52454\n5qa/ 52455\n5qeB 52456\n5qeD 52457\n5qeF 52458\n5qeH 52459\n5qeK 52460\n5qeL 52461\n5qeM 52462\n5qeN 52463\n5qeO 52464\n5qeQ 52465\n5qeT 52466\n5qeW 52467\n5qeY 52468\n5qeZ 52469\n5qeb 52470\n5qef 52471\n5qen 52472\n5qeo 52473\n5qep 52474\n5qer 52475\n5qet 52476\n5qey 52477\n5qez 52478\n5qe7 52479\n5qe9 52480\n5qe/ 52481\n5qiA 52482\n5qiB 52483\n5qiC 52484\n5qiF 52485\n5qiJ 52486\n5qiK 52487\n5qiL 52488\n5qiR 52489\n5qiS 52490\n5qiT 52491\n5qiW 52492\n5qiX 52493\n5qiY 52494\n5qiZ 52495\n5qib 52496\n5qie 52497\n5qif 52498\n5qih 52499\n5qij 52500\n5qio 52501\n5qip 52502\n5qiq 52503\n5qir 52504\n5qiu 52505\n5qiv 52506\n5qix 52507\n5qi1 52508\n5qi4 52509\n5qi5 52510\n5qi6 52511\n5qi9 52512\n5qi+ 52513\n5qmE 52514\n5qmF 52515\n5qmH 52516\n5qmI 52517\n5qmL 52518\n5qmQ 52519\n5qmY 52520\n5qmZ 52521\n5qmb 52522\n5qme 52523\n5qmf 52524\n5qmh 52525\n5qmi 52526\n5qml 52527\n5qmm 52528\n5qmr 52529\n5qmx 52530\n5qmy 52531\n5qm5 52532\n5qm8 52533\n5qm/ 52534\n5qqA 52535\n5qqE 52536\n5qqJ 52537\n5qqN 52538\n5qqO 52539\n5qqQ 52540\n5qqU 52541\n5qqX 52542\n5qqc 52543\n5qqe 52544\n5qqg 52545\n5qqi 52546\n5qqj 52547\n5qqp 52548\n5qqq 52549\n5qqr 52550\n5qqs 52551\n5qqu 52552\n5qqv 52553\n5qqz 52554\n5qq4 52555\n5qq7 52556\n5qq/ 52557\n5quB 52558\n5quC 52559\n5quD 52560\n5quI 52561\n5quT 52562\n5qua 52563\n5qub 52564\n5que 52565\n5quf 52566\n5qun 52567\n5quo 52568\n5quq 52569\n5qu6 52570\n5qu7 52571\n5qyE 52572\n5qyF 52573\n5qyK 52574\n5qyS 52575\n5qyW 52576\n5qyd 52577\n5qye 52578\n5qyg 52579\n5qyh 52580\n5qyi 52581\n5qyj 52582\n5qyk 52583\n5qyn 52584\n5qyy 52585\n5qy3 52586\n5qy4 52587\n5qy5 52588\n5qy6 52589\n5qy7 52590\n5qy9 52591\n5qy+ 52592\n5q2A 52593\n5q2D 52594\n5q2G 52595\n5q2H 52596\n5q2J 52597\n5q2M 52598\n5q2O 52599\n5q2Q 52600\n5q2T 52601\n5q2U 52602\n5q2Y 52603\n5q2Z 52604\n5q2h 52605\n5q2i 52606\n5q2j 52607\n5q2k 52608\n5q2l 52609\n5q2m 52610\n5q2n 52611\n5q2p 52612\n5q2q 52613\n5q2t 52614\n5q2v 52615\n5q2y 52616\n5q2z 52617\n5q20 52618\n5q23 52619\n5q24 52620\n5q25 52621\n5q27 52622\n5q28 52623\n5q2/ 52624\n5q6B 52625\n5q6C 52626\n5q6D 52627\n5q6E 52628\n5q6G 52629\n5q6H 52630\n5q6J 52631\n5q6K 52632\n5q6L 52633\n5q6N 52634\n5q6S 52635\n5q6T 52636\n5q6W 52637\n5q6Y 52638\n5q6a 52639\n5q6b 52640\n5q6h 52641\n5q6q 52642\n5q6t 52643\n5q6u 52644\n5q6v 52645\n5q6y 52646\n5q6z 52647\n5q60 52648\n5q61 52649\n5q63 52650\n5q66 52651\n5q67 52652\n5q68 52653\n5q69 52654\n5q6/ 52655\n5q+A 52656\n5q+B 52657\n5q+C 52658\n5q+F 52659\n5q+G 52660\n5q+L 52661\n5q+N 52662\n5q+O 52663\n5q+P 52664\n5q+Q 52665\n5q+S 52666\n5q+T 52667\n5q+U 52668\n5q+V 52669\n5q+W 52670\n5q+X 52671\n5q+Y 52672\n5q+Z 52673\n5q+b 52674\n5q+f 52675\n5q+h 52676\n5q+r 52677\n5q+s 52678\n5q+v 52679\n5q+z 52680\n5q+5 52681\n5q+9 52682\n5rCF 52683\n5rCG 52684\n5rCH 52685\n5rCI 52686\n5rCN 52687\n5rCP 52688\n5rCQ 52689\n5rCR 52690\n5rCT 52691\n5rCU 52692\n5rCV 52693\n5rCW 52694\n5rCX 52695\n5rCY 52696\n5rCZ 52697\n5rCa 52698\n5rCb 52699\n5rCf 52700\n5rCh 52701\n5rCi 52702\n5rCj 52703\n5rCk 52704\n5rCm 52705\n5rCn 52706\n5rCo 52707\n5rCp 52708\n5rCq 52709\n5rCu 52710\n5rCv 52711\n5rCw 52712\n5rCy 52713\n5rC0 52714\n5rC3 52715\n5rC4 52716\n5rC5 52717\n5rC9 52718\n5rC+ 52719\n5rGA 52720\n5rGB 52721\n5rGC 52722\n5rGG 52723\n5rGH 52724\n5rGI 52725\n5rGJ 52726\n5rGK 52727\n5rGO 52728\n5rGQ 52729\n5rGU 52730\n5rGV 52731\n5rGX 52732\n5rGa 52733\n5rGb 52734\n5rGc 52735\n5rGd 52736\n5rGe 52737\n5rGf 52738\n5rGg 52739\n5rGh 52740\n5rGk 52741\n5rGo 52742\n5rGp 52743\n5rGq 52744\n5rGt 52745\n5rGw 52746\n5rGy 52747\n5rG0 52748\n5rG1 52749\n5rG2 52750\n5rG5 52751\n5rG6 52752\n5rG9 52753\n5rG+ 52754\n5rKB 52755\n5rKC 52756\n5rKD 52757\n5rKE 52758\n5rKF 52759\n5rKG 52760\n5rKI 52761\n5rKJ 52762\n5rKM 52763\n5rKP 52764\n5rKQ 52765\n5rKS 52766\n5rKT 52767\n5rKU 52768\n5rKW 52769\n5rKZ 52770\n5rKa 52771\n5rKb 52772\n5rKf 52773\n5rKh 52774\n5rKi 52775\n5rKj 52776\n5rKk 52777\n5rKl 52778\n5rKm 52779\n5rKn 52780\n5rKo 52781\n5rKp 52782\n5rKq 52783\n5rKr 52784\n5rKt 52785\n5rKu 52786\n5rKx 52787\n5rKz 52788\n5rK4 52789\n5rK5 52790\n5rK7 52791\n5rK8 52792\n5rK9 52793\n5rK+ 52794\n5rK/ 52795\n5rOB 52796\n5rOD 52797\n5rOE 52798\n5rOF 52799\n5rOG 52800\n5rOJ 52801\n5rOK 52802\n5rOM 52803\n5rOQ 52804\n5rOS 52805\n5rOT 52806\n5rOU 52807\n5rOV 52808\n5rOW 52809\n5rOX 52810\n5rOZ 52811\n5rOa 52812\n5rOb 52813\n5rOe 52814\n5rOg 52815\n5rOh 52816\n5rOi 52817\n5rOj 52818\n5rOl 52819\n5rOo 52820\n5rOq 52821\n5rOr 52822\n5rOs 52823\n5rOu 52824\n5rOv 52825\n5rOw 52826\n5rOx 52827\n5rOz 52828\n5rO1 52829\n5rO3 52830\n5rO4 52831\n5rO6 52832\n5rO7 52833\n5rO8 52834\n5rO9 52835\n5rO+ 52836\n5rSB 52837\n5rSE 52838\n5rSH 52839\n5rSL 52840\n5rSM 52841\n5rSO 52842\n5rSP 52843\n5rSR 52844\n5rSS 52845\n5rSX 52846\n5rSZ 52847\n5rSb 52848\n5rSe 52849\n5rSf 52850\n5rSj 52851\n5rSl 52852\n5rSn 52853\n5rSp 52854\n5rSq 52855\n5rSu 52856\n5rSx 52857\n5rSy 52858\n5rSz 52859\n5rS1 52860\n5rS2 52861\n5rS4 52862\n5rS5 52863\n5rS6 52864\n5rS7 52865\n5rS8 52866\n5rS9 52867\n5rS+ 52868\n5rS/ 52869\n5rWB 52870\n5rWD 52871\n5rWE 52872\n5rWF 52873\n5rWG 52874\n5rWH 52875\n5rWI 52876\n5rWJ 52877\n5rWK 52878\n5rWL 52879\n5rWN 52880\n5rWO 52881\n5rWP 52882\n5rWQ 52883\n5rWR 52884\n5rWS 52885\n5rWT 52886\n5rWU 52887\n5rWZ 52888\n5rWa 52889\n5rWb 52890\n5rWc 52891\n5rWe 52892\n5rWg 52893\n5rWj 52894\n5rWl 52895\n5rWm 52896\n5rWp 52897\n5rWq 52898\n5rWs 52899\n5rWu 52900\n5rWv 52901\n5rW0 52902\n5rW3 52903\n5rW4 52904\n5rW5 52905\n5raC 52906\n5raF 52907\n5raI 52908\n5raJ 52909\n5raM 52910\n5raO 52911\n5raR 52912\n5raT 52913\n5raU 52914\n5raV 52915\n5raW 52916\n5raY 52917\n5raZ 52918\n5rab 52919\n5rac 52920\n5rad 52921\n5rae 52922\n5raf 52923\n5rag 52924\n5rah 52925\n5raj 52926\n5rak 52927\n5ram 52928\n5ran 52929\n5rao 52930\n5rap 52931\n5raq 52932\n5rau 52933\n5rav 52934\n5ray 52935\n5ra1 52936\n5ra4 52937\n5ra8 52938\n5ra/ 52939\n5reA 52940\n5reE 52941\n5reF 52942\n5reG 52943\n5reH 52944\n5reL 52945\n5reM 52946\n5reP 52947\n5reR 52948\n5reS 52949\n5reW 52950\n5reY 52951\n5reZ 52952\n5rea 52953\n5rec 52954\n5red 52955\n5ree 52956\n5reg 52957\n5reh 52958\n5rek 52959\n5rem 52960\n5reo 52961\n5req 52962\n5rer 52963\n5res 52964\n5reu 52965\n5rev 52966\n5rex 52967\n5rez 52968\n5re1 52969\n5re3 52970\n5re4 52971\n5re5 52972\n5re6 52973\n5re7 52974\n5re8 52975\n5riA 52976\n5riF 52977\n5riH 52978\n5riI 52979\n5riJ 52980\n5riK 52981\n5riL 52982\n5riM 52983\n5riN 52984\n5riO 52985\n5riQ 52986\n5riR 52987\n5riT 52988\n5riU 52989\n5riV 52990\n5riX 52991\n5riZ 52992\n5ria 52993\n5rib 52994\n5rid 52995\n5rif 52996\n5rig 52997\n5rih 52998\n5rij 52999\n5rik 53000\n5ril 53001\n5rim 53002\n5rip 53003\n5rir 53004\n5ris 53005\n5rit 53006\n5riv 53007\n5riy 53008\n5ri0 53009\n5ri4 53010\n5ri6 53011\n5ri+ 53012\n5rmD 53013\n5rmE 53014\n5rmJ 53015\n5rmK 53016\n5rmN 53017\n5rmO 53018\n5rmT 53019\n5rmU 53020\n5rmW 53021\n5rmY 53022\n5rmb 53023\n5rmc 53024\n5rmd 53025\n5rmf 53026\n5rmj 53027\n5rmn 53028\n5rmr 53029\n5rmu 53030\n5rmv 53031\n5rmy 53032\n5rm0 53033\n5rm2 53034\n5rm+ 53035\n5rm/ 53036\n5rqA 53037\n5rqC 53038\n5rqD 53039\n5rqF 53040\n5rqG 53041\n5rqH 53042\n5rqJ 53043\n5rqM 53044\n5rqN 53045\n5rqP 53046\n5rqQ 53047\n5rqW 53048\n5rqY 53049\n5rqc 53050\n5rqd 53051\n5rqf 53052\n5rqi 53053\n5rql 53054\n5rqn 53055\n5rqq 53056\n5rqr 53057\n5rqv 53058\n5rqx 53059\n5rqy 53060\n5rq0 53061\n5rq2 53062\n5rq3 53063\n5rq6 53064\n5rq9 53065\n5ruB 53066\n5ruC 53067\n5ruE 53068\n5ruF 53069\n5ruH 53070\n5ruI 53071\n5ruJ 53072\n5ruL 53073\n5ruM 53074\n5ruP 53075\n5ruR 53076\n5ruT 53077\n5ruU 53078\n5ruV 53079\n5ruX 53080\n5ruY 53081\n5rua 53082\n5rud 53083\n5rue 53084\n5ruf 53085\n5rug 53086\n5ruh 53087\n5rui 53088\n5ruk 53089\n5rul 53090\n5rum 53091\n5ruo 53092\n5rup 53093\n5rus 53094\n5ruv 53095\n5ruy 53096\n5ru0 53097\n5ru4 53098\n5ru5 53099\n5ru+ 53100\n5ru/ 53101\n5ryB 53102\n5ryC 53103\n5ryG 53104\n5ryI 53105\n5ryJ 53106\n5ryP 53107\n5ryR 53108\n5ryT 53109\n5ryU 53110\n5ryV 53111\n5ryg 53112\n5ryi 53113\n5ryj 53114\n5ryp 53115\n5ryq 53116\n5ryr 53117\n5rys 53118\n5ryt 53119\n5ryv 53120\n5ryx 53121\n5ryy 53122\n5ryz 53123\n5ry0 53124\n5ry2 53125\n5ry3 53126\n5ry4 53127\n5ry8 53128\n5ry+ 53129\n5ry/ 53130\n5r2F 53131\n5r2G 53132\n5r2H 53133\n5r2L 53134\n5r2N 53135\n5r2O 53136\n5r2P 53137\n5r2R 53138\n5r2U 53139\n5r2Y 53140\n5r2b 53141\n5r2c 53142\n5r2e 53143\n5r2f 53144\n5r2h 53145\n5r2i 53146\n5r2k 53147\n5r2l 53148\n5r2m 53149\n5r2p 53150\n5r2s 53151\n5r2t 53152\n5r2u 53153\n5r2w 53154\n5r2y 53155\n5r20 53156\n5r21 53157\n5r24 53158\n5r26 53159\n5r28 53160\n5r6A 53161\n5r6B 53162\n5r6E 53163\n5r6G 53164\n5r6I 53165\n5r6M 53166\n5r6N 53167\n5r6O 53168\n5r6X 53169\n5r6c 53170\n5r6h 53171\n5r6j 53172\n5r6k 53173\n5r6n 53174\n5r6q 53175\n5r6x 53176\n5r6z 53177\n5r60 53178\n5r62 53179\n5r65 53180\n5r+A 53181\n5r+B 53182\n5r+C 53183\n5r+D 53184\n5r+G 53185\n5r+J 53186\n5r+R 53187\n5r+S 53188\n5r+V 53189\n5r+Y 53190\n5r+b 53191\n5r+e 53192\n5r+f 53193\n5r+g 53194\n5r+h 53195\n5r+k 53196\n5r+p 53197\n5r+r 53198\n5r+s 53199\n5r+u 53200\n5r+v 53201\n5r+x 53202\n5r+2 53203\n5r+6 53204\n5r++ 53205\n54CJ 53206\n54CL 53207\n54CN 53208\n54CP 53209\n54CR 53210\n54CV 53211\n54Ca 53212\n54Cb 53213\n54Cd 53214\n54Ce 53215\n54Cf 53216\n54Cj 53217\n54Cm 53218\n54Cn 53219\n54Cs 53220\n54Cw 53221\n54Cy 53222\n54C5 53223\n54C+ 53224\n54GM 53225\n54GP 53226\n54GR 53227\n54GY 53228\n54Ge 53229\n54Gj 53230\n54Gr 53231\n54Gt 53232\n54Gv 53233\n54Gw 53234\n54G1 53235\n54G2 53236\n54G4 53237\n54G8 53238\n54G9 53239\n54G+ 53240\n54G/ 53241\n54KA 53242\n54KB 53243\n54KF 53244\n54KG 53245\n54KJ 53246\n54KK 53247\n54KO 53248\n54KS 53249\n54KU 53250\n54KV 53251\n54KW 53252\n54KZ 53253\n54Kc 53254\n54Kd 53255\n54Kf 53256\n54Kk 53257\n54Kq 53258\n54Kr 53259\n54Ks 53260\n54Kt 53261\n54Ku 53262\n54Kv 53263\n54Kz 53264\n54K0 53265\n54K3 53266\n54K4 53267\n54K5 53268\n54K6 53269\n54K8 53270\n54K9 53271\n54OA 53272\n54OB 53273\n54OC 53274\n54OD 53275\n54OI 53276\n54OK 53277\n54OP 53278\n54OW 53279\n54OY 53280\n54OZ 53281\n54Ob 53282\n54Oc 53283\n54Of 53284\n54Ok 53285\n54Om 53286\n54On 53287\n54Oo 53288\n54Op 53289\n54Or 53290\n54Os 53291\n54Ot 53292\n54Ov 53293\n54Ox 53294\n54O3 53295\n54O5 53296\n54O9 53297\n54SJ 53298\n54SK 53299\n54SQ 53300\n54ST 53301\n54SU 53302\n54SV 53303\n54SW 53304\n54SX 53305\n54SY 53306\n54SZ 53307\n54Sa 53308\n54Sc 53309\n54Sh 53310\n54Sm 53311\n54Sv 53312\n54Sw 53313\n54Sx 53314\n54S2 53315\n54S8 53316\n54WF 53317\n54WJ 53318\n54WK 53319\n54WL 53320\n54WM 53321\n54WO 53322\n54WV 53323\n54WW 53324\n54WZ 53325\n54Wc 53326\n54We 53327\n54Wf 53328\n54Wi 53329\n54Wk 53330\n54Wl 53331\n54Wm 53332\n54Wn 53333\n54Wo 53334\n54Wp 53335\n54Ws 53336\n54Wu 53337\n54Wy 53338\n54Wz 53339\n54W4 53340\n54W6 53341\n54W9 53342\n54W/ 53343\n54aE 53344\n54aK 53345\n54aP 53346\n54aU 53347\n54aY 53348\n54aZ 53349\n54ac 53350\n54af 53351\n54ag 53352\n54ao 53353\n54as 53354\n54ax 53355\n54az 53356\n54a1 53357\n54a5 53358\n54a+ 53359\n54eD 53360\n54eE 53361\n54eI 53362\n54eJ 53363\n54eK 53364\n54eL 53365\n54eO 53366\n54eQ 53367\n54eS 53368\n54eU 53369\n54eV 53370\n54eX 53371\n54eZ 53372\n54ea 53373\n54ef 53374\n54eg 53375\n54el 53376\n54em 53377\n54en 53378\n54et 53379\n54eu 53380\n54e1 53381\n54e5 53382\n54e7 53383\n54e8 53384\n54e/ 53385\n54iG 53386\n54iN 53387\n54iQ 53388\n54ib 53389\n54io 53390\n54iq 53391\n54is 53392\n54it 53393\n54iw 53394\n54ix 53395\n54iy 53396\n54i1 53397\n54i2 53398\n54i3 53399\n54i4 53400\n54i5 53401\n54i6 53402\n54i7 53403\n54i8 53404\n54i9 53405\n54i+ 53406\n54i/ 53407\n54mA 53408\n54mB 53409\n54mC 53410\n54mG 53411\n54mH 53412\n54mI 53413\n54mM 53414\n54mN 53415\n54mS 53416\n54mV 53417\n54mW 53418\n54mY 53419\n54mZ 53420\n54mb 53421\n54md 53422\n54mf 53423\n54mg 53424\n54mh 53425\n54mi 53426\n54mk 53427\n54mm 53428\n54mn 53429\n54mp 53430\n54mu 53431\n54mv 53432\n54my 53433\n54m0 53434\n54m1 53435\n54m4 53436\n54m5 53437\n54m6 53438\n54m9 53439\n54m+ 53440\n54qA 53441\n54qB 53442\n54qC 53443\n54qE 53444\n54qH 53445\n54qK 53446\n54qL 53447\n54qN 53448\n54qS 53449\n54qW 53450\n54qf 53451\n54qg 53452\n54qi 53453\n54qn 53454\n54qs 53455\n54qv 53456\n54qw 53457\n54qz 53458\n54q0 53459\n54q2 53460\n54q3 53461\n54q4 53462\n54q5 53463\n54q8 53464\n54uA 53465\n54uC 53466\n54uE 53467\n54uG 53468\n54uI 53469\n54uM 53470\n54uN 53471\n54uO 53472\n54uQ 53473\n54uS 53474\n54uX 53475\n54uZ 53476\n54ub 53477\n54ud 53478\n54ue 53479\n54ug 53480\n54uh 53481\n54ui 53482\n54uo 53483\n54up 53484\n54us 53485\n54ut 53486\n54uu 53487\n54uw 53488\n54ux 53489\n54uy 53490\n54u0 53491\n54u3 53492\n54u4 53493\n54u5 53494\n54u7 53495\n54u8 53496\n54u9 53497\n54yB 53498\n54yH 53499\n54yK 53500\n54yO 53501\n54yV 53502\n54yW 53503\n54yX 53504\n54yZ 53505\n54yb 53506\n54yc 53507\n54yd 53508\n54ye 53509\n54yf 53510\n54yh 53511\n54yi 53512\n54yl 53513\n54yo 53514\n54yp 53515\n54yq 53516\n54yr 53517\n54ys 53518\n54yu 53519\n54yv 53520\n54yx 53521\n54yy 53522\n54y0 53523\n54y2 53524\n54y3 53525\n54y5 53526\n54y+ 53527\n54y/ 53528\n542E 53529\n542F 53530\n542O 53531\n542P 53532\n542Q 53533\n542S 53534\n542X 53535\n542g 53536\n542j 53537\n542o 53538\n542q 53539\n542s 53540\n542t 53541\n542w 53542\n542y 53543\n5421 53544\n5424 53545\n5426 53546\n5427 53547\n542+ 53548\n546E 53549\n546H 53550\n546J 53551\n546L 53552\n546O 53553\n546R 53554\n546V 53555\n546W 53556\n546Y 53557\n546Z 53558\n546a 53559\n546b 53560\n546f 53561\n546g 53562\n546i 53563\n546l 53564\n546m 53565\n546p 53566\n546r 53567\n546u 53568\n546v 53569\n546w 53570\n546y 53571\n546z 53572\n5463 53573\n5465 53574\n5466 53575\n5467 53576\n54+A 53577\n54+C 53578\n54+F 53579\n54+I 53580\n54+J 53581\n54+K 53582\n54+N 53583\n54+O 53584\n54+P 53585\n54+Q 53586\n54+R 53587\n54+Z 53588\n54+c 53589\n54+e 53590\n54+g 53591\n54+j 53592\n54+l 53593\n54+m 53594\n54+n 53595\n54+p 53596\n54+q 53597\n54+r 53598\n54+t 53599\n54+u 53600\n54+w 53601\n54+y 53602\n54+4 53603\n54+6 53604\n54+9 53605\n54++ 53606\n55CD 53607\n55CF 53608\n55CG 53609\n55CH 53610\n55CJ 53611\n55CK 53612\n55CN 53613\n55CO 53614\n55CP 53615\n55CQ 53616\n55Ca 53617\n55Cb 53618\n55Ci 53619\n55Ck 53620\n55Cl 53621\n55Cm 53622\n55Co 53623\n55Cq 53624\n55Cs 53625\n55Cu 53626\n55Cv 53627\n55Cw 53628\n55Cy 53629\n55Cz 53630\n55C0 53631\n55C1 53632\n55C2 53633\n55C6 53634\n55C8 53635\n55GA 53636\n55GB 53637\n55GE 53638\n55GV 53639\n55GX 53640\n55GZ 53641\n55Ga 53642\n55Gb 53643\n55Gc 53644\n55Ge 53645\n55Gf 53646\n55Gg 53647\n55Gj 53648\n55Gk 53649\n55Gp 53650\n55Gq 53651\n55Gt 53652\n55Gu 53653\n55Gv 53654\n55Gw 53655\n55Gx 53656\n55Gz 53657\n55G0 53658\n55G2 53659\n55G3 53660\n55G+ 53661\n55KA 53662\n55KB 53663\n55KD 53664\n55KH 53665\n55KI 53666\n55KL 53667\n55KO 53668\n55KQ 53669\n55KY 53670\n55Kc 53671\n55Kd 53672\n55Ke 53673\n55Kf 53674\n55Kg 53675\n55Kj 53676\n55Kn 53677\n55Ko 53678\n55Kp 53679\n55Kw 53680\n55K6 53681\n55K9 53682\n55OK 53683\n55OP 53684\n55OS 53685\n55OU 53686\n55OY 53687\n55Oc 53688\n55Og 53689\n55Oi 53690\n55Oj 53691\n55Ok 53692\n55Om 53693\n55Or 53694\n55Ou 53695\n55Ov 53696\n55O0 53697\n55O2 53698\n55O3 53699\n55O/ 53700\n55SD 53701\n55SE 53702\n55SM 53703\n55SN 53704\n55SO 53705\n55SP 53706\n55SR 53707\n55ST 53708\n55SV 53709\n55SY 53710\n55SZ 53711\n55Sa 53712\n55Sc 53713\n55Sf 53714\n55Si 53715\n55Sj 53716\n55Sl 53717\n55Sm 53718\n55So 53719\n55Sp 53720\n55Sq 53721\n55Sr 53722\n55Ss 53723\n55St 53724\n55Sv 53725\n55Sw 53726\n55Sx 53727\n55Sy 53728\n55Sz 53729\n55S0 53730\n55S1 53731\n55S3 53732\n55S4 53733\n55S6 53734\n55S7 53735\n55S+ 53736\n55WA 53737\n55WF 53738\n55WI 53739\n55WJ 53740\n55WK 53741\n55WL 53742\n55WM 53743\n55WO 53744\n55WP 53745\n55WR 53746\n55WU 53747\n55WZ 53748\n55Wa 53749\n55Wb 53750\n55Wc 53751\n55Wd 53752\n55Wg 53753\n55Wi 53754\n55Wk 53755\n55Wl 53756\n55Wm 53757\n55Wq 53758\n55Wr 53759\n55Ws 53760\n55Wt 53761\n55Wv 53762\n55Ww 53763\n55Wy 53764\n55Wz 53765\n55W0 53766\n55W1 53767\n55W2 53768\n55W3 53769\n55W4 53770\n55W5 53771\n55W/ 53772\n55aD 53773\n55aG 53774\n55aH 53775\n55aK 53776\n55aL 53777\n55aN 53778\n55aO 53779\n55aP 53780\n55aR 53781\n55aU 53782\n55aW 53783\n55aX 53784\n55aZ 53785\n55aa 53786\n55ad 53787\n55af 53788\n55ag 53789\n55ah 53790\n55aj 53791\n55ak 53792\n55al 53793\n55ar 53794\n55as 53795\n55at 53796\n55au 53797\n55av 53798\n55aw 53799\n55ax 53800\n55ay 53801\n55az 53802\n55a0 53803\n55a1 53804\n55a4 53805\n55a5 53806\n55a8 53807\n55a9 53808\n55a+ 53809\n55eC 53810\n55eD 53811\n55eE 53812\n55eF 53813\n55eH 53814\n55eI 53815\n55eJ 53816\n55eK 53817\n55eN 53818\n55eS 53819\n55eU 53820\n55eV 53821\n55eY 53822\n55eZ 53823\n55eb 53824\n55ee 53825\n55ei 53826\n55ej 53827\n55ek 53828\n55em 53829\n55en 53830\n55eo 53831\n55ep 53832\n55eq 53833\n55er 53834\n55ew 53835\n55ex 53836\n55ey 53837\n55ez 53838\n55e0 53839\n55e5 53840\n55e6 53841\n55e8 53842\n55e+ 53843\n55e/ 53844\n55iA 53845\n55iB 53846\n55iF 53847\n55iG 53848\n55iK 53849\n55iL 53850\n55iM 53851\n55iN 53852\n55iT 53853\n55iV 53854\n55iX 53855\n55iY 53856\n55iZ 53857\n55id 53858\n55if 53859\n55ig 53860\n55ih 53861\n55ii 53862\n55ik 53863\n55im 53864\n55in 53865\n55ip 53866\n55iq 53867\n55ir 53868\n55iw 53869\n55iz 53870\n55i0 53871\n55i1 53872\n55i4 53873\n55i7 53874\n55i8 53875\n55i+ 53876\n55i/ 53877\n55mA 53878\n55mC 53879\n55mD 53880\n55mG 53881\n55mH 53882\n55mI 53883\n55mM 53884\n55mN 53885\n55mO 53886\n55mS 53887\n55mU 53888\n55mW 53889\n55mY 53890\n55mc 53891\n55me 53892\n55mh 53893\n55mi 53894\n55mj 53895\n55ml 53896\n55mn 53897\n55mp 53898\n55mq 53899\n55mr 53900\n55ms 53901\n55mu 53902\n55mv 53903\n55mw 53904\n55mx 53905\n55my 53906\n55m4 53907\n55m6 53908\n55m7 53909\n55m8 53910\n55m9 53911\n55m+ 53912\n55qA 53913\n55qC 53914\n55qE 53915\n55qG 53916\n55qH 53917\n55qI 53918\n55qL 53919\n55qM 53920\n55qO 53921\n55qQ 53922\n55qR 53923\n55qT 53924\n55qV 53925\n55qW 53926\n55qZ 53927\n55qa 53928\n55qd 53929\n55qe 53930\n55qk 53931\n55qm 53932\n55qu 53933\n55qv 53934\n55qw 53935\n55qx 53936\n55qy 53937\n55q0 53938\n55q3 53939\n55q4 53940\n55q5 53941\n55q6 53942\n55q/ 53943\n55uC 53944\n55uD 53945\n55uF 53946\n55uG 53947\n55uI 53948\n55uJ 53949\n55uK 53950\n55uN 53951\n55uO 53952\n55uP 53953\n55uQ 53954\n55uR 53955\n55uS 53956\n55uU 53957\n55uW 53958\n55uX 53959\n55uY 53960\n55ub 53961\n55uc 53962\n55ue 53963\n55uf 53964\n55uh 53965\n55uj 53966\n55uk 53967\n55ul 53968\n55un 53969\n55up 53970\n55uq 53971\n55uu 53972\n55uv 53973\n55ux 53974\n55uy 53975\n55u0 53976\n55u4 53977\n55u5 53978\n55u7 53979\n55u8 53980\n55u+ 53981\n55yA 53982\n55yB 53983\n55yE 53984\n55yH 53985\n55yI 53986\n55yJ 53987\n55yL 53988\n55yM 53989\n55yN 53990\n55yZ 53991\n55ya 53992\n55yb 53993\n55yc 53994\n55ye 53995\n55yf 53996\n55yg 53997\n55yl 53998\n55ym 53999\n55yo 54000\n55yp 54001\n55ys 54002\n55yt 54003\n55yv 54004\n55y1 54005\n55y2 54006\n55y3 54007\n55y4 54008\n55y6 54009\n55y8 54010\n55y+ 54011\n552A 54012\n552B 54013\n552D 54014\n552G 54015\n552H 54016\n552Q 54017\n552R 54018\n552a 54019\n552b 54020\n552c 54021\n552e 54022\n552f 54023\n552h 54024\n552i 54025\n552j 54026\n552l 54027\n552m 54028\n552o 54029\n552r 54030\n552s 54031\n552x 54032\n5525 54033\n5526 54034\n5529 54035\n552+ 54036\n552/ 54037\n556A 54038\n556E 54039\n556F 54040\n556G 54041\n556H 54042\n556L 54043\n556M 54044\n556O 54045\n556R 54046\n556S 54047\n556T 54048\n556e 54049\n556f 54050\n556g 54051\n556i 54052\n556l 54053\n556n 54054\n556p 54055\n556q 54056\n556s 54057\n556t 54058\n556w 54059\n556z 54060\n5561 54061\n5567 54062\n5568 54063\n5569 54064\n556+ 54065\n556/ 54066\n55+H 54067\n55+N 54068\n55+T 54069\n55+X 54070\n55+a 54071\n55+b 54072\n55+c 54073\n55+i 54074\n55+j 54075\n55+l 54076\n55+n 54077\n55+p 54078\n55+r 54079\n55+s 54080\n55+t 54081\n55+u 54082\n55+v 54083\n55+x 54084\n55+z 54085\n55+2 54086\n55+4 54087\n55+8 54088\n55+9 54089\n55++ 54090\n55+/ 54091\n56CA 54092\n56CB 54093\n56CC 54094\n56CK 54095\n56CM 54096\n56CN 54097\n56CS 54098\n56CU 54099\n56CV 54100\n56CW 54101\n56CX 54102\n56CY 54103\n56Ca 54104\n56Cc 54105\n56Cd 54106\n56Cf 54107\n56Cg 54108\n56Cj 54109\n56Cl 54110\n56Cm 54111\n56Cn 54112\n56Cp 54113\n56Cr 54114\n56Cs 54115\n56Ct 54116\n56Cw 54117\n56Cy 54118\n56C0 54119\n56C1 54120\n56C3 54121\n56C4 54122\n56C6 54123\n56C7 54124\n56C8 54125\n56C+ 54126\n56C/ 54127\n56GA 54128\n56GB 54129\n56GF 54130\n56GM 54131\n56GQ 54132\n56GS 54133\n56GV 54134\n56GW 54135\n56GX 54136\n56Ga 54137\n56Gd 54138\n56Ge 54139\n56Gq 54140\n56Gr 54141\n56Gs 54142\n56Gt 54143\n56Gu 54144\n56Gv 54145\n56Gy 54146\n56G0 54147\n56G3 54148\n56G8 54149\n56G/ 54150\n56KB 54151\n56KG 54152\n56KH 54153\n56KJ 54154\n56KM 54155\n56KN 54156\n56KO 54157\n56KR 54158\n56KT 54159\n56KV 54160\n56KX 54161\n56KY 54162\n56Ka 54163\n56Kb 54164\n56Kc 54165\n56Kf 54166\n56Kh 54167\n56Kj 54168\n56Kn 54169\n56Kp 54170\n56Kq 54171\n56Kw 54172\n56Kx 54173\n56Ky 54174\n56Kz 54175\n56K0 54176\n56K6 54177\n56K8 54178\n56K+ 54179\n56OB 54180\n56OF 54181\n56OG 54182\n56OJ 54183\n56OK 54184\n56OL 54185\n56OQ 54186\n56OR 54187\n56OS 54188\n56OU 54189\n56OV 54190\n56OZ 54191\n56Oa 54192\n56Oh 54193\n56On 54194\n56Oo 54195\n56Os 54196\n56Ov 54197\n56Oy 54198\n56O0 54199\n56O3 54200\n56O6 54201\n56O7 54202\n56O+ 54203\n56SB 54204\n56SF 54205\n56SM 54206\n56SO 54207\n56SS 54208\n56ST 54209\n56SZ 54210\n56Se 54211\n56Sm 54212\n56Sq 54213\n56Sr 54214\n56Ss 54215\n56S0 54216\n56S6 54217\n56S7 54218\n56S8 54219\n56S9 54220\n56S+ 54221\n56WA 54222\n56WB 54223\n56WG 54224\n56WH 54225\n56WI 54226\n56WJ 54227\n56WO 54228\n56WP 54229\n56WQ 54230\n56WT 54231\n56WW 54232\n56WX 54233\n56Wa 54234\n56Wb 54235\n56Wc 54236\n56Wd 54237\n56We 54238\n56Wf 54239\n56Wg 54240\n56Wi 54241\n56Wl 54242\n56Wn 54243\n56Wo 54244\n56Wt 54245\n56Wv 54246\n56W3 54247\n56W4 54248\n56W6 54249\n56W8 54250\n56W/ 54251\n56aA 54252\n56aB 54253\n56aE 54254\n56aF 54255\n56aK 54256\n56aN 54257\n56aO 54258\n56aP 54259\n56ab 54260\n56al 54261\n56am 54262\n56an 54263\n56ao 54264\n56ap 54265\n56aq 54266\n56au 54267\n56aw 54268\n56ax 54269\n56az 54270\n56a5 54271\n56a6 54272\n56a7 54273\n56a9 54274\n56a+ 54275\n56a/ 54276\n56eA 54277\n56eB 54278\n56eC 54279\n56eD 54280\n56eG 54281\n56eJ 54282\n56eL 54283\n56eN 54284\n56eP 54285\n56eR 54286\n56eS 54287\n56eV 54288\n56eY 54289\n56ef 54290\n56eh 54291\n56ej 54292\n56ek 54293\n56em 54294\n56en 54295\n56ep 54296\n56er 54297\n56es 54298\n56et 54299\n56ev 54300\n56ew 54301\n56e4 54302\n56e7 54303\n56e9 54304\n56e+ 54305\n56iA 54306\n56iC 54307\n56iF 54308\n56iI 54309\n56iK 54310\n56iL 54311\n56iN 54312\n56iO 54313\n56iU 54314\n56iX 54315\n56iZ 54316\n56ia 54317\n56ic 54318\n56ie 54319\n56if 54320\n56ig 54321\n56ij 54322\n56iu 54323\n56ix 54324\n56iy 54325\n56iz 54326\n56i3 54327\n56i5 54328\n56i7 54329\n56i8 54330\n56i9 54331\n56i/ 54332\n56mA 54333\n56mC 54334\n56mG 54335\n56mH 54336\n56mM 54337\n56mN 54338\n56mO 54339\n56mP 54340\n56mQ 54341\n56mR 54342\n56mX 54343\n56mh 54344\n56mi 54345\n56mj 54346\n56mp 54347\n56mr 54348\n56mw 54349\n56m0 54350\n56m2 54351\n56m3 54352\n56m4 54353\n56m5 54354\n56m6 54355\n56m9 54356\n56m/ 54357\n56qA 54358\n56qB 54359\n56qD 54360\n56qE 54361\n56qI 54362\n56qN 54363\n56qO 54364\n56qR 54365\n56qS 54366\n56qT 54367\n56qV 54368\n56qW 54369\n56qX 54370\n56qY 54371\n56qc 54372\n56qd 54373\n56qf 54374\n56qg 54375\n56qh 54376\n56qj 54377\n56ql 54378\n56qm 54379\n56qo 54380\n56qp 54381\n56qq 54382\n56qt 54383\n56qu 54384\n56qv 54385\n56qz 54386\n56q2 54387\n56q4 54388\n56q6 54389\n56q+ 54390\n56q/ 54391\n56uD 54392\n56uE 54393\n56uF 54394\n56uH 54395\n56uI 54396\n56uK 54397\n56uL 54398\n56uR 54399\n56uW 54400\n56uZ 54401\n56uc 54402\n56ud 54403\n56ue 54404\n56uf 54405\n56ug 54406\n56ui 54407\n56uj 54408\n56ul 54409\n56um 54410\n56uq 54411\n56ut 54412\n56uv 54413\n56uy 54414\n56u2 54415\n56u5 54416\n56u6 54417\n56u9 54418\n56u/ 54419\n56yC 54420\n56yD 54421\n56yE 54422\n56yG 54423\n56yI 54424\n56yK 54425\n56yL 54426\n56yP 54427\n56yR 54428\n56yU 54429\n56yV 54430\n56yW 54431\n56yY 54432\n56yZ 54433\n56yb 54434\n56ye 54435\n56yg 54436\n56yk 54437\n56yl 54438\n56ym 54439\n56yo 54440\n56yp 54441\n56yq 54442\n56yr 54443\n56ys 54444\n56yz 54445\n56y1 54446\n56y4 54447\n56y5 54448\n56y6 54449\n56y8 54450\n56y+ 54451\n562F 54452\n562G 54453\n562H 54454\n562I 54455\n562J 54456\n562K 54457\n562L 54458\n562M 54459\n562N 54460\n562P 54461\n562Q 54462\n562R 54463\n562S 54464\n562U 54465\n562W 54466\n562Y 54467\n562a 54468\n562b 54469\n562c 54470\n562d 54471\n562g 54472\n562i 54473\n562l 54474\n562n 54475\n562s 54476\n562u 54477\n562w 54478\n562x 54479\n562y 54480\n5621 54481\n5623 54482\n5625 54483\n5626 54484\n5627 54485\n5628 54486\n562+ 54487\n566A 54488\n566F 54489\n566G 54490\n566H 54491\n566L 54492\n566N 54493\n566P 54494\n566Q 54495\n566S 54496\n566T 54497\n566U 54498\n566V 54499\n566X 54500\n566Z 54501\n566a 54502\n566c 54503\n566d 54504\n566f 54505\n566h 54506\n566i 54507\n566l 54508\n566m 54509\n566n 54510\n566o 54511\n566p 54512\n566q 54513\n566r 54514\n566s 54515\n566t 54516\n566x 54517\n5660 54518\n5664 54519\n5667 54520\n5668 54521\n566+ 54522\n56+A 54523\n56+B 54524\n56+E 54525\n56+G 54526\n56+H 54527\n56+J 54528\n56+L 54529\n56+M 54530\n56+R 54531\n56+T 54532\n56+Z 54533\n56+a 54534\n56+d 54535\n56+g 54536\n56+h 54537\n56+k 54538\n56+l 54539\n56+m 54540\n56+p 54541\n56+q 54542\n56+t 54543\n56+u 54544\n56+x 54545\n56+z 54546\n56+2 54547\n56+3 54548\n56+8 54549\n56++ 54550\n57CA 54551\n57CD 54552\n57CH 54553\n57CL 54554\n57CM 54555\n57CN 54556\n57CP 54557\n57CR 54558\n57CS 54559\n57CT 54560\n57CU 54561\n57CW 54562\n57CX 54563\n57Cf 54564\n57Ch 54565\n57Cj 54566\n57Cm 54567\n57Cn 54568\n57Cq 54569\n57Cr 54570\n57Cw 54571\n57C3 54572\n57C4 54573\n57C6 54574\n57C9 54575\n57C+ 54576\n57C/ 54577\n57GA 54578\n57GB 54579\n57GD 54580\n57GH 54581\n57GM 54582\n57GN 54583\n57GP 54584\n57GQ 54585\n57GT 54586\n57GU 54587\n57GW 54588\n57Gf 54589\n57Gg 54590\n57Gj 54591\n57Gk 54592\n57Gs 54593\n57Gu 54594\n57Gy 54595\n57Gz 54596\n57G7 54597\n57G8 54598\n57G9 54599\n57G+ 54600\n57KB 54601\n57KC 54602\n57KD 54603\n57KJ 54604\n57KL 54605\n57KN 54606\n57KR 54607\n57KS 54608\n57KV 54609\n57KX 54610\n57KY 54611\n57Kb 54612\n57Kd 54613\n57Kf 54614\n57Ki 54615\n57Kk 54616\n57Kl 54617\n57Km 54618\n57Kn 54619\n57Kq 54620\n57Kt 54621\n57Ku 54622\n57Kx 54623\n57Ky 54624\n57Kz 54625\n57K1 54626\n57K5 54627\n57K8 54628\n57K9 54629\n57K+ 54630\n57OA 54631\n57OB 54632\n57OF 54633\n57OK 54634\n57OM 54635\n57ON 54636\n57OO 54637\n57OS 54638\n57OV 54639\n57OW 54640\n57OX 54641\n57OY 54642\n57OZ 54643\n57Oc 54644\n57Oe 54645\n57Of 54646\n57Og 54647\n57Oi 54648\n57On 54649\n57Oo 54650\n57Ov 54651\n57Oy 54652\n57O2 54653\n57O4 54654\n57O6 54655\n57O7 54656\n57O+ 54657\n57SA 54658\n57SC 54659\n57SE 54660\n57SF 54661\n57SG 54662\n57SJ 54663\n57SK 54664\n57SL 54665\n57SN 54666\n57SQ 54667\n57SU 54668\n57SX 54669\n57SY 54670\n57SZ 54671\n57Sa 54672\n57Sb 54673\n57Sc 54674\n57Sg 54675\n57Sh 54676\n57Si 54677\n57Sn 54678\n57Sr 54679\n57Ss 54680\n57Su 54681\n57Sv 54682\n57Sw 54683\n57Sy 54684\n57Sz 54685\n57S1 54686\n57S5 54687\n57S6 54688\n57WA 54689\n57WC 54690\n57WD 54691\n57WE 54692\n57WF 54693\n57WG 54694\n57WL 54695\n57WM 54696\n57WO 54697\n57WP 54698\n57WQ 54699\n57WV 54700\n57WW 54701\n57Wb 54702\n57Wc 54703\n57We 54704\n57Wh 54705\n57Wi 54706\n57Wj 54707\n57Wm 54708\n57Wo 54709\n57Wu 54710\n57Wv 54711\n57Wx 54712\n57Wy 54713\n57Wz 54714\n57W1 54715\n57W2 54716\n57W5 54717\n57W6 54718\n57W9 54719\n57aB 54720\n57aJ 54721\n57aP 54722\n57aT 54723\n57aZ 54724\n57aa 54725\n57ab 54726\n57ac 54727\n57af 54728\n57ag 54729\n57ai 54730\n57aj 54731\n57am 54732\n57as 54733\n57at 54734\n57au 54735\n57av 54736\n57aw 54737\n57ax 54738\n57ay 54739\n57a0 54740\n57a1 54741\n57a2 54742\n57a4 54743\n57a6 54744\n57a7 54745\n57a9 54746\n57a+ 54747\n57a/ 54748\n57eH 54749\n57eK 54750\n57eL 54751\n57eP 54752\n57eR 54753\n57eS 54754\n57eY 54755\n57ea 54756\n57eb 54757\n57ed 54758\n57ee 54759\n57eg 54760\n57eh 54761\n57ej 54762\n57ek 54763\n57eo 54764\n57ep 54765\n57es 54766\n57ev 54767\n57ey 54768\n57e0 54769\n57e7 54770\n57iB 54771\n57iE 54772\n57iF 54773\n57iI 54774\n57iJ 54775\n57iK 54776\n57iL 54777\n57iS 54778\n57ib 54779\n57ie 54780\n57if 54781\n57ig 54782\n57ii 54783\n57ij 54784\n57im 54785\n57ir 54786\n57iu 54787\n57ix 54788\n57iy 54789\n57i0 54790\n57i1 54791\n57i3 54792\n57i5 54793\n57i6 54794\n57i7 54795\n57i9 54796\n57i+ 54797\n57mB 54798\n57mD 54799\n57mG 54800\n57mH 54801\n57mK 54802\n57mL 54803\n57mN 54804\n57mR 54805\n57mU 54806\n57mV 54807\n57mW 54808\n57mZ 54809\n57ma 54810\n57md 54811\n57me 54812\n57mh 54813\n57mn 54814\n57mp 54815\n57mq 54816\n57mr 54817\n57mt 54818\n57mw 54819\n57mz 54820\n57m5 54821\n57m7 54822\n57m8 54823\n57m9 54824\n57qC 54825\n57qH 54826\n57qI 54827\n57qM 54828\n57qN 54829\n57qP 54830\n57qQ 54831\n57qS 54832\n57qT 54833\n57qU 54834\n57qW 54835\n57qb 54836\n57qc 54837\n57qg 54838\n57qh 54839\n57qi 54840\n57qj 54841\n57qk 54842\n57ql 54843\n57qm 54844\n57qn 54845\n57qo 54846\n57qp 54847\n57qq 54848\n57qr 54849\n57qs 54850\n57qt 54851\n57qu 54852\n57qv 54853\n57qw 54854\n57qx 54855\n57qy 54856\n57qz 54857\n57q1 54858\n57q2 54859\n57q3 54860\n57q4 54861\n57q5 54862\n57q6 54863\n57q7 54864\n57q9 54865\n57q+ 54866\n57q/ 54867\n57uA 54868\n57uB 54869\n57uC 54870\n57uD 54871\n57uE 54872\n57uF 54873\n57uG 54874\n57uH 54875\n57uI 54876\n57uJ 54877\n57uK 54878\n57uL 54879\n57uM 54880\n57uN 54881\n57uO 54882\n57uP 54883\n57uQ 54884\n57uR 54885\n57uS 54886\n57uT 54887\n57uU 54888\n57uV 54889\n57uX 54890\n57uY 54891\n57uZ 54892\n57ua 54893\n57ub 54894\n57uc 54895\n57ud 54896\n57ue 54897\n57uf 54898\n57uh 54899\n57ui 54900\n57uj 54901\n57uk 54902\n57ul 54903\n57um 54904\n57un 54905\n57uo 54906\n57up 54907\n57uq 54908\n57ur 54909\n57ut 54910\n57uu 54911\n57uv 54912\n57uw 54913\n57ux 54914\n57uy 54915\n57uz 54916\n57u0 54917\n57u1 54918\n57u2 54919\n57u3 54920\n57u4 54921\n57u6 54922\n57u7 54923\n57u8 54924\n57u9 54925\n57u+ 54926\n57u/ 54927\n57yA 54928\n57yB 54929\n57yC 54930\n57yD 54931\n57yE 54932\n57yF 54933\n57yG 54934\n57yH 54935\n57yI 54936\n57yJ 54937\n57yK 54938\n57yL 54939\n57yM 54940\n57yO 54941\n57yR 54942\n57yS 54943\n57yT 54944\n57yU 54945\n57yV 54946\n57yW 54947\n57yX 54948\n57yY 54949\n57yZ 54950\n57ya 54951\n57yb 54952\n57yc 54953\n57yd 54954\n57yf 54955\n57yg 54956\n57yi 54957\n57yj 54958\n57yk 54959\n57yl 54960\n57ym 54961\n57yn 54962\n57yo 54963\n57yp 54964\n57yq 54965\n57yr 54966\n57ys 54967\n57yt 54968\n57yu 54969\n57yv 54970\n57yw 54971\n57yx 54972\n57yz 54973\n57y0 54974\n57y1 54975\n57y2 54976\n57y4 54977\n57y6 54978\n572C 54979\n572E 54980\n572F 54981\n572H 54982\n572M 54983\n572N 54984\n572Q 54985\n572R 54986\n572U 54987\n572V 54988\n572X 54989\n572Y 54990\n572a 54991\n572f 54992\n572g 54993\n572h 54994\n572i 54995\n572n 54996\n572o 54997\n572p 54998\n572q 54999\n572r 55000\n572u 55001\n572w 55002\n572y 55003\n5720 55004\n5721 55005\n5723 55006\n5725 55007\n572+ 55008\n576B 55009\n576C 55010\n576D 55011\n576F 55012\n576G 55013\n576H 55014\n576I 55015\n576K 55016\n576M 55017\n576O 55018\n576R 55019\n576U 55020\n576W 55021\n576X 55022\n576a 55023\n576d 55024\n576e 55025\n576f 55026\n576h 55027\n576j 55028\n576k 55029\n576n 55030\n576o 55031\n576p 55032\n576v 55033\n576w 55034\n576y 55035\n5762 55036\n5764 55037\n5765 55038\n5769 55039\n576/ 55040\n57+A 55041\n57+B 55042\n57+D 55043\n57+F 55044\n57+G 55045\n57+K 55046\n57+M 55047\n57+O 55048\n57+S 55049\n57+U 55050\n57+V 55051\n57+Y 55052\n57+a 55053\n57+b 55054\n57+f 55055\n57+g 55056\n57+h 55057\n57+l 55058\n57+m 55059\n57+p 55060\n57+r 55061\n57+u 55062\n57+w 55063\n57+x 55064\n57+z 55065\n57+5 55066\n57+7 55067\n57+8 55068\n6ICA 55069\n6ICB 55070\n6ICD 55071\n6ICE 55072\n6ICF 55073\n6ICG 55074\n6ICL 55075\n6ICM 55076\n6ICN 55077\n6ICQ 55078\n6ICS 55079\n6ICV 55080\n6ICX 55081\n6ICY 55082\n6ICZ 55083\n6ICc 55084\n6ICm 55085\n6ICn 55086\n6ICo 55087\n6ICq 55088\n6ICx 55089\n6ICz 55090\n6IC1 55091\n6IC2 55092\n6IC3 55093\n6IC4 55094\n6IC7 55095\n6IC9 55096\n6IC/ 55097\n6IGC 55098\n6IGD 55099\n6IGG 55100\n6IGK 55101\n6IGL 55102\n6IGM 55103\n6IGN 55104\n6IGS 55105\n6IGU 55106\n6IGW 55107\n6IGY 55108\n6IGa 55109\n6IGe 55110\n6IGf 55111\n6IGh 55112\n6IGi 55113\n6IGo 55114\n6IGp 55115\n6IGq 55116\n6IGv 55117\n6IGw 55118\n6IGy 55119\n6IGz 55120\n6IG0 55121\n6IG1 55122\n6IG2 55123\n6IG3 55124\n6IG9 55125\n6IG+ 55126\n6IG/ 55127\n6IKD 55128\n6IKE 55129\n6IKF 55130\n6IKG 55131\n6IKH 55132\n6IKJ 55133\n6IKL 55134\n6IKM 55135\n6IKP 55136\n6IKT 55137\n6IKW 55138\n6IKY 55139\n6IKa 55140\n6IKb 55141\n6IKd 55142\n6IKf 55143\n6IKg 55144\n6IKh 55145\n6IKi 55146\n6IKk 55147\n6IKl 55148\n6IKp 55149\n6IKq 55150\n6IKr 55151\n6IKs 55152\n6IKt 55153\n6IKu 55154\n6IKv 55155\n6IKx 55156\n6IKy 55157\n6IK0 55158\n6IK3 55159\n6IK4 55160\n6IK6 55161\n6IK8 55162\n6IK9 55163\n6IK+ 55164\n6IK/ 55165\n6IOA 55166\n6IOB 55167\n6IOD 55168\n6IOE 55169\n6IOG 55170\n6IOM 55171\n6ION 55172\n6IOO 55173\n6IOW 55174\n6IOX 55175\n6IOZ 55176\n6IOa 55177\n6IOb 55178\n6IOc 55179\n6IOd 55180\n6IOe 55181\n6IOh 55182\n6IOk 55183\n6IOl 55184\n6IOn 55185\n6IOq 55186\n6IOr 55187\n6IOs 55188\n6IOt 55189\n6IOv 55190\n6IOw 55191\n6IOx 55192\n6IOz 55193\n6IO0 55194\n6IO2 55195\n6IO4 55196\n6IO6 55197\n6IO8 55198\n6IO9 55199\n6ISB 55200\n6ISC 55201\n6ISF 55202\n6ISG 55203\n6ISH 55204\n6ISI 55205\n6ISJ 55206\n6ISK 55207\n6ISN 55208\n6ISP 55209\n6ISQ 55210\n6ISR 55211\n6ISS 55212\n6IST 55213\n6ISU 55214\n6ISW 55215\n6ISY 55216\n6ISa 55217\n6ISb 55218\n6ISj 55219\n6ISp 55220\n6ISr 55221\n6ISs 55222\n6ISv 55223\n6ISw 55224\n6ISx 55225\n6ISy 55226\n6ISz 55227\n6IS3 55228\n6IS4 55229\n6IS5 55230\n6IS+ 55231\n6IWG 55232\n6IWI 55233\n6IWK 55234\n6IWL 55235\n6IWM 55236\n6IWO 55237\n6IWQ 55238\n6IWR 55239\n6IWT 55240\n6IWU 55241\n6IWV 55242\n6IWY 55243\n6IWZ 55244\n6IWa 55245\n6IWf 55246\n6IWg 55247\n6IWl 55248\n6IWm 55249\n6IWn 55250\n6IWp 55251\n6IWr 55252\n6IWt 55253\n6IWu 55254\n6IWw 55255\n6IWx 55256\n6IWz 55257\n6IW0 55258\n6IW4 55259\n6IW5 55260\n6IW6 55261\n6IW7 55262\n6IW8 55263\n6IW+ 55264\n6IW/ 55265\n6IaA 55266\n6IaC 55267\n6IaD 55268\n6IaI 55269\n6IaK 55270\n6IaP 55271\n6IaR 55272\n6IaV 55273\n6IaY 55274\n6Iaa 55275\n6Iab 55276\n6Iac 55277\n6Iad 55278\n6Iag 55279\n6Iaj 55280\n6Iam 55281\n6Iao 55282\n6Iap 55283\n6Iaz 55284\n6Ia0 55285\n6Ia1 55286\n6Ia6 55287\n6Ia7 55288\n6Ia9 55289\n6Ia+ 55290\n6Ia/ 55291\n6IeA 55292\n6IeC 55293\n6IeD 55294\n6IeG 55295\n6IeH 55296\n6IeI 55297\n6IeJ 55298\n6IeK 55299\n6IeM 55300\n6IeN 55301\n6IeR 55302\n6IeT 55303\n6IeY 55304\n6IeZ 55305\n6Iea 55306\n6Iec 55307\n6Ief 55308\n6Iej 55309\n6Iel 55310\n6Ien 55311\n6Ieo 55312\n6Ieq 55313\n6Ies 55314\n6Iet 55315\n6Iez 55316\n6Ie0 55317\n6Ie6 55318\n6Ie7 55319\n6Ie8 55320\n6Ie+ 55321\n6IiA 55322\n6IiB 55323\n6IiC 55324\n6IiF 55325\n6IiG 55326\n6IiH 55327\n6IiI 55328\n6IiJ 55329\n6IiK 55330\n6IiM 55331\n6IiN 55332\n6IiO 55333\n6IiQ 55334\n6IiS 55335\n6IiU 55336\n6IiW 55337\n6IiX 55338\n6IiY 55339\n6Iib 55340\n6Iic 55341\n6Iie 55342\n6Iif 55343\n6Iii 55344\n6Iij 55345\n6Iip 55346\n6Iiq 55347\n6Iir 55348\n6Iis 55349\n6Iiu 55350\n6Iiv 55351\n6Iiw 55352\n6Iix 55353\n6Iiy 55354\n6Iiz 55355\n6Ii1 55356\n6Ii2 55357\n6Ii3 55358\n6Ii4 55359\n6Ii5 55360\n6Ii+ 55361\n6ImA 55362\n6ImE 55363\n6ImH 55364\n6ImJ 55365\n6ImL 55366\n6ImP 55367\n6ImY 55368\n6ImZ 55369\n6Imf 55370\n6Imk 55371\n6Imm 55372\n6Imo 55373\n6Imq 55374\n6Imr 55375\n6Imu 55376\n6Imv 55377\n6Imw 55378\n6Imx 55379\n6Imy 55380\n6Imz 55381\n6Im2 55382\n6Im3 55383\n6Im4 55384\n6Im5 55385\n6Im6 55386\n6Im9 55387\n6Im+ 55388\n6Im/ 55389\n6IqC 55390\n6IqD 55391\n6IqI 55392\n6IqK 55393\n6IqL 55394\n6IqN 55395\n6IqO 55396\n6IqR 55397\n6IqS 55398\n6IqX 55399\n6IqY 55400\n6IqZ 55401\n6Iqc 55402\n6Iqd 55403\n6Iqf 55404\n6Iqh 55405\n6Iqj 55406\n6Iqk 55407\n6Iql 55408\n6Iqm 55409\n6Iqo 55410\n6Iqp 55411\n6Iqq 55412\n6Iqr 55413\n6Iqs 55414\n6Iqt 55415\n6Iqu 55416\n6Iqv 55417\n6Iqw 55418\n6Iqx 55419\n6Iqz 55420\n6Iq3 55421\n6Iq4 55422\n6Iq5 55423\n6Iq7 55424\n6Iq9 55425\n6Iq+ 55426\n6IuB 55427\n6IuE 55428\n6IuF 55429\n6IuH 55430\n6IuI 55431\n6IuK 55432\n6IuL 55433\n6IuM 55434\n6IuN 55435\n6IuO 55436\n6IuP 55437\n6IuR 55438\n6IuS 55439\n6IuT 55440\n6IuU 55441\n6IuV 55442\n6IuX 55443\n6IuY 55444\n6IuZ 55445\n6Iub 55446\n6Iuc 55447\n6Iue 55448\n6Iuf 55449\n6Iuh 55450\n6Iui 55451\n6Iuj 55452\n6Iuk 55453\n6Iul 55454\n6Ium 55455\n6Iun 55456\n6Iur 55457\n6Iuv 55458\n6Iux 55459\n6Iuz 55460\n6Iu0 55461\n6Iu3 55462\n6Iu5 55463\n6Iu6 55464\n6Iu7 55465\n6Iu8 55466\n6Iu+ 55467\n6IyB 55468\n6IyC 55469\n6IyD 55470\n6IyE 55471\n6IyF 55472\n6IyG 55473\n6IyI 55474\n6IyJ 55475\n6IyM 55476\n6IyO 55477\n6IyP 55478\n6IyR 55479\n6IyU 55480\n6IyV 55481\n6IyX 55482\n6IyY 55483\n6Iya 55484\n6Iyb 55485\n6Iyc 55486\n6Iyj 55487\n6Iyn 55488\n6Iyo 55489\n6Iyr 55490\n6Iys 55491\n6Iyt 55492\n6Iyv 55493\n6Iyx 55494\n6Iyy 55495\n6Iyz 55496\n6Iy0 55497\n6Iy1 55498\n6Iy2 55499\n6Iy4 55500\n6Iy5 55501\n6Iy6 55502\n6Iy8 55503\n6I2A 55504\n6I2D 55505\n6I2F 55506\n6I2G 55507\n6I2H 55508\n6I2J 55509\n6I2K 55510\n6I2P 55511\n6I2Q 55512\n6I2R 55513\n6I2S 55514\n6I2U 55515\n6I2Y 55516\n6I2Z 55517\n6I2a 55518\n6I2b 55519\n6I2c 55520\n6I2e 55521\n6I2f 55522\n6I2g 55523\n6I2h 55524\n6I2j 55525\n6I2k 55526\n6I2l 55527\n6I2m 55528\n6I2n 55529\n6I2o 55530\n6I2p 55531\n6I2q 55532\n6I2r 55533\n6I2s 55534\n6I2v 55535\n6I2z 55536\n6I23 55537\n6I24 55538\n6I27 55539\n6I28 55540\n6I29 55541\n6I6F 55542\n6I6G 55543\n6I6H 55544\n6I6J 55545\n6I6K 55546\n6I6O 55547\n6I6S 55548\n6I6T 55549\n6I6V 55550\n6I6W 55551\n6I6Y 55552\n6I6Z 55553\n6I6a 55554\n6I6c 55555\n6I6e 55556\n6I6f 55557\n6I6g 55558\n6I6i 55559\n6I6n 55560\n6I6o 55561\n6I6p 55562\n6I6q 55563\n6I6r 55564\n6I6x 55565\n6I6y 55566\n6I6z 55567\n6I60 55568\n6I61 55569\n6I62 55570\n6I63 55571\n6I64 55572\n6I65 55573\n6I66 55574\n6I68 55575\n6I69 55576\n6I+A 55577\n6I+B 55578\n6I+F 55579\n6I+H 55580\n6I+J 55581\n6I+K 55582\n6I+M 55583\n6I+O 55584\n6I+P 55585\n6I+T 55586\n6I+U 55587\n6I+W 55588\n6I+Y 55589\n6I+c 55590\n6I+f 55591\n6I+g 55592\n6I+h 55593\n6I+l 55594\n6I+o 55595\n6I+p 55596\n6I+q 55597\n6I+r 55598\n6I+v 55599\n6I+w 55600\n6I+x 55601\n6I+y 55602\n6I+0 55603\n6I+4 55604\n6I+5 55605\n6I+9 55606\n6JCB 55607\n6JCD 55608\n6JCE 55609\n6JCG 55610\n6JCK 55611\n6JCL 55612\n6JCM 55613\n6JCN 55614\n6JCO 55615\n6JCP 55616\n6JCT 55617\n6JCY 55618\n6JCc 55619\n6JCd 55620\n6JCg 55621\n6JCi 55622\n6JCk 55623\n6JCl 55624\n6JCm 55625\n6JCn 55626\n6JCo 55627\n6JCp 55628\n6JCs 55629\n6JCx 55630\n6JC1 55631\n6JC4 55632\n6JC5 55633\n6JC8 55634\n6JC9 55635\n6JGG 55636\n6JGI 55637\n6JGJ 55638\n6JGO 55639\n6JGR 55640\n6JGX 55641\n6JGZ 55642\n6JGa 55643\n6JGb 55644\n6JGh 55645\n6JGj 55646\n6JGm 55647\n6JGp 55648\n6JGr 55649\n6JGs 55650\n6JGt 55651\n6JGv 55652\n6JGx 55653\n6JGz 55654\n6JG1 55655\n6JG2 55656\n6JG3 55657\n6JG4 55658\n6JG5 55659\n6JG6 55660\n6JKC 55661\n6JKE 55662\n6JKL 55663\n6JKM 55664\n6JKO 55665\n6JKQ 55666\n6JKU 55667\n6JKX 55668\n6JKZ 55669\n6JKc 55670\n6JKf 55671\n6JKh 55672\n6JKv 55673\n6JKy 55674\n6JK0 55675\n6JK4 55676\n6JK5 55677\n6JK6 55678\n6JK7 55679\n6JK8 55680\n6JK9 55681\n6JK/ 55682\n6JOA 55683\n6JOB 55684\n6JOC 55685\n6JOE 55686\n6JOG 55687\n6JOJ 55688\n6JOK 55689\n6JOL 55690\n6JON 55691\n6JOQ 55692\n6JOR 55693\n6JOT 55694\n6JOW 55695\n6JOZ 55696\n6JOa 55697\n6JOd 55698\n6JOf 55699\n6JOg 55700\n6JOj 55701\n6JOl 55702\n6JOm 55703\n6JOs 55704\n6JOu 55705\n6JO0 55706\n6JO8 55707\n6JO/ 55708\n6JSA 55709\n6JSM 55710\n6JSR 55711\n6JST 55712\n6JSU 55713\n6JSV 55714\n6JSX 55715\n6JSa 55716\n6JSf 55717\n6JSh 55718\n6JSj 55719\n6JSk 55720\n6JSl 55721\n6JSm 55722\n6JSr 55723\n6JSs 55724\n6JSt 55725\n6JS1 55726\n6JS3 55727\n6JS4 55728\n6JS5 55729\n6JS6 55730\n6JS7 55731\n6JS8 55732\n6JS9 55733\n6JWB 55734\n6JWD 55735\n6JWI 55736\n6JWJ 55737\n6JWK 55738\n6JWL 55739\n6JWO 55740\n6JWW 55741\n6JWX 55742\n6JWZ 55743\n6JWa 55744\n6JWe 55745\n6JWj 55746\n6JWk 55747\n6JWo 55748\n6JWp 55749\n6JWq 55750\n6JWr 55751\n6JWt 55752\n6JWy 55753\n6JW0 55754\n6JW3 55755\n6JW6 55756\n6JW7 55757\n6JW+ 55758\n6JaA 55759\n6JaB 55760\n6JaE 55761\n6JaF 55762\n6JaH 55763\n6JaI 55764\n6JaK 55765\n6JaP 55766\n6JaQ 55767\n6JaR 55768\n6JaU 55769\n6JaX 55770\n6JaZ 55771\n6Jab 55772\n6Jac 55773\n6Jai 55774\n6Jak 55775\n6Jam 55776\n6Jao 55777\n6Jap 55778\n6Jaq 55779\n6Jar 55780\n6Jas 55781\n6Jat 55782\n6Jau 55783\n6Jav 55784\n6Jaw 55785\n6Jaz 55786\n6Ja3 55787\n6Ja5 55788\n6Ja6 55789\n6JeB 55790\n6JeJ 55791\n6JeN 55792\n6JeP 55793\n6JeQ 55794\n6JeT 55795\n6JeV 55796\n6Jec 55797\n6Jed 55798\n6Jeg 55799\n6Jek 55800\n6Jel 55801\n6Jem 55802\n6Jep 55803\n6Jeq 55804\n6Je3 55805\n6Je5 55806\n6Je6 55807\n6Je7 55808\n6Je/ 55809\n6JiC 55810\n6JiF 55811\n6JiG 55812\n6JiH 55813\n6JiK 55814\n6JiL 55815\n6JiR 55816\n6JiT 55817\n6JiW 55818\n6JiX 55819\n6JiY 55820\n6Jia 55821\n6Jin 55822\n6Jit 55823\n6Jiw 55824\n6Ji4 55825\n6Ji8 55826\n6Ji/ 55827\n6JmO 55828\n6JmP 55829\n6JmQ 55830\n6JmR 55831\n6JmT 55832\n6JmU 55833\n6JmV 55834\n6Jma 55835\n6Jmb 55836\n6Jmc 55837\n6Jme 55838\n6Jmf 55839\n6Jmi 55840\n6Jmn 55841\n6Jmr 55842\n6Jms 55843\n6Jmu 55844\n6Jmx 55845\n6Jm1 55846\n6Jm5 55847\n6Jm6 55848\n6Jm7 55849\n6Jm9 55850\n6Jm+ 55851\n6Jm/ 55852\n6JqA 55853\n6JqB 55854\n6JqC 55855\n6JqK 55856\n6JqL 55857\n6JqM 55858\n6JqN 55859\n6JqT 55860\n6JqV 55861\n6Jqc 55862\n6Jqd 55863\n6Jqh 55864\n6Jqj 55865\n6Jqk 55866\n6Jqn 55867\n6Jqo 55868\n6Jqp 55869\n6Jqq 55870\n6Jqr 55871\n6Jqs 55872\n6Jqv 55873\n6Jqw 55874\n6Jqx 55875\n6Jqz 55876\n6Jq0 55877\n6Jq1 55878\n6Jq2 55879\n6JuA 55880\n6JuE 55881\n6JuG 55882\n6JuH 55883\n6JuJ 55884\n6JuK 55885\n6JuL 55886\n6JuN 55887\n6JuO 55888\n6JuP 55889\n6JuQ 55890\n6JuR 55891\n6JuU 55892\n6JuY 55893\n6JuZ 55894\n6Jub 55895\n6Jue 55896\n6Juf 55897\n6Juk 55898\n6Jup 55899\n6Jus 55900\n6Jut 55901\n6Juu 55902\n6Juv 55903\n6Juw 55904\n6Jux 55905\n6Juy 55906\n6Juz 55907\n6Ju0 55908\n6Ju4 55909\n6Ju5 55910\n6Ju7 55911\n6Ju8 55912\n6Ju9 55913\n6Ju+ 55914\n6JyA 55915\n6JyC 55916\n6JyD 55917\n6JyG 55918\n6JyH 55919\n6JyI 55920\n6JyJ 55921\n6JyK 55922\n6JyN 55923\n6JyO 55924\n6JyR 55925\n6JyS 55926\n6JyT 55927\n6JyV 55928\n6JyX 55929\n6JyY 55930\n6Jya 55931\n6Jyb 55932\n6Jyc 55933\n6Jye 55934\n6Jyh 55935\n6Jyi 55936\n6Jyj 55937\n6Jyl 55938\n6Jyp 55939\n6Jyu 55940\n6Jyx 55941\n6Jy0 55942\n6Jy3 55943\n6Jy7 55944\n6Jy+ 55945\n6Jy/ 55946\n6J2H 55947\n6J2I 55948\n6J2J 55949\n6J2L 55950\n6J2M 55951\n6J2O 55952\n6J2T 55953\n6J2V 55954\n6J2X 55955\n6J2Y 55956\n6J2Z 55957\n6J2f 55958\n6J2g 55959\n6J2j 55960\n6J2l 55961\n6J2m 55962\n6J2o 55963\n6J2u 55964\n6J2w 55965\n6J2y 55966\n6J20 55967\n6J22 55968\n6J24 55969\n6J27 55970\n6J28 55971\n6J29 55972\n6J2+ 55973\n6J2/ 55974\n6J6C 55975\n6J6D 55976\n6J6F 55977\n6J6I 55978\n6J6L 55979\n6J6N 55980\n6J6e 55981\n6J6f 55982\n6J6g 55983\n6J6i 55984\n6J6o 55985\n6J6r 55986\n6J6s 55987\n6J6t 55988\n6J6v 55989\n6J6z 55990\n6J61 55991\n6J66 55992\n6J67 55993\n6J69 55994\n6J+A 55995\n6J+E 55996\n6J+G 55997\n6J+H 55998\n6J+K 55999\n6J+L 56000\n6J+Q 56001\n6J+R 56002\n6J+S 56003\n6J+b 56004\n6J+c 56005\n6J+f 56006\n6J+g 56007\n6J+l 56008\n6J+q 56009\n6J+s 56010\n6J+t 56011\n6J+u 56012\n6J+v 56013\n6J+y 56014\n6J+2 56015\n6J+3 56016\n6J+5 56017\n6J+7 56018\n6J++ 56019\n6KCD 56020\n6KCF 56021\n6KCK 56022\n6KCL 56023\n6KCN 56024\n6KCO 56025\n6KCP 56026\n6KCR 56027\n6KCT 56028\n6KCV 56029\n6KCW 56030\n6KCb 56031\n6KCc 56032\n6KCf 56033\n6KCh 56034\n6KCi 56035\n6KCj 56036\n6KCn 56037\n6KCx 56038\n6KCy 56039\n6KC2 56040\n6KC5 56041\n6KC7 56042\n6KC8 56043\n6KGA 56044\n6KGE 56045\n6KGF 56046\n6KGG 56047\n6KGM 56048\n6KGN 56049\n6KGO 56050\n6KGS 56051\n6KGT 56052\n6KGU 56053\n6KGX 56054\n6KGZ 56055\n6KGb 56056\n6KGd 56057\n6KGe 56058\n6KGh 56059\n6KGi 56060\n6KGj 56061\n6KGl 56062\n6KGo 56063\n6KGp 56064\n6KGr 56065\n6KGs 56066\n6KGu 56067\n6KGv 56068\n6KGw 56069\n6KGy 56070\n6KG1 56071\n6KG3 56072\n6KG9 56073\n6KG+ 56074\n6KG/ 56075\n6KKB 56076\n6KKC 56077\n6KKE 56078\n6KKF 56079\n6KKG 56080\n6KKI 56081\n6KKL 56082\n6KKN 56083\n6KKS 56084\n6KKT 56085\n6KKW 56086\n6KKX 56087\n6KKZ 56088\n6KKc 56089\n6KKd 56090\n6KKe 56091\n6KKi 56092\n6KKk 56093\n6KKq 56094\n6KKr 56095\n6KKt 56096\n6KKw 56097\n6KKx 56098\n6KK0 56099\n6KK1 56100\n6KK3 56101\n6KK8 56102\n6KK/ 56103\n6KOB 56104\n6KOC 56105\n6KOD 56106\n6KOE 56107\n6KOF 56108\n6KOG 56109\n6KOH 56110\n6KOJ 56111\n6KOK 56112\n6KOO 56113\n6KOP 56114\n6KOS 56115\n6KOU 56116\n6KOV 56117\n6KOY 56118\n6KOZ 56119\n6KOb 56120\n6KOc 56121\n6KOd 56122\n6KOf 56123\n6KOh 56124\n6KOi 56125\n6KOk 56126\n6KOl 56127\n6KOo 56128\n6KOw 56129\n6KOx 56130\n6KOy 56131\n6KOz 56132\n6KO0 56133\n6KO4 56134\n6KO5 56135\n6KO9 56136\n6KO+ 56137\n6KSA 56138\n6KSC 56139\n6KSE 56140\n6KSH 56141\n6KSK 56142\n6KSM 56143\n6KSQ 56144\n6KSS 56145\n6KST 56146\n6KSU 56147\n6KSZ 56148\n6KSa 56149\n6KSb 56150\n6KSe 56151\n6KSh 56152\n6KSl 56153\n6KSq 56154\n6KSr 56155\n6KSt 56156\n6KSw 56157\n6KSy 56158\n6KS0 56159\n6KS2 56160\n6KS4 56161\n6KS7 56162\n6KWA 56163\n6KWB 56164\n6KWE 56165\n6KWW 56166\n6KWc 56167\n6KWe 56168\n6KWf 56169\n6KWg 56170\n6KWk 56171\n6KWm 56172\n6KWq 56173\n6KWv 56174\n6KWy 56175\n6KW0 56176\n6KW3 56177\n6KW7 56178\n6KW/ 56179\n6KaB 56180\n6KaD 56181\n6KaG 56182\n6KaH 56183\n6KaL 56184\n6KaP 56185\n6KaT 56186\n6KaW 56187\n6KaX 56188\n6KaY 56189\n6Kaa 56190\n6Kah 56191\n6Kan 56192\n6Kap 56193\n6Kaq 56194\n6Kav 56195\n6Kay 56196\n6Kaz 56197\n6Ka3 56198\n6Ka6 56199\n6Ka9 56200\n6Ka/ 56201\n6KeA 56202\n6KeB 56203\n6KeC 56204\n6KeE 56205\n6KeF 56206\n6KeG 56207\n6KeH 56208\n6KeI 56209\n6KeJ 56210\n6KeK 56211\n6KeM 56212\n6KeO 56213\n6KeP 56214\n6KeQ 56215\n6KeR 56216\n6KeS 56217\n6Kea 56218\n6Kec 56219\n6Ked 56220\n6Kee 56221\n6Kej 56222\n6Kel 56223\n6Kem 56224\n6Ker 56225\n6Kev 56226\n6Kex 56227\n6Kez 56228\n6Ke0 56229\n6Ke4 56230\n6KiA 56231\n6KiC 56232\n6KiD 56233\n6KiH 56234\n6KiI 56235\n6KiK 56236\n6KiM 56237\n6KiO 56238\n6KiT 56239\n6KiV 56240\n6KiX 56241\n6KiY 56242\n6Kia 56243\n6Kib 56244\n6Kid 56245\n6Kif 56246\n6Kii 56247\n6Kij 56248\n6Kil 56249\n6Kiq 56250\n6Kit 56251\n6Kix 56252\n6Kiz 56253\n6Ki0 56254\n6Ki2 56255\n6Ki6 56256\n6Ki7 56257\n6Ki8 56258\n6Ki+ 56259\n6KmB 56260\n6KmI 56261\n6KmQ 56262\n6KmS 56263\n6KmU 56264\n6KmV 56265\n6Kmb 56266\n6Kmd 56267\n6Kme 56268\n6Kmg 56269\n6Kmi 56270\n6Kmj 56271\n6Kmm 56272\n6Kmp 56273\n6Kmr 56274\n6Kms 56275\n6Kmt 56276\n6Kmu 56277\n6Kmw 56278\n6Kmx 56279\n6Kmy 56280\n6Kmz 56281\n6Km5 56282\n6KqC 56283\n6KqE 56284\n6KqF 56285\n6KqH 56286\n6KqJ 56287\n6KqK 56288\n6KqM 56289\n6KqN 56290\n6KqR 56291\n6KqS 56292\n6KqT 56293\n6KqV 56294\n6KqY 56295\n6Kqe 56296\n6Kqg 56297\n6Kqh 56298\n6Kqj 56299\n6Kqk 56300\n6Kql 56301\n6Kqm 56302\n6Kqo 56303\n6Kqq 56304\n6Kqs 56305\n6Kqt 56306\n6Kqw 56307\n6Kqy 56308\n6Kq5 56309\n6Kq8 56310\n6Kq/ 56311\n6KuC 56312\n6KuE 56313\n6KuH 56314\n6KuL 56315\n6KuM 56316\n6KuN 56317\n6KuP 56318\n6KuS 56319\n6KuW 56320\n6KuX 56321\n6Kua 56322\n6Kub 56323\n6Kuc 56324\n6Kuh 56325\n6Kui 56326\n6Kuk 56327\n6Kum 56328\n6Kun 56329\n6Kur 56330\n6Kut 56331\n6Kuu 56332\n6Kux 56333\n6Kuz 56334\n6Ku3 56335\n6Ku4 56336\n6Ku6 56337\n6Ku8 56338\n6Ku+ 56339\n6KyA 56340\n6KyB 56341\n6KyC 56342\n6KyE 56343\n6KyH 56344\n6KyK 56345\n6KyO 56346\n6KyQ 56347\n6KyU 56348\n6KyW 56349\n6KyX 56350\n6KyZ 56351\n6Kya 56352\n6Kyb 56353\n6Kyd 56354\n6Kyg 56355\n6Kyh 56356\n6Kym 56357\n6Kyo 56358\n6Kyp 56359\n6Kyr 56360\n6Kys 56361\n6Kyz 56362\n6Ky3 56363\n6Ky5 56364\n6K2B 56365\n6K2J 56366\n6K2O 56367\n6K2P 56368\n6K2W 56369\n6K2Y 56370\n6K2a 56371\n6K2c 56372\n6K2e 56373\n6K2f 56374\n6K2m 56375\n6K2r 56376\n6K2s 56377\n6K2v 56378\n6K2w 56379\n6K2y 56380\n6K20 56381\n6K23 56382\n6K29 56383\n6K6A 56384\n6K6D 56385\n6K6K 56386\n6K6M 56387\n6K6O 56388\n6K6Q 56389\n6K6S 56390\n6K6T 56391\n6K6W 56392\n6K6a 56393\n6K6g 56394\n6K6h 56395\n6K6i 56396\n6K6j 56397\n6K6k 56398\n6K6l 56399\n6K6m 56400\n6K6n 56401\n6K6o 56402\n6K6p 56403\n6K6q 56404\n6K6r 56405\n6K6t 56406\n6K6u 56407\n6K6v 56408\n6K6w 56409\n6K6y 56410\n6K6z 56411\n6K60 56412\n6K61 56413\n6K62 56414\n6K63 56415\n6K64 56416\n6K65 56417\n6K66 56418\n6K68 56419\n6K69 56420\n6K6+ 56421\n6K6/ 56422\n6K+A 56423\n6K+B 56424\n6K+C 56425\n6K+D 56426\n6K+E 56427\n6K+F 56428\n6K+G 56429\n6K+I 56430\n6K+J 56431\n6K+K 56432\n6K+L 56433\n6K+M 56434\n6K+N 56435\n6K+O 56436\n6K+P 56437\n6K+Q 56438\n6K+R 56439\n6K+S 56440\n6K+T 56441\n6K+U 56442\n6K+V 56443\n6K+W 56444\n6K+X 56445\n6K+Y 56446\n6K+Z 56447\n6K+a 56448\n6K+b 56449\n6K+c 56450\n6K+d 56451\n6K+e 56452\n6K+f 56453\n6K+g 56454\n6K+h 56455\n6K+i 56456\n6K+j 56457\n6K+k 56458\n6K+l 56459\n6K+m 56460\n6K+n 56461\n6K+o 56462\n6K+p 56463\n6K+r 56464\n6K+s 56465\n6K+t 56466\n6K+u 56467\n6K+v 56468\n6K+w 56469\n6K+x 56470\n6K+y 56471\n6K+z 56472\n6K+0 56473\n6K+1 56474\n6K+2 56475\n6K+3 56476\n6K+4 56477\n6K+5 56478\n6K+6 56479\n6K+7 56480\n6K+8 56481\n6K+9 56482\n6K++ 56483\n6K+/ 56484\n6LCA 56485\n6LCB 56486\n6LCC 56487\n6LCD 56488\n6LCE 56489\n6LCF 56490\n6LCG 56491\n6LCI 56492\n6LCK 56493\n6LCL 56494\n6LCM 56495\n6LCN 56496\n6LCO 56497\n6LCP 56498\n6LCQ 56499\n6LCR 56500\n6LCS 56501\n6LCT 56502\n6LCU 56503\n6LCV 56504\n6LCW 56505\n6LCX 56506\n6LCY 56507\n6LCZ 56508\n6LCa 56509\n6LCb 56510\n6LCc 56511\n6LCd 56512\n6LCe 56513\n6LCf 56514\n6LCg 56515\n6LCh 56516\n6LCi 56517\n6LCj 56518\n6LCk 56519\n6LCl 56520\n6LCm 56521\n6LCn 56522\n6LCo 56523\n6LCp 56524\n6LCq 56525\n6LCs 56526\n6LCt 56527\n6LCu 56528\n6LCv 56529\n6LCw 56530\n6LCx 56531\n6LCy 56532\n6LCz 56533\n6LC0 56534\n6LC1 56535\n6LC2 56536\n6LC3 56537\n6LC6 56538\n6LC/ 56539\n6LGB 56540\n6LGF 56541\n6LGG 56542\n6LGH 56543\n6LGI 56544\n6LGJ 56545\n6LGK 56546\n6LGM 56547\n6LGO 56548\n6LGQ 56549\n6LGU 56550\n6LGV 56551\n6LGa 56552\n6LGb 56553\n6LGd 56554\n6LGh 56555\n6LGi 56556\n6LGo 56557\n6LGq 56558\n6LGr 56559\n6LGs 56560\n6LGz 56561\n6LG4 56562\n6LG5 56563\n6LG6 56564\n6LKC 56565\n6LKF 56566\n6LKJ 56567\n6LKK 56568\n6LKM 56569\n6LKT 56570\n6LKU 56571\n6LKY 56572\n6LKd 56573\n6LKe 56574\n6LKg 56575\n6LKh 56576\n6LKi 56577\n6LKn 56578\n6LKo 56579\n6LKp 56580\n6LKq 56581\n6LKr 56582\n6LKs 56583\n6LKv 56584\n6LKw 56585\n6LKy 56586\n6LKz 56587\n6LK0 56588\n6LK2 56589\n6LK3 56590\n6LK4 56591\n6LK7 56592\n6LK8 56593\n6LK9 56594\n6LK/ 56595\n6LOA 56596\n6LOB 56597\n6LOC 56598\n6LOD 56599\n6LOE 56600\n6LOH 56601\n6LOI 56602\n6LOK 56603\n6LOO 56604\n6LOR 56605\n6LOS 56606\n6LOT 56607\n6LOa 56608\n6LOb 56609\n6LOc 56610\n6LOe 56611\n6LOg 56612\n6LOi 56613\n6LOj 56614\n6LOk 56615\n6LOm 56616\n6LOq 56617\n6LOs 56618\n6LOt 56619\n6LO0 56620\n6LO6 56621\n6LO8 56622\n6LO9 56623\n6LSE 56624\n6LSF 56625\n6LSH 56626\n6LSI 56627\n6LSK 56628\n6LSL 56629\n6LSP 56630\n6LSQ 56631\n6LST 56632\n6LSU 56633\n6LSW 56634\n6LSd 56635\n6LSe 56636\n6LSf 56637\n6LSh 56638\n6LSi 56639\n6LSj 56640\n6LSk 56641\n6LSl 56642\n6LSm 56643\n6LSn 56644\n6LSo 56645\n6LSp 56646\n6LSq 56647\n6LSr 56648\n6LSs 56649\n6LSt 56650\n6LSu 56651\n6LSv 56652\n6LSw 56653\n6LSx 56654\n6LSy 56655\n6LS0 56656\n6LS1 56657\n6LS2 56658\n6LS3 56659\n6LS4 56660\n6LS5 56661\n6LS6 56662\n6LS7 56663\n6LS8 56664\n6LS9 56665\n6LS+ 56666\n6LS/ 56667\n6LWB 56668\n6LWC 56669\n6LWD 56670\n6LWE 56671\n6LWF 56672\n6LWI 56673\n6LWJ 56674\n6LWK 56675\n6LWL 56676\n6LWM 56677\n6LWN 56678\n6LWO 56679\n6LWP 56680\n6LWQ 56681\n6LWT 56682\n6LWU 56683\n6LWV 56684\n6LWW 56685\n6LWY 56686\n6LWZ 56687\n6LWa 56688\n6LWb 56689\n6LWc 56690\n6LWd 56691\n6LWe 56692\n6LWf 56693\n6LWg 56694\n6LWh 56695\n6LWi 56696\n6LWj 56697\n6LWk 56698\n6LWm 56699\n6LWn 56700\n6LWq 56701\n6LWr 56702\n6LWs 56703\n6LWt 56704\n6LWw 56705\n6LWz 56706\n6LW0 56707\n6LW1 56708\n6LW2 56709\n6LW3 56710\n6LaB 56711\n6LaE 56712\n6LaF 56713\n6LaK 56714\n6LaL 56715\n6LaU 56716\n6LaV 56717\n6LaZ 56718\n6Laf 56719\n6Laj 56720\n6Lao 56721\n6Laz 56722\n6La0 56723\n6La1 56724\n6La4 56725\n6La6 56726\n6La+ 56727\n6La/ 56728\n6LeC 56729\n6LeD 56730\n6LeE 56731\n6LeG 56732\n6LeL 56733\n6LeM 56734\n6LeO 56735\n6LeP 56736\n6LeR 56737\n6LeW 56738\n6LeX 56739\n6Lea 56740\n6Leb 56741\n6Led 56742\n6Lee 56743\n6Lef 56744\n6Leh 56745\n6Lej 56746\n6Lek 56747\n6Leo 56748\n6Lep 56749\n6Leq 56750\n6Ler 56751\n6Les 56752\n6Lev 56753\n6Lex 56754\n6Lez 56755\n6Le1 56756\n6Le2 56757\n6Le3 56758\n6Le4 56759\n6Le5 56760\n6Le6 56761\n6Le7 56762\n6Le8 56763\n6Le9 56764\n6Le/ 56765\n6LiF 56766\n6LiJ 56767\n6LiK 56768\n6LiM 56769\n6LiO 56770\n6LiP 56771\n6LiQ 56772\n6LiU 56773\n6LiW 56774\n6Lid 56775\n6Lie 56776\n6Lif 56777\n6Lih 56778\n6Lii 56779\n6Lij 56780\n6Lim 56781\n6Lin 56782\n6Lip 56783\n6Liq 56784\n6Lis 56785\n6Lit 56786\n6Liu 56787\n6Liv 56788\n6Liw 56789\n6Lix 56790\n6Li0 56791\n6Li1 56792\n6Li5 56793\n6Li6 56794\n6Li9 56795\n6LmA 56796\n6LmB 56797\n6LmC 56798\n6LmE 56799\n6LmH 56800\n6LmI 56801\n6LmJ 56802\n6LmK 56803\n6LmL 56804\n6LmM 56805\n6LmQ 56806\n6LmR 56807\n6LmS 56808\n6LmV 56809\n6LmZ 56810\n6Lma 56811\n6Lmf 56812\n6Lmg 56813\n6Lmh 56814\n6Lmj 56815\n6Lmk 56816\n6Lmm 56817\n6Lmp 56818\n6Lms 56819\n6Lmt 56820\n6Lmv 56821\n6Lmw 56822\n6Lmy 56823\n6Lm0 56824\n6Lm2 56825\n6Lm8 56826\n6Lm9 56827\n6Lm/ 56828\n6LqB 56829\n6LqE 56830\n6LqF 56831\n6LqH 56832\n6LqK 56833\n6LqN 56834\n6LqP 56835\n6LqQ 56836\n6LqR 56837\n6LqT 56838\n6LqU 56839\n6LqZ 56840\n6Lqc 56841\n6Lqh 56842\n6Lqq 56843\n6Lqr 56844\n6Lqs 56845\n6Lqv 56846\n6Lqw 56847\n6Lqx 56848\n6Lqy 56849\n6Lq6 56850\n6Lq+ 56851\n6LuA 56852\n6LuI 56853\n6LuK 56854\n6LuL 56855\n6LuM 56856\n6LuN 56857\n6LuO 56858\n6LuS 56859\n6Lub 56860\n6Luf 56861\n6Lui 56862\n6Luj 56863\n6Lur 56864\n6Lu4 56865\n6Lu7 56866\n6Lu8 56867\n6Lu9 56868\n6LyD 56869\n6LyJ 56870\n6LyK 56871\n6LyM 56872\n6LyS 56873\n6LyT 56874\n6LyU 56875\n6LyV 56876\n6Lyb 56877\n6Lyc 56878\n6Lyd 56879\n6Lym 56880\n6Lyp 56881\n6Lyq 56882\n6Lyv 56883\n6Lyz 56884\n6Ly2 56885\n6Ly4 56886\n6Ly7 56887\n6Ly+ 56888\n6Ly/ 56889\n6L2C 56890\n6L2E 56891\n6L2F 56892\n6L2G 56893\n6L2J 56894\n6L2M 56895\n6L2N 56896\n6L2O 56897\n6L2X 56898\n6L2f 56899\n6L2h 56900\n6L2i 56901\n6L2j 56902\n6L2k 56903\n6L2m 56904\n6L2n 56905\n6L2o 56906\n6L2p 56907\n6L2r 56908\n6L2s 56909\n6L2t 56910\n6L2u 56911\n6L2v 56912\n6L2w 56913\n6L2x 56914\n6L2y 56915\n6L2z 56916\n6L20 56917\n6L21 56918\n6L22 56919\n6L24 56920\n6L25 56921\n6L26 56922\n6L27 56923\n6L28 56924\n6L29 56925\n6L2+ 56926\n6L2/ 56927\n6L6C 56928\n6L6D 56929\n6L6E 56930\n6L6F 56931\n6L6G 56932\n6L6H 56933\n6L6I 56934\n6L6J 56935\n6L6K 56936\n6L6L 56937\n6L6N 56938\n6L6O 56939\n6L6P 56940\n6L6Q 56941\n6L6R 56942\n6L6T 56943\n6L6U 56944\n6L6V 56945\n6L6W 56946\n6L6X 56947\n6L6Y 56948\n6L6Z 56949\n6L6a 56950\n6L6b 56951\n6L6c 56952\n6L6e 56953\n6L6f 56954\n6L6j 56955\n6L6m 56956\n6L6o 56957\n6L6p 56958\n6L6r 56959\n6L6t 56960\n6L6u 56961\n6L6v 56962\n6L6w 56963\n6L6x 56964\n6L6y 56965\n6L63 56966\n6L65 56967\n6L66 56968\n6L67 56969\n6L68 56970\n6L69 56971\n6L6+ 56972\n6L6/ 56973\n6L+B 56974\n6L+C 56975\n6L+E 56976\n6L+F 56977\n6L+H 56978\n6L+I 56979\n6L+O 56980\n6L+Q 56981\n6L+R 56982\n6L+T 56983\n6L+U 56984\n6L+V 56985\n6L+Y 56986\n6L+Z 56987\n6L+a 56988\n6L+b 56989\n6L+c 56990\n6L+d 56991\n6L+e 56992\n6L+f 56993\n6L+g 56994\n6L+i 56995\n6L+k 56996\n6L+l 56997\n6L+m 56998\n6L+o 56999\n6L+p 57000\n6L+q 57001\n6L+r 57002\n6L+t 57003\n6L+u 57004\n6L+w 57005\n6L+z 57006\n6L+0 57007\n6L+3 57008\n6L+4 57009\n6L+5 57010\n6L+9 57011\n6YCA 57012\n6YCB 57013\n6YCC 57014\n6YCD 57015\n6YCE 57016\n6YCF 57017\n6YCG 57018\n6YCJ 57019\n6YCK 57020\n6YCL 57021\n6YCN 57022\n6YCP 57023\n6YCQ 57024\n6YCR 57025\n6YCS 57026\n6YCT 57027\n6YCU 57028\n6YCV 57029\n6YCW 57030\n6YCX 57031\n6YCZ 57032\n6YCa 57033\n6YCb 57034\n6YCd 57035\n6YCe 57036\n6YCf 57037\n6YCg 57038\n6YCh 57039\n6YCi 57040\n6YCj 57041\n6YCm 57042\n6YCu 57043\n6YCv 57044\n6YCx 57045\n6YCy 57046\n6YC1 57047\n6YC2 57048\n6YC4 57049\n6YC7 57050\n6YC8 57051\n6YC+ 57052\n6YGB 57053\n6YGC 57054\n6YGE 57055\n6YGF 57056\n6YGH 57057\n6YGJ 57058\n6YGK 57059\n6YGL 57060\n6YGN 57061\n6YGO 57062\n6YGP 57063\n6YGQ 57064\n6YGR 57065\n6YGS 57066\n6YGT 57067\n6YGU 57068\n6YGV 57069\n6YGW 57070\n6YGX 57071\n6YGY 57072\n6YGZ 57073\n6YGb 57074\n6YGc 57075\n6YGe 57076\n6YGg 57077\n6YGh 57078\n6YGi 57079\n6YGj 57080\n6YGl 57081\n6YGo 57082\n6YGp 57083\n6YGt 57084\n6YGu 57085\n6YGv 57086\n6YGy 57087\n6YG0 57088\n6YG1 57089\n6YG3 57090\n6YG4 57091\n6YG5 57092\n6YG6 57093\n6YG8 57094\n6YG9 57095\n6YG/ 57096\n6YKA 57097\n6YKB 57098\n6YKC 57099\n6YKD 57100\n6YKE 57101\n6YKF 57102\n6YKH 57103\n6YKI 57104\n6YKJ 57105\n6YKK 57106\n6YKL 57107\n6YKP 57108\n6YKR 57109\n6YKT 57110\n6YKV 57111\n6YKX 57112\n6YKY 57113\n6YKZ 57114\n6YKb 57115\n6YKd 57116\n6YKg 57117\n6YKh 57118\n6YKi 57119\n6YKj 57120\n6YKm 57121\n6YKo 57122\n6YKq 57123\n6YKs 57124\n6YKu 57125\n6YKv 57126\n6YKw 57127\n6YKx 57128\n6YKz 57129\n6YK0 57130\n6YK1 57131\n6YK2 57132\n6YK4 57133\n6YK5 57134\n6YK6 57135\n6YK7 57136\n6YK9 57137\n6YK+ 57138\n6YOB 57139\n6YOD 57140\n6YOE 57141\n6YOF 57142\n6YOH 57143\n6YOK 57144\n6YOO 57145\n6YOP 57146\n6YOQ 57147\n6YOR 57148\n6YOT 57149\n6YOV 57150\n6YOb 57151\n6YOc 57152\n6YOd 57153\n6YOe 57154\n6YOh 57155\n6YOi 57156\n6YOk 57157\n6YOm 57158\n6YOn 57159\n6YOo 57160\n6YOr 57161\n6YOt 57162\n6YOv 57163\n6YO0 57164\n6YO1 57165\n6YO3 57166\n6YO4 57167\n6YO9 57168\n6YO+ 57169\n6YO/ 57170\n6YSC 57171\n6YSE 57172\n6YSF 57173\n6YSJ 57174\n6YSP 57175\n6YSS 57176\n6YSY 57177\n6YSZ 57178\n6YSa 57179\n6YSc 57180\n6YSe 57181\n6YSg 57182\n6YSi 57183\n6YSj 57184\n6YSn 57185\n6YSp 57186\n6YSr 57187\n6YSt 57188\n6YSu 57189\n6YSv 57190\n6YSw 57191\n6YSx 57192\n6YSy 57193\n6YS6 57194\n6YWG 57195\n6YWJ 57196\n6YWK 57197\n6YWL 57198\n6YWM 57199\n6YWN 57200\n6YWO 57201\n6YWQ 57202\n6YWS 57203\n6YWU 57204\n6YWX 57205\n6YWY 57206\n6YWa 57207\n6YWd 57208\n6YWe 57209\n6YWh 57210\n6YWi 57211\n6YWj 57212\n6YWk 57213\n6YWl 57214\n6YWp 57215\n6YWq 57216\n6YWr 57217\n6YWs 57218\n6YWu 57219\n6YWv 57220\n6YWw 57221\n6YWx 57222\n6YW1 57223\n6YW2 57224\n6YW3 57225\n6YW4 57226\n6YW5 57227\n6YW6 57228\n6YW9 57229\n6YW/ 57230\n6YaC 57231\n6YaF 57232\n6YaH 57233\n6YaJ 57234\n6YaL 57235\n6YaM 57236\n6YaN 57237\n6YaQ 57238\n6YaS 57239\n6YaX 57240\n6Yaa 57241\n6Yab 57242\n6Yac 57243\n6Yae 57244\n6Yai 57245\n6Yaj 57246\n6Yak 57247\n6Yaq 57248\n6Yar 57249\n6Yas 57250\n6Yat 57251\n6Yau 57252\n6Yav 57253\n6Yay 57254\n6Ya0 57255\n6Ya1 57256\n6Ya4 57257\n6Ya6 57258\n6YeA 57259\n6YeB 57260\n6YeG 57261\n6YeH 57262\n6YeI 57263\n6YeJ 57264\n6YeK 57265\n6YeL 57266\n6YeM 57267\n6YeN 57268\n6YeO 57269\n6YeP 57270\n6YeQ 57271\n6YeR 57272\n6YeY 57273\n6Yeb 57274\n6Yec 57275\n6Yed 57276\n6Yeh 57277\n6Yej 57278\n6Yem 57279\n6Yen 57280\n6Yet 57281\n6Ye1 57282\n6Ye2 57283\n6Ye8 57284\n6Ye/ 57285\n6YiH 57286\n6YiN 57287\n6YiO 57288\n6YiR 57289\n6YiU 57290\n6YiV 57291\n6Yie 57292\n6Yip 57293\n6Yiq 57294\n6Yiz 57295\n6Yi0 57296\n6Yi3 57297\n6Yi/ 57298\n6YmE 57299\n6YmI 57300\n6YmJ 57301\n6YmL 57302\n6YmP 57303\n6YmX 57304\n6Ymb 57305\n6Yme 57306\n6Ymi 57307\n6Ymk 57308\n6Ymm 57309\n6Ymx 57310\n6Ym0 57311\n6Ym+ 57312\n6YqA 57313\n6YqD 57314\n6YqF 57315\n6YqR 57316\n6YqT 57317\n6YqV 57318\n6YqW 57319\n6YqY 57320\n6Yqa 57321\n6Yqb 57322\n6Yqc 57323\n6Yqt 57324\n6Yqu 57325\n6Yqz 57326\n6Yq2 57327\n6Yq3 57328\n6Yq5 57329\n6YuG 57330\n6YuI 57331\n6YuP 57332\n6YuQ 57333\n6YuS 57334\n6Yuk 57335\n6Yup 57336\n6Yuq 57337\n6Yut 57338\n6Yuy 57339\n6Yuz 57340\n6Yu4 57341\n6Yu5 57342\n6Yu6 57343\n6Yu8 57344\n6YyE 57345\n6YyG 57346\n6YyP 57347\n6YyQ 57348\n6YyY 57349\n6YyZ 57350\n6Yya 57351\n6Yye 57352\n6Yyg 57353\n6Yyi 57354\n6Yyj 57355\n6Yym 57356\n6Yyo 57357\n6Yyr 57358\n6Yys 57359\n6Yyu 57360\n6Yyv 57361\n6Yyy 57362\n6Yy1 57363\n6Yy2 57364\n6Yy6 57365\n6Yy+ 57366\n6Y2J 57367\n6Y2K 57368\n6Y2L 57369\n6Y2N 57370\n6Y2S 57371\n6Y2U 57372\n6Y2b 57373\n6Y2c 57374\n6Y2l 57375\n6Y2q 57376\n6Y2s 57377\n6Y2u 57378\n6Y21 57379\n6Y28 57380\n6Y2+ 57381\n6Y6J 57382\n6Y6K 57383\n6Y6M 57384\n6Y6P 57385\n6Y6U 57386\n6Y6W 57387\n6Y6X 57388\n6Y6a 57389\n6Y6b 57390\n6Y6n 57391\n6Y6s 57392\n6Y6t 57393\n6Y6u 57394\n6Y6w 57395\n6Y64 57396\n6Y65 57397\n6Y+D 57398\n6Y+I 57399\n6Y+K 57400\n6Y+Q 57401\n6Y+R 57402\n6Y+W 57403\n6Y+X 57404\n6Y+Y 57405\n6Y+d 57406\n6Y+f 57407\n6Y+h 57408\n6Y+k 57409\n6Y+l 57410\n6Y+o 57411\n6ZCD 57412\n6ZCH 57413\n6ZCO 57414\n6ZCQ 57415\n6ZCU 57416\n6ZCY 57417\n6ZCZ 57418\n6ZCa 57419\n6ZCh 57420\n6ZCn 57421\n6ZCu 57422\n6ZCy 57423\n6ZC1 57424\n6ZC2 57425\n6ZC4 57426\n6ZC6 57427\n6ZGB 57428\n6ZGE 57429\n6ZGK 57430\n6ZGR 57431\n6ZGS 57432\n6ZGT 57433\n6ZGb 57434\n6ZGe 57435\n6ZGg 57436\n6ZGi 57437\n6ZGq 57438\n6ZGr 57439\n6ZGw 57440\n6ZGx 57441\n6ZGy 57442\n6ZG1 57443\n6ZG3 57444\n6ZG5 57445\n6ZG8 57446\n6ZG9 57447\n6ZG/ 57448\n6ZKH 57449\n6ZKI 57450\n6ZKJ 57451\n6ZKK 57452\n6ZKL 57453\n6ZKM 57454\n6ZKN 57455\n6ZKO 57456\n6ZKP 57457\n6ZKQ 57458\n6ZKS 57459\n6ZKT 57460\n6ZKU 57461\n6ZKV 57462\n6ZKX 57463\n6ZKY 57464\n6ZKZ 57465\n6ZKa 57466\n6ZKb 57467\n6ZKc 57468\n6ZKd 57469\n6ZKe 57470\n6ZKf 57471\n6ZKg 57472\n6ZKh 57473\n6ZKi 57474\n6ZKj 57475\n6ZKk 57476\n6ZKl 57477\n6ZKm 57478\n6ZKn 57479\n6ZKo 57480\n6ZKp 57481\n6ZKq 57482\n6ZKr 57483\n6ZKs 57484\n6ZKu 57485\n6ZKv 57486\n6ZKw 57487\n6ZKx 57488\n6ZKy 57489\n6ZKz 57490\n6ZK0 57491\n6ZK1 57492\n6ZK5 57493\n6ZK6 57494\n6ZK7 57495\n6ZK8 57496\n6ZK9 57497\n6ZK+ 57498\n6ZK/ 57499\n6ZOA 57500\n6ZOB 57501\n6ZOC 57502\n6ZOD 57503\n6ZOE 57504\n6ZOF 57505\n6ZOG 57506\n6ZOI 57507\n6ZOJ 57508\n6ZOK 57509\n6ZOL 57510\n6ZOM 57511\n6ZON 57512\n6ZOO 57513\n6ZOQ 57514\n6ZOR 57515\n6ZOS 57516\n6ZOT 57517\n6ZOW 57518\n6ZOX 57519\n6ZOZ 57520\n6ZOa 57521\n6ZOb 57522\n6ZOc 57523\n6ZOd 57524\n6ZOe 57525\n6ZOf 57526\n6ZOg 57527\n6ZOh 57528\n6ZOi 57529\n6ZOj 57530\n6ZOk 57531\n6ZOl 57532\n6ZOm 57533\n6ZOn 57534\n6ZOo 57535\n6ZOp 57536\n6ZOq 57537\n6ZOr 57538\n6ZOs 57539\n6ZOt 57540\n6ZOu 57541\n6ZOv 57542\n6ZOw 57543\n6ZOx 57544\n6ZOy 57545\n6ZOz 57546\n6ZO1 57547\n6ZO2 57548\n6ZO3 57549\n6ZO4 57550\n6ZO6 57551\n6ZO8 57552\n6ZO+ 57553\n6ZO/ 57554\n6ZSA 57555\n6ZSB 57556\n6ZSC 57557\n6ZSD 57558\n6ZSE 57559\n6ZSF 57560\n6ZSG 57561\n6ZSH 57562\n6ZSI 57563\n6ZSJ 57564\n6ZSK 57565\n6ZSL 57566\n6ZSM 57567\n6ZSN 57568\n6ZSP 57569\n6ZSQ 57570\n6ZSR 57571\n6ZSS 57572\n6ZSU 57573\n6ZSV 57574\n6ZSW 57575\n6ZSX 57576\n6ZSY 57577\n6ZSZ 57578\n6ZSa 57579\n6ZSb 57580\n6ZSc 57581\n6ZSd 57582\n6ZSe 57583\n6ZSf 57584\n6ZSh 57585\n6ZSi 57586\n6ZSj 57587\n6ZSk 57588\n6ZSl 57589\n6ZSm 57590\n6ZSo 57591\n6ZSp 57592\n6ZSr 57593\n6ZSs 57594\n6ZSt 57595\n6ZSu 57596\n6ZSv 57597\n6ZSw 57598\n6ZSx 57599\n6ZSy 57600\n6ZS0 57601\n6ZS1 57602\n6ZS2 57603\n6ZS3 57604\n6ZS4 57605\n6ZS5 57606\n6ZS6 57607\n6ZS7 57608\n6ZWA 57609\n6ZWB 57610\n6ZWC 57611\n6ZWF 57612\n6ZWG 57613\n6ZWH 57614\n6ZWJ 57615\n6ZWK 57616\n6ZWL 57617\n6ZWM 57618\n6ZWN 57619\n6ZWP 57620\n6ZWQ 57621\n6ZWR 57622\n6ZWS 57623\n6ZWU 57624\n6ZWV 57625\n6ZWW 57626\n6ZWX 57627\n6ZWY 57628\n6ZWb 57629\n6ZWc 57630\n6ZWd 57631\n6ZWe 57632\n6ZWf 57633\n6ZWg 57634\n6ZWh 57635\n6ZWi 57636\n6ZWj 57637\n6ZWl 57638\n6ZWn 57639\n6ZWp 57640\n6ZWq 57641\n6ZWr 57642\n6ZWs 57643\n6ZWt 57644\n6ZWv 57645\n6ZWw 57646\n6ZWx 57647\n6ZWy 57648\n6ZWz 57649\n6ZW1 57650\n6ZW2 57651\n6ZW3 57652\n6ZW/ 57653\n6ZaA 57654\n6ZaC 57655\n6ZaD 57656\n6ZaH 57657\n6ZaJ 57658\n6ZaK 57659\n6ZaL 57660\n6ZaO 57661\n6ZaP 57662\n6ZaR 57663\n6ZaS 57664\n6ZaT 57665\n6ZaU 57666\n6ZaW 57667\n6ZaY 57668\n6Zaf 57669\n6Zai 57670\n6Zaj 57671\n6Zak 57672\n6Zal 57673\n6Zam 57674\n6Zao 57675\n6Zat 57676\n6Zax 57677\n6Zay 57678\n6Za5 57679\n6Za7 57680\n6Za8 57681\n6Za+ 57682\n6ZeD 57683\n6ZeG 57684\n6ZeH 57685\n6ZeK 57686\n6ZeM 57687\n6ZeN 57688\n6ZeV 57689\n6ZeW 57690\n6ZeY 57691\n6Zec 57692\n6Zeh 57693\n6Zei 57694\n6Zel 57695\n6Zeo 57696\n6Zep 57697\n6Zeq 57698\n6Zer 57699\n6Zet 57700\n6Zeu 57701\n6Zev 57702\n6Zew 57703\n6Zex 57704\n6Zey 57705\n6Zez 57706\n6Ze0 57707\n6Ze1 57708\n6Ze3 57709\n6Ze4 57710\n6Ze5 57711\n6Ze6 57712\n6Ze7 57713\n6Ze8 57714\n6Ze9 57715\n6Ze+ 57716\n6Ze/ 57717\n6ZiA 57718\n6ZiB 57719\n6ZiC 57720\n6ZiD 57721\n6ZiE 57722\n6ZiF 57723\n6ZiG 57724\n6ZiH 57725\n6ZiI 57726\n6ZiJ 57727\n6ZiK 57728\n6ZiL 57729\n6ZiM 57730\n6ZiN 57731\n6ZiO 57732\n6ZiP 57733\n6ZiQ 57734\n6ZiR 57735\n6ZiS 57736\n6ZiU 57737\n6ZiV 57738\n6ZiW 57739\n6ZiX 57740\n6ZiZ 57741\n6Zia 57742\n6Zic 57743\n6Zid 57744\n6Zif 57745\n6Zih 57746\n6Zio 57747\n6Ziq 57748\n6Zis 57749\n6Ziu 57750\n6Zix 57751\n6Ziy 57752\n6Ziz 57753\n6Zi0 57754\n6Zi1 57755\n6Zi2 57756\n6Zi7 57757\n6Zi8 57758\n6Zi9 57759\n6Zi/ 57760\n6ZmA 57761\n6ZmC 57762\n6ZmE 57763\n6ZmF 57764\n6ZmG 57765\n6ZmH 57766\n6ZmI 57767\n6ZmJ 57768\n6ZmL 57769\n6ZmM 57770\n6ZmN 57771\n6ZmQ 57772\n6ZmU 57773\n6ZmV 57774\n6Zmb 57775\n6Zmc 57776\n6Zmd 57777\n6Zme 57778\n6Zmf 57779\n6Zmh 57780\n6Zmi 57781\n6Zmj 57782\n6Zmk 57783\n6Zml 57784\n6Zmm 57785\n6Zmn 57786\n6Zmo 57787\n6Zmp 57788\n6Zmq 57789\n6Zms 57790\n6Zmw 57791\n6Zmy 57792\n6Zmz 57793\n6Zm1 57794\n6Zm2 57795\n6Zm3 57796\n6Zm4 57797\n6Zm6 57798\n6Zm9 57799\n6ZqF 57800\n6ZqG 57801\n6ZqI 57802\n6ZqK 57803\n6ZqL 57804\n6ZqN 57805\n6ZqO 57806\n6ZqP 57807\n6ZqQ 57808\n6ZqU 57809\n6ZqV 57810\n6ZqX 57811\n6ZqY 57812\n6ZqZ 57813\n6Zqb 57814\n6Zqc 57815\n6Zqg 57816\n6Zqj 57817\n6Zqn 57818\n6Zqo 57819\n6Zqq 57820\n6Zqw 57821\n6Zqx 57822\n6Zqy 57823\n6Zqz 57824\n6Zq2 57825\n6Zq3 57826\n6Zq4 57827\n6Zq5 57828\n6Zq7 57829\n6Zq8 57830\n6Zq9 57831\n6Zq+ 57832\n6ZuA 57833\n6ZuB 57834\n6ZuE 57835\n6ZuF 57836\n6ZuG 57837\n6ZuH 57838\n6ZuJ 57839\n6ZuL 57840\n6ZuM 57841\n6ZuN 57842\n6ZuO 57843\n6ZuP 57844\n6ZuR 57845\n6ZuS 57846\n6ZuV 57847\n6ZuW 57848\n6ZuZ 57849\n6Zub 57850\n6Zuc 57851\n6Zue 57852\n6Zug 57853\n6Zui 57854\n6Zuj 57855\n6Zuo 57856\n6Zup 57857\n6Zuq 57858\n6Zur 57859\n6Zuv 57860\n6Zuw 57861\n6Zux 57862\n6Zuy 57863\n6Zuz 57864\n6Zu2 57865\n6Zu3 57866\n6Zu5 57867\n6Zu7 57868\n6Zu+ 57869\n6ZyA 57870\n6ZyB 57871\n6ZyE 57872\n6ZyG 57873\n6ZyH 57874\n6ZyI 57875\n6ZyJ 57876\n6ZyK 57877\n6ZyN 57878\n6ZyO 57879\n6ZyP 57880\n6ZyR 57881\n6ZyT 57882\n6ZyW 57883\n6ZyZ 57884\n6Zyc 57885\n6Zye 57886\n6Zyn 57887\n6Zyq 57888\n6Zyr 57889\n6Zyt 57890\n6Zyw 57891\n6Zyy 57892\n6Zy4 57893\n6Zy5 57894\n6Zy9 57895\n6Zy+ 57896\n6Z2C 57897\n6Z2E 57898\n6Z2G 57899\n6Z2I 57900\n6Z2J 57901\n6Z2R 57902\n6Z2S 57903\n6Z2T 57904\n6Z2W 57905\n6Z2Z 57906\n6Z2a 57907\n6Z2b 57908\n6Z2c 57909\n6Z2e 57910\n6Z2g 57911\n6Z2h 57912\n6Z2i 57913\n6Z2l 57914\n6Z2m 57915\n6Z2o 57916\n6Z2p 57917\n6Z2r 57918\n6Z2t 57919\n6Z2x 57920\n6Z2z 57921\n6Z20 57922\n6Z22 57923\n6Z24 57924\n6Z25 57925\n6Z26 57926\n6Z28 57927\n6Z6B 57928\n6Z6E 57929\n6Z6F 57930\n6Z6G 57931\n6Z6L 57932\n6Z6N 57933\n6Z6P 57934\n6Z6Q 57935\n6Z6R 57936\n6Z6Y 57937\n6Z6c 57938\n6Z6g 57939\n6Z6j 57940\n6Z6l 57941\n6Z6m 57942\n6Z6n 57943\n6Z6o 57944\n6Z6r 57945\n6Z6s 57946\n6Z6t 57947\n6Z60 57948\n6Z62 57949\n6Z+C 57950\n6Z+D 57951\n6Z+L 57952\n6Z+M 57953\n6Z+T 57954\n6Z+Y 57955\n6Z+c 57956\n6Z+h 57957\n6Z+m 57958\n6Z+n 57959\n6Z+p 57960\n6Z+q 57961\n6Z+r 57962\n6Z+s 57963\n6Z+t 57964\n6Z+u 57965\n6Z+y 57966\n6Z+z 57967\n6Z+1 57968\n6Z+2 57969\n6Z+7 57970\n6Z+/ 57971\n6aCB 57972\n6aCC 57973\n6aCD 57974\n6aCF 57975\n6aCG 57976\n6aCI 57977\n6aCM 57978\n6aCP 57979\n6aCQ 57980\n6aCR 57981\n6aCS 57982\n6aCT 57983\n6aCX 57984\n6aCY 57985\n6aCa 57986\n6aCg 57987\n6aCh 57988\n6aCk 57989\n6aCr 57990\n6aCs 57991\n6aCt 57992\n6aCw 57993\n6aC0 57994\n6aC3 57995\n6aC4 57996\n6aC5 57997\n6aC7 57998\n6aC8 57999\n6aC9 58000\n6aGG 58001\n6aGL 58002\n6aGM 58003\n6aGN 58004\n6aGO 58005\n6aGP 58006\n6aGS 58007\n6aGU 58008\n6aGV 58009\n6aGX 58010\n6aGY 58011\n6aGb 58012\n6aGe 58013\n6aGn 58014\n6aGr 58015\n6aGs 58016\n6aGv 58017\n6aGw 58018\n6aGx 58019\n6aGz 58020\n6aG0 58021\n6aG1 58022\n6aG2 58023\n6aG3 58024\n6aG4 58025\n6aG5 58026\n6aG6 58027\n6aG7 58028\n6aG8 58029\n6aG9 58030\n6aG+ 58031\n6aG/ 58032\n6aKA 58033\n6aKB 58034\n6aKC 58035\n6aKE 58036\n6aKF 58037\n6aKG 58038\n6aKH 58039\n6aKI 58040\n6aKJ 58041\n6aKK 58042\n6aKL 58043\n6aKM 58044\n6aKN 58045\n6aKO 58046\n6aKP 58047\n6aKQ 58048\n6aKR 58049\n6aKT 58050\n6aKU 58051\n6aKW 58052\n6aKX 58053\n6aKY 58054\n6aKZ 58055\n6aKa 58056\n6aKb 58057\n6aKc 58058\n6aKd 58059\n6aKe 58060\n6aKf 58061\n6aKg 58062\n6aKh 58063\n6aKi 58064\n6aKk 58065\n6aKm 58066\n6aKn 58067\n6aKo 58068\n6aKq 58069\n6aKv 58070\n6aKx 58071\n6aK2 58072\n6aOE 58073\n6aOG 58074\n6aOK 58075\n6aOO 58076\n6aOQ 58077\n6aOS 58078\n6aOT 58079\n6aOV 58080\n6aOW 58081\n6aOX 58082\n6aOY 58083\n6aOZ 58084\n6aOa 58085\n6aOb 58086\n6aOe 58087\n6aOf 58088\n6aOi 58089\n6aOn 58090\n6aOo 58091\n6aOp 58092\n6aOq 58093\n6aOr 58094\n6aOt 58095\n6aOv 58096\n6aOy 58097\n6aO0 58098\n6aO8 58099\n6aO9 58100\n6aO+ 58101\n6aSD 58102\n6aSF 58103\n6aSJ 58104\n6aSK 58105\n6aSM 58106\n6aSN 58107\n6aSQ 58108\n6aSR 58109\n6aSS 58110\n6aST 58111\n6aSY 58112\n6aSa 58113\n6aSd 58114\n6aSe 58115\n6aSg 58116\n6aSh 58117\n6aSo 58118\n6aSs 58119\n6aSu 58120\n6aS1 58121\n6aS4 58122\n6aWC 58123\n6aWF 58124\n6aWJ 58125\n6aWL 58126\n6aWM 58127\n6aWQ 58128\n6aWR 58129\n6aWS 58130\n6aWU 58131\n6aWV 58132\n6aWX 58133\n6aWk 58134\n6aWl 58135\n6aWn 58136\n6aWo 58137\n6aWq 58138\n6aWs 58139\n6aWt 58140\n6aWu 58141\n6aWv 58142\n6aWw 58143\n6aWx 58144\n6aWy 58145\n6aW0 58146\n6aW1 58147\n6aW2 58148\n6aW3 58149\n6aW4 58150\n6aW5 58151\n6aW6 58152\n6aW8 58153\n6aW9 58154\n6aW/ 58155\n6aaA 58156\n6aaB 58157\n6aaD 58158\n6aaE 58159\n6aaF 58160\n6aaG 58161\n6aaH 58162\n6aaI 58163\n6aaK 58164\n6aaL 58165\n6aaN 58166\n6aaP 58167\n6aaQ 58168\n6aaR 58169\n6aaS 58170\n6aaT 58171\n6aaU 58172\n6aaV 58173\n6aaW 58174\n6aaX 58175\n6aaY 58176\n6aaZ 58177\n6aal 58178\n6aao 58179\n6aas 58180\n6aat 58181\n6aau 58182\n6aaz 58183\n6aa0 58184\n6aa/ 58185\n6aeB 58186\n6aeD 58187\n6aeE 58188\n6aeF 58189\n6aeG 58190\n6aeI 58191\n6aeQ 58192\n6aeR 58193\n6aeS 58194\n6aeV 58195\n6aeY 58196\n6aeb 58197\n6aed 58198\n6aef 58199\n6aei 58200\n6aet 58201\n6aeu 58202\n6aex 58203\n6ae4 58204\n6ae7 58205\n6ae/ 58206\n6aiB 58207\n6aiO 58208\n6aiP 58209\n6aiR 58210\n6aiS 58211\n6aiT 58212\n6aiV 58213\n6aiW 58214\n6aiZ 58215\n6aig 58216\n6aio 58217\n6aiu 58218\n6aiw 58219\n6ai3 58220\n6ai+ 58221\n6amA 58222\n6amD 58223\n6amF 58224\n6amN 58225\n6amV 58226\n6amX 58227\n6ama 58228\n6amb 58229\n6amf 58230\n6ami 58231\n6aml 58232\n6amp 58233\n6amq 58234\n6amr 58235\n6ams 58236\n6amt 58237\n6amu 58238\n6amv 58239\n6amw 58240\n6amx 58241\n6amz 58242\n6am0 58243\n6am2 58244\n6am3 58245\n6am4 58246\n6am5 58247\n6am6 58248\n6am7 58249\n6am8 58250\n6am9 58251\n6am+ 58252\n6am/ 58253\n6aqA 58254\n6aqB 58255\n6aqC 58256\n6aqE 58257\n6aqF 58258\n6aqG 58259\n6aqH 58260\n6aqI 58261\n6aqK 58262\n6aqL 58263\n6aqM 58264\n6aqN 58265\n6aqO 58266\n6aqP 58267\n6aqQ 58268\n6aqR 58269\n6aqS 58270\n6aqT 58271\n6aqV 58272\n6aqW 58273\n6aqX 58274\n6aqY 58275\n6aqa 58276\n6aqb 58277\n6aqc 58278\n6aqd 58279\n6aqe 58280\n6aqf 58281\n6aqg 58282\n6aqh 58283\n6aqi 58284\n6aqk 58285\n6aql 58286\n6aqn 58287\n6aqo 58288\n6aqv 58289\n6aqw 58290\n6aq2 58291\n6aq3 58292\n6aq4 58293\n6aq6 58294\n6aq8 58295\n6auA 58296\n6auB 58297\n6auC 58298\n6auD 58299\n6auE 58300\n6auF 58301\n6auI 58302\n6auL 58303\n6auM 58304\n6auO 58305\n6auP 58306\n6auR 58307\n6auS 58308\n6auT 58309\n6auU 58310\n6auY 58311\n6auZ 58312\n6auf 58313\n6auh 58314\n6aui 58315\n6auj 58316\n6aum 58317\n6auq 58318\n6aur 58319\n6aut 58320\n6auu 58321\n6auv 58322\n6aux 58323\n6au0 58324\n6au3 58325\n6au5 58326\n6au7 58327\n6au9 58328\n6ayD 58329\n6ayE 58330\n6ayG 58331\n6ayN 58332\n6ayP 58333\n6ayQ 58334\n6ayT 58335\n6ayY 58336\n6aya 58337\n6ayf 58338\n6ayi 58339\n6ayj 58340\n6ayl 58341\n6ayn 58342\n6ayo 58343\n6ayp 58344\n6ayu 58345\n6ayv 58346\n6ayx 58347\n6ayy 58348\n6ay2 58349\n6ay7 58350\n6ay8 58351\n6a2B 58352\n6a2C 58353\n6a2D 58354\n6a2E 58355\n6a2F 58356\n6a2H 58357\n6a2I 58358\n6a2J 58359\n6a2N 58360\n6a2O 58361\n6a2P 58362\n6a2R 58363\n6a2U 58364\n6a2Y 58365\n6a2a 58366\n6a2f 58367\n6a2j 58368\n6a2m 58369\n6a2s 58370\n6a2v 58371\n6a2z 58372\n6a20 58373\n6a21 58374\n6a6A 58375\n6a6D 58376\n6a6E 58377\n6a6J 58378\n6a6K 58379\n6a6L 58380\n6a6O 58381\n6a6P 58382\n6a6Q 58383\n6a6R 58384\n6a6S 58385\n6a6T 58386\n6a6U 58387\n6a6W 58388\n6a6X 58389\n6a6f 58390\n6a6g 58391\n6a6n 58392\n6a6o 58393\n6a6q 58394\n6a6r 58395\n6a6t 58396\n6a6u 58397\n6a6x 58398\n6a6y 58399\n6a60 58400\n6a64 58401\n6a65 58402\n6a+A 58403\n6a+G 58404\n6a+H 58405\n6a+J 58406\n6a+K 58407\n6a+O 58408\n6a+P 58409\n6a+R 58410\n6a+S 58411\n6a+U 58412\n6a+W 58413\n6a+b 58414\n6a+h 58415\n6a+i 58416\n6a+j 58417\n6a+l 58418\n6a+n 58419\n6a+o 58420\n6a+q 58421\n6a+w 58422\n6a+x 58423\n6a+y 58424\n6a+z 58425\n6a+1 58426\n6a+3 58427\n6a+9 58428\n6bCE 58429\n6bCG 58430\n6bCI 58431\n6bCJ 58432\n6bCK 58433\n6bCM 58434\n6bCN 58435\n6bCQ 58436\n6bCR 58437\n6bCS 58438\n6bCT 58439\n6bCU 58440\n6bCV 58441\n6bCW 58442\n6bCY 58443\n6bCZ 58444\n6bCa 58445\n6bCh 58446\n6bCk 58447\n6bCl 58448\n6bCn 58449\n6bCt 58450\n6bCu 58451\n6bCv 58452\n6bCw 58453\n6bCy 58454\n6bC2 58455\n6bC5 58456\n6bC6 58457\n6bC7 58458\n6bC+ 58459\n6bGA 58460\n6bGF 58461\n6bGG 58462\n6bGH 58463\n6bGI 58464\n6bGP 58465\n6bGS 58466\n6bGT 58467\n6bGX 58468\n6bGY 58469\n6bGa 58470\n6bGd 58471\n6bGg 58472\n6bGn 58473\n6bGu 58474\n6bGw 58475\n6bG1 58476\n6bG2 58477\n6bG4 58478\n6bG8 58479\n6bG/ 58480\n6bKA 58481\n6bKB 58482\n6bKC 58483\n6bKF 58484\n6bKH 58485\n6bKI 58486\n6bKK 58487\n6bKL 58488\n6bKM 58489\n6bKN 58490\n6bKQ 58491\n6bKR 58492\n6bKS 58493\n6bKU 58494\n6bKW 58495\n6bKa 58496\n6bKb 58497\n6bKc 58498\n6bKe 58499\n6bKf 58500\n6bKg 58501\n6bKh 58502\n6bKi 58503\n6bKj 58504\n6bKk 58505\n6bKl 58506\n6bKm 58507\n6bKn 58508\n6bKo 58509\n6bKp 58510\n6bKr 58511\n6bKt 58512\n6bKu 58513\n6bKx 58514\n6bKy 58515\n6bKz 58516\n6bK0 58517\n6bK1 58518\n6bK2 58519\n6bK3 58520\n6bK4 58521\n6bK7 58522\n6bK8 58523\n6bK9 58524\n6bOA 58525\n6bOD 58526\n6bOE 58527\n6bOF 58528\n6bOH 58529\n6bOJ 58530\n6bOK 58531\n6bOM 58532\n6bON 58533\n6bOO 58534\n6bOP 58535\n6bOQ 58536\n6bOU 58537\n6bOV 58538\n6bOW 58539\n6bOX 58540\n6bOZ 58541\n6bOc 58542\n6bOd 58543\n6bOe 58544\n6bOf 58545\n6bOj 58546\n6bOl 58547\n6bOn 58548\n6bOp 58549\n6bOr 58550\n6bOw 58551\n6bOz 58552\n6bO0 58553\n6bO2 58554\n6bSC 58555\n6bSD 58556\n6bSG 58557\n6bSH 58558\n6bSI 58559\n6bSJ 58560\n6bSL 58561\n6bSO 58562\n6bSQ 58563\n6bSS 58564\n6bSb 58565\n6bSe 58566\n6bSf 58567\n6bSj 58568\n6bSm 58569\n6bSo 58570\n6bSr 58571\n6bSs 58572\n6bSy 58573\n6bS7 58574\n6bS+ 58575\n6bS/ 58576\n6bWA 58577\n6bWE 58578\n6bWG 58579\n6bWH 58580\n6bWQ 58581\n6bWR 58582\n6bWZ 58583\n6bWc 58584\n6bWd 58585\n6bWe 58586\n6bWf 58587\n6bWg 58588\n6bWh 58589\n6bWk 58590\n6bWr 58591\n6bWs 58592\n6bWv 58593\n6bWw 58594\n6bWy 58595\n6bW6 58596\n6bW8 58597\n6baH 58598\n6baJ 58599\n6baP 58600\n6baS 58601\n6baW 58602\n6baX 58603\n6baa 58604\n6bah 58605\n6bak 58606\n6bap 58607\n6bar 58608\n6bav 58609\n6bay 58610\n6ba0 58611\n6ba4 58612\n6ba6 58613\n6ba7 58614\n6beB 58615\n6beC 58616\n6beD 58617\n6beG 58618\n6beT 58619\n6beZ 58620\n6bea 58621\n6beg 58622\n6bem 58623\n6bet 58624\n6bev 58625\n6bey 58626\n6be4 58627\n6be5 58628\n6be6 58629\n6be9 58630\n6biC 58631\n6biZ 58632\n6bia 58633\n6bib 58634\n6bie 58635\n6bif 58636\n6big 58637\n6bih 58638\n6bii 58639\n6bij 58640\n6bil 58641\n6bim 58642\n6bio 58643\n6bip 58644\n6biq 58645\n6bir 58646\n6bis 58647\n6bit 58648\n6biu 58649\n6biv 58650\n6biw 58651\n6bix 58652\n6biz 58653\n6bi1 58654\n6bi2 58655\n6bi3 58656\n6bi4 58657\n6bi5 58658\n6bi9 58659\n6bi+ 58660\n6bi/ 58661\n6bmA 58662\n6bmB 58663\n6bmC 58664\n6bmD 58665\n6bmE 58666\n6bmF 58667\n6bmG 58668\n6bmH 58669\n6bmI 58670\n6bmJ 58671\n6bmK 58672\n6bmL 58673\n6bmM 58674\n6bmO 58675\n6bmP 58676\n6bmR 58677\n6bmV 58678\n6bmW 58679\n6bmX 58680\n6bmY 58681\n6bma 58682\n6bmc 58683\n6bme 58684\n6bmj 58685\n6bmk 58686\n6bmm 58687\n6bmn 58688\n6bmo 58689\n6bmp 58690\n6bmq 58691\n6bmr 58692\n6bms 58693\n6bmt 58694\n6bmu 58695\n6bmv 58696\n6bmw 58697\n6bmx 58698\n6bmz 58699\n6bm1 58700\n6bm4 58701\n6bm5 58702\n6bm9 58703\n6bm+ 58704\n6bm/ 58705\n6bqB 58706\n6bqC 58707\n6bqH 58708\n6bqI 58709\n6bqL 58710\n6bqS 58711\n6bqT 58712\n6bqV 58713\n6bqX 58714\n6bqd 58715\n6bqe 58716\n6bqf 58717\n6bql 58718\n6bqm 58719\n6bqp 58720\n6bqq 58721\n6bqt 58722\n6bq0 58723\n6bq1 58724\n6bq4 58725\n6bq5 58726\n6bq6 58727\n6bq7 58728\n6bq8 58729\n6bq9 58730\n6bq+ 58731\n6bq/ 58732\n6buD 58733\n6buE 58734\n6buJ 58735\n6buM 58736\n6buN 58737\n6buO 58738\n6buP 58739\n6buQ 58740\n6buR 58741\n6buS 58742\n6buU 58743\n6buY 58744\n6buZ 58745\n6bub 58746\n6buc 58747\n6bud 58748\n6bue 58749\n6buf 58750\n6bug 58751\n6buh 58752\n6bui 58753\n6bul 58754\n6bun 58755\n6buo 58756\n6bup 58757\n6buv 58758\n6bu0 58759\n6bu5 58760\n6bu7 58761\n6bu8 58762\n6bu9 58763\n6byH 58764\n6byI 58765\n6byL 58766\n6byN 58767\n6byO 58768\n6byQ 58769\n6byT 58770\n6byV 58771\n6byZ 58772\n6byg 58773\n6byh 58774\n6byi 58775\n6byp 58776\n6byq 58777\n6bys 58778\n6byv 58779\n6byx 58780\n6by5 58781\n6by7 58782\n6by+ 58783\n6b2B 58784\n6b2J 58785\n6b2K 58786\n6b2L 58787\n6b2O 58788\n6b2Q 58789\n6b2R 58790\n6b2S 58791\n6b2U 58792\n6b2f 58793\n6b2h 58794\n6b2i 58795\n6b2j 58796\n6b2m 58797\n6b2n 58798\n6b2q 58799\n6b2s 58800\n6b2y 58801\n6b23 58802\n6b2/ 58803\n6b6D 58804\n6b6E 58805\n6b6F 58806\n6b6H 58807\n6b6I 58808\n6b6J 58809\n6b6K 58810\n6b6L 58811\n6b6M 58812\n6b6N 58813\n6b6Q 58814\n6b6V 58815\n6b6Z 58816\n6b6a 58817\n6b6b 58818\n6b6c 58819\n6b6d 58820\n6b6f 58821\n6b6g 58822\n6b6i 58823\n77yB 58824\n77yI 58825\n77yJ 58826\n77yM 58827\n77yN 58828\n77ya 58829\n77yb 58830\n77yf 58831\n772Y 58832\n772Z 58833\n8KCx 58834\n8KCxgQ== 58835\n"
  },
  {
    "path": "cosyvoice/tokenizer/tokenizer.py",
    "content": "import base64\nimport os\nfrom functools import lru_cache\nfrom typing import Optional\nimport torch\nfrom transformers import AutoTokenizer\nfrom whisper.tokenizer import Tokenizer\n\nimport tiktoken\n\nLANGUAGES = {\n    \"en\": \"english\",\n    \"zh\": \"chinese\",\n    \"de\": \"german\",\n    \"es\": \"spanish\",\n    \"ru\": \"russian\",\n    \"ko\": \"korean\",\n    \"fr\": \"french\",\n    \"ja\": \"japanese\",\n    \"pt\": \"portuguese\",\n    \"tr\": \"turkish\",\n    \"pl\": \"polish\",\n    \"ca\": \"catalan\",\n    \"nl\": \"dutch\",\n    \"ar\": \"arabic\",\n    \"sv\": \"swedish\",\n    \"it\": \"italian\",\n    \"id\": \"indonesian\",\n    \"hi\": \"hindi\",\n    \"fi\": \"finnish\",\n    \"vi\": \"vietnamese\",\n    \"he\": \"hebrew\",\n    \"uk\": \"ukrainian\",\n    \"el\": \"greek\",\n    \"ms\": \"malay\",\n    \"cs\": \"czech\",\n    \"ro\": \"romanian\",\n    \"da\": \"danish\",\n    \"hu\": \"hungarian\",\n    \"ta\": \"tamil\",\n    \"no\": \"norwegian\",\n    \"th\": \"thai\",\n    \"ur\": \"urdu\",\n    \"hr\": \"croatian\",\n    \"bg\": \"bulgarian\",\n    \"lt\": \"lithuanian\",\n    \"la\": \"latin\",\n    \"mi\": \"maori\",\n    \"ml\": \"malayalam\",\n    \"cy\": \"welsh\",\n    \"sk\": \"slovak\",\n    \"te\": \"telugu\",\n    \"fa\": \"persian\",\n    \"lv\": \"latvian\",\n    \"bn\": \"bengali\",\n    \"sr\": \"serbian\",\n    \"az\": \"azerbaijani\",\n    \"sl\": \"slovenian\",\n    \"kn\": \"kannada\",\n    \"et\": \"estonian\",\n    \"mk\": \"macedonian\",\n    \"br\": \"breton\",\n    \"eu\": \"basque\",\n    \"is\": \"icelandic\",\n    \"hy\": \"armenian\",\n    \"ne\": \"nepali\",\n    \"mn\": \"mongolian\",\n    \"bs\": \"bosnian\",\n    \"kk\": \"kazakh\",\n    \"sq\": \"albanian\",\n    \"sw\": \"swahili\",\n    \"gl\": \"galician\",\n    \"mr\": \"marathi\",\n    \"pa\": \"punjabi\",\n    \"si\": \"sinhala\",\n    \"km\": \"khmer\",\n    \"sn\": \"shona\",\n    \"yo\": \"yoruba\",\n    \"so\": \"somali\",\n    \"af\": \"afrikaans\",\n    \"oc\": \"occitan\",\n    \"ka\": \"georgian\",\n    \"be\": \"belarusian\",\n    \"tg\": \"tajik\",\n    \"sd\": \"sindhi\",\n    \"gu\": \"gujarati\",\n    \"am\": \"amharic\",\n    \"yi\": \"yiddish\",\n    \"lo\": \"lao\",\n    \"uz\": \"uzbek\",\n    \"fo\": \"faroese\",\n    \"ht\": \"haitian creole\",\n    \"ps\": \"pashto\",\n    \"tk\": \"turkmen\",\n    \"nn\": \"nynorsk\",\n    \"mt\": \"maltese\",\n    \"sa\": \"sanskrit\",\n    \"lb\": \"luxembourgish\",\n    \"my\": \"myanmar\",\n    \"bo\": \"tibetan\",\n    \"tl\": \"tagalog\",\n    \"mg\": \"malagasy\",\n    \"as\": \"assamese\",\n    \"tt\": \"tatar\",\n    \"haw\": \"hawaiian\",\n    \"ln\": \"lingala\",\n    \"ha\": \"hausa\",\n    \"ba\": \"bashkir\",\n    \"jw\": \"javanese\",\n    \"su\": \"sundanese\",\n    \"yue\": \"cantonese\",\n    \"minnan\": \"minnan\",\n    \"wuyu\": \"wuyu\",\n    \"dialect\": \"dialect\",\n    \"zh/en\": \"zh/en\",\n    \"en/zh\": \"en/zh\",\n}\n\n# language code lookup by name, with a few language aliases\nTO_LANGUAGE_CODE = {\n    **{language: code for code, language in LANGUAGES.items()},\n    \"burmese\": \"my\",\n    \"valencian\": \"ca\",\n    \"flemish\": \"nl\",\n    \"haitian\": \"ht\",\n    \"letzeburgesch\": \"lb\",\n    \"pushto\": \"ps\",\n    \"panjabi\": \"pa\",\n    \"moldavian\": \"ro\",\n    \"moldovan\": \"ro\",\n    \"sinhalese\": \"si\",\n    \"castilian\": \"es\",\n    \"mandarin\": \"zh\",\n}\n\nAUDIO_EVENT = {\n    \"ASR\": \"ASR\",\n    \"AED\": \"AED\",\n    \"SER\": \"SER\",\n    \"Speech\": \"Speech\",\n    \"/Speech\": \"/Speech\",\n    \"BGM\": \"BGM\",\n    \"/BGM\": \"/BGM\",\n    \"Laughter\": \"Laughter\",\n    \"/Laughter\": \"/Laughter\",\n    \"Applause\": \"Applause\",\n    \"/Applause\": \"/Applause\",\n}\n\nEMOTION = {\n    \"HAPPY\": \"HAPPY\",\n    \"SAD\": \"SAD\",\n    \"ANGRY\": \"ANGRY\",\n    \"NEUTRAL\": \"NEUTRAL\",\n}\n\nTTS_Vocal_Token = {\n    \"TTS/B\": \"TTS/B\",\n    \"TTS/O\": \"TTS/O\",\n    \"TTS/Q\": \"TTS/Q\",\n    \"TTS/A\": \"TTS/A\",\n    \"TTS/CO\": \"TTS/CO\",\n    \"TTS/CL\": \"TTS/CL\",\n    \"TTS/H\": \"TTS/H\",\n    **{f\"TTS/SP{i:02d}\": f\"TTS/SP{i:02d}\" for i in range(1, 14)}\n}\n\n\n@lru_cache(maxsize=None)\ndef get_encoding(name: str = \"gpt2\", num_languages: int = 99):\n    vocab_path = os.path.join(os.path.dirname(__file__), \"assets\", f\"{name}.tiktoken\")\n    ranks = {\n        base64.b64decode(token): int(rank)\n        for token, rank in (line.split() for line in open(vocab_path) if line)\n    }\n    n_vocab = len(ranks)\n    special_tokens = {}\n\n    specials = [\n        \"<|endoftext|>\",\n        \"<|startoftranscript|>\",\n        *[f\"<|{lang}|>\" for lang in list(LANGUAGES.keys())[:num_languages]],\n        *[f\"<|{audio_event}|>\" for audio_event in list(AUDIO_EVENT.keys())],\n        *[f\"<|{emotion}|>\" for emotion in list(EMOTION.keys())],\n        \"<|translate|>\",\n        \"<|transcribe|>\",\n        \"<|startoflm|>\",\n        \"<|startofprev|>\",\n        \"<|nospeech|>\",\n        \"<|notimestamps|>\",\n        *[f\"<|SPECIAL_TOKEN_{i}|>\" for i in range(1, 31)],        # register special tokens for ASR\n        *[f\"<|{tts}|>\" for tts in list(TTS_Vocal_Token.keys())],  # register special tokens for TTS\n        *[f\"<|{i * 0.02:.2f}|>\" for i in range(1501)],\n    ]\n\n    for token in specials:\n        special_tokens[token] = n_vocab\n        n_vocab += 1\n\n    return tiktoken.Encoding(\n        name=os.path.basename(vocab_path),\n        explicit_n_vocab=n_vocab,\n        pat_str=r\"\"\"'s|'t|'re|'ve|'m|'ll|'d| ?\\p{L}+| ?\\p{N}+| ?[^\\s\\p{L}\\p{N}]+|\\s+(?!\\S)|\\s+\"\"\",\n        mergeable_ranks=ranks,\n        special_tokens=special_tokens,\n    )\n\n\n@lru_cache(maxsize=None)\ndef get_tokenizer(\n    multilingual: bool,\n    *,\n    num_languages: int = 99,\n    language: Optional[str] = None,\n    task: Optional[str] = None,  # Literal[\"transcribe\", \"translate\", None]\n) -> Tokenizer:\n    if language is not None:\n        language = language.lower()\n        if language not in LANGUAGES:\n            if language in TO_LANGUAGE_CODE:\n                language = TO_LANGUAGE_CODE[language]\n            else:\n                raise ValueError(f\"Unsupported language: {language}\")\n\n    if multilingual:\n        encoding_name = \"multilingual_zh_ja_yue_char_del\"\n        language = language or \"en\"\n        task = task or \"transcribe\"\n    else:\n        encoding_name = \"gpt2\"\n        language = None\n        task = None\n\n    encoding = get_encoding(name=encoding_name, num_languages=num_languages)\n\n    return Tokenizer(\n        encoding=encoding, num_languages=num_languages, language=language, task=task\n    )\n\n\nclass CosyVoice2Tokenizer():\n    def __init__(self, token_path, skip_special_tokens=True):\n        super().__init__()\n        # NOTE: non-chat model, all these special tokens keep randomly initialized.\n        special_tokens = {\n            'eos_token': '<|endoftext|>',\n            'pad_token': '<|endoftext|>',\n            'additional_special_tokens': [\n                '<|im_start|>', '<|im_end|>', '<|endofprompt|>',\n                '[breath]', '<strong>', '</strong>', '[noise]',\n                '[laughter]', '[cough]', '[clucking]', '[accent]',\n                '[quick_breath]',\n                \"<laughter>\", \"</laughter>\",\n                \"[hissing]\", \"[sigh]\", \"[vocalized-noise]\",\n                \"[lipsmack]\", \"[mn]\"\n            ]\n        }\n        self.special_tokens = special_tokens\n        self.tokenizer = AutoTokenizer.from_pretrained(token_path)\n        self.tokenizer.add_special_tokens(special_tokens)\n        self.skip_special_tokens = skip_special_tokens\n\n    def encode(self, text, **kwargs):\n        tokens = self.tokenizer([text], return_tensors=\"pt\")\n        tokens = tokens[\"input_ids\"][0].cpu().tolist()\n        return tokens\n\n    def decode(self, tokens):\n        tokens = torch.tensor(tokens, dtype=torch.int64)\n        text = self.tokenizer.batch_decode([tokens], skip_special_tokens=self.skip_special_tokens)[0]\n        return text\n\n\nclass CosyVoice3Tokenizer(CosyVoice2Tokenizer):\n    def __init__(self, token_path, skip_special_tokens=True):\n        # NOTE: non-chat model, all these special tokens keep randomly initialized.\n        special_tokens = {\n            'eos_token': '<|endoftext|>',\n            'pad_token': '<|endoftext|>',\n            'additional_special_tokens': [\n                '<|im_start|>', '<|im_end|>', '<|endofprompt|>',\n                '[breath]', '<strong>', '</strong>', '[noise]',\n                '[laughter]', '[cough]', '[clucking]', '[accent]',\n                '[quick_breath]',\n                \"<laughter>\", \"</laughter>\",\n                \"[hissing]\", \"[sigh]\", \"[vocalized-noise]\",\n                \"[lipsmack]\", \"[mn]\", \"<|endofsystem|>\",\n                \"[AA]\", \"[AA0]\", \"[AA1]\", \"[AA2]\", \"[AE]\", \"[AE0]\", \"[AE1]\", \"[AE2]\", \"[AH]\", \"[AH0]\", \"[AH1]\", \"[AH2]\",\n                \"[AO]\", \"[AO0]\", \"[AO1]\", \"[AO2]\", \"[AW]\", \"[AW0]\", \"[AW1]\", \"[AW2]\", \"[AY]\", \"[AY0]\", \"[AY1]\", \"[AY2]\",\n                \"[B]\", \"[CH]\", \"[D]\", \"[DH]\", \"[EH]\", \"[EH0]\", \"[EH1]\", \"[EH2]\", \"[ER]\", \"[ER0]\", \"[ER1]\", \"[ER2]\", \"[EY]\",\n                \"[EY0]\", \"[EY1]\", \"[EY2]\", \"[F]\", \"[G]\", \"[HH]\", \"[IH]\", \"[IH0]\", \"[IH1]\", \"[IH2]\", \"[IY]\", \"[IY0]\", \"[IY1]\",\n                \"[IY2]\", \"[JH]\", \"[K]\", \"[L]\", \"[M]\", \"[N]\", \"[NG]\", \"[OW]\", \"[OW0]\", \"[OW1]\", \"[OW2]\", \"[OY]\", \"[OY0]\",\n                \"[OY1]\", \"[OY2]\", \"[P]\", \"[R]\", \"[S]\", \"[SH]\", \"[T]\", \"[TH]\", \"[UH]\", \"[UH0]\", \"[UH1]\", \"[UH2]\", \"[UW]\",\n                \"[UW0]\", \"[UW1]\", \"[UW2]\", \"[V]\", \"[W]\", \"[Y]\", \"[Z]\", \"[ZH]\",\n                \"[a]\", \"[ai]\", \"[an]\", \"[ang]\", \"[ao]\", \"[b]\", \"[c]\", \"[ch]\", \"[d]\", \"[e]\", \"[ei]\", \"[en]\", \"[eng]\", \"[f]\",\n                \"[g]\", \"[h]\", \"[i]\", \"[ian]\", \"[in]\", \"[ing]\", \"[iu]\", \"[ià]\", \"[iàn]\", \"[iàng]\", \"[iào]\", \"[iá]\", \"[ián]\",\n                \"[iáng]\", \"[iáo]\", \"[iè]\", \"[ié]\", \"[iòng]\", \"[ióng]\", \"[iù]\", \"[iú]\", \"[iā]\", \"[iān]\", \"[iāng]\", \"[iāo]\",\n                \"[iē]\", \"[iě]\", \"[iōng]\", \"[iū]\", \"[iǎ]\", \"[iǎn]\", \"[iǎng]\", \"[iǎo]\", \"[iǒng]\", \"[iǔ]\", \"[j]\", \"[k]\", \"[l]\",\n                \"[m]\", \"[n]\", \"[o]\", \"[ong]\", \"[ou]\", \"[p]\", \"[q]\", \"[r]\", \"[s]\", \"[sh]\", \"[t]\", \"[u]\", \"[uang]\", \"[ue]\",\n                \"[un]\", \"[uo]\", \"[uà]\", \"[uài]\", \"[uàn]\", \"[uàng]\", \"[uá]\", \"[uái]\", \"[uán]\", \"[uáng]\", \"[uè]\", \"[ué]\", \"[uì]\",\n                \"[uí]\", \"[uò]\", \"[uó]\", \"[uā]\", \"[uāi]\", \"[uān]\", \"[uāng]\", \"[uē]\", \"[uě]\", \"[uī]\", \"[uō]\", \"[uǎ]\", \"[uǎi]\",\n                \"[uǎn]\", \"[uǎng]\", \"[uǐ]\", \"[uǒ]\", \"[vè]\", \"[w]\", \"[x]\", \"[y]\", \"[z]\", \"[zh]\", \"[à]\", \"[ài]\", \"[àn]\", \"[àng]\",\n                \"[ào]\", \"[á]\", \"[ái]\", \"[án]\", \"[áng]\", \"[áo]\", \"[è]\", \"[èi]\", \"[èn]\", \"[èng]\", \"[èr]\", \"[é]\", \"[éi]\", \"[én]\",\n                \"[éng]\", \"[ér]\", \"[ì]\", \"[ìn]\", \"[ìng]\", \"[í]\", \"[ín]\", \"[íng]\", \"[ò]\", \"[òng]\", \"[òu]\", \"[ó]\", \"[óng]\", \"[óu]\",\n                \"[ù]\", \"[ùn]\", \"[ú]\", \"[ún]\", \"[ā]\", \"[āi]\", \"[ān]\", \"[āng]\", \"[āo]\", \"[ē]\", \"[ēi]\", \"[ēn]\", \"[ēng]\", \"[ě]\",\n                \"[ěi]\", \"[ěn]\", \"[ěng]\", \"[ěr]\", \"[ī]\", \"[īn]\", \"[īng]\", \"[ō]\", \"[ōng]\", \"[ōu]\", \"[ū]\", \"[ūn]\", \"[ǎ]\", \"[ǎi]\",\n                \"[ǎn]\", \"[ǎng]\", \"[ǎo]\", \"[ǐ]\", \"[ǐn]\", \"[ǐng]\", \"[ǒ]\", \"[ǒng]\", \"[ǒu]\", \"[ǔ]\", \"[ǔn]\", \"[ǘ]\", \"[ǚ]\", \"[ǜ]\"\n            ]\n        }\n        self.special_tokens = special_tokens\n        self.tokenizer = AutoTokenizer.from_pretrained(token_path)\n        self.tokenizer.add_special_tokens(special_tokens)\n        self.skip_special_tokens = skip_special_tokens\n\n\n@lru_cache(maxsize=None)\ndef get_qwen_tokenizer(\n    token_path: str,\n    skip_special_tokens: bool,\n    version: str = 'cosyvoice2'\n):\n    if version == 'cosyvoice2':\n        return CosyVoice2Tokenizer(token_path=token_path, skip_special_tokens=skip_special_tokens)\n    elif version == 'cosyvoice3':\n        return CosyVoice3Tokenizer(token_path=token_path, skip_special_tokens=skip_special_tokens)\n    else:\n        raise ValueError\n"
  },
  {
    "path": "cosyvoice/transformer/__init__.py",
    "content": ""
  },
  {
    "path": "cosyvoice/transformer/activation.py",
    "content": "# Copyright (c) 2020 Johns Hopkins University (Shinji Watanabe)\n#               2020 Northwestern Polytechnical University (Pengcheng Guo)\n#               2020 Mobvoi Inc (Binbin Zhang)\n#               2024 Alibaba Inc (Xiang Lyu)\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\"\"\"Swish() activation function for Conformer.\"\"\"\n\nimport torch\nfrom torch import nn, sin, pow\nfrom torch.nn import Parameter\n\n\nclass Swish(torch.nn.Module):\n    \"\"\"Construct an Swish object.\"\"\"\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        \"\"\"Return Swish activation function.\"\"\"\n        return x * torch.sigmoid(x)\n\n\n# Implementation adapted from https://github.com/EdwardDixon/snake under the MIT license.\n#   LICENSE is in incl_licenses directory.\nclass Snake(nn.Module):\n    '''\n    Implementation of a sine-based periodic activation function\n    Shape:\n        - Input: (B, C, T)\n        - Output: (B, C, T), same shape as the input\n    Parameters:\n        - alpha - trainable parameter\n    References:\n        - This activation function is from this paper by Liu Ziyin, Tilman Hartwig, Masahito Ueda:\n        https://arxiv.org/abs/2006.08195\n    Examples:\n        >>> a1 = snake(256)\n        >>> x = torch.randn(256)\n        >>> x = a1(x)\n    '''\n    def __init__(self, in_features, alpha=1.0, alpha_trainable=True, alpha_logscale=False):\n        '''\n        Initialization.\n        INPUT:\n            - in_features: shape of the input\n            - alpha: trainable parameter\n            alpha is initialized to 1 by default, higher values = higher-frequency.\n            alpha will be trained along with the rest of your model.\n        '''\n        super(Snake, self).__init__()\n        self.in_features = in_features\n\n        # initialize alpha\n        self.alpha_logscale = alpha_logscale\n        if self.alpha_logscale:  # log scale alphas initialized to zeros\n            self.alpha = Parameter(torch.zeros(in_features) * alpha)\n        else:  # linear scale alphas initialized to ones\n            self.alpha = Parameter(torch.ones(in_features) * alpha)\n\n        self.alpha.requires_grad = alpha_trainable\n\n        self.no_div_by_zero = 0.000000001\n\n    def forward(self, x):\n        '''\n        Forward pass of the function.\n        Applies the function to the input elementwise.\n        Snake ∶= x + 1/a * sin^2 (xa)\n        '''\n        alpha = self.alpha.unsqueeze(0).unsqueeze(-1)  # line up with x to [B, C, T]\n        if self.alpha_logscale:\n            alpha = torch.exp(alpha)\n        x = x + (1.0 / (alpha + self.no_div_by_zero)) * pow(sin(x * alpha), 2)\n\n        return x\n"
  },
  {
    "path": "cosyvoice/transformer/attention.py",
    "content": "# Copyright (c) 2019 Shigeki Karita\n#               2020 Mobvoi Inc (Binbin Zhang)\n#               2022 Xingchen Song (sxc19@mails.tsinghua.edu.cn)\n#               2024 Alibaba Inc (Xiang Lyu)\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\"\"\"Multi-Head Attention layer definition.\"\"\"\n\nimport math\nfrom typing import Tuple\n\nimport torch\nfrom torch import nn\n\n\nclass MultiHeadedAttention(nn.Module):\n    \"\"\"Multi-Head Attention layer.\n\n    Args:\n        n_head (int): The number of heads.\n        n_feat (int): The number of features.\n        dropout_rate (float): Dropout rate.\n\n    \"\"\"\n\n    def __init__(self,\n                 n_head: int,\n                 n_feat: int,\n                 dropout_rate: float,\n                 key_bias: bool = True):\n        \"\"\"Construct an MultiHeadedAttention object.\"\"\"\n        super().__init__()\n        assert n_feat % n_head == 0\n        # We assume d_v always equals d_k\n        self.d_k = n_feat // n_head\n        self.h = n_head\n        self.linear_q = nn.Linear(n_feat, n_feat)\n        self.linear_k = nn.Linear(n_feat, n_feat, bias=key_bias)\n        self.linear_v = nn.Linear(n_feat, n_feat)\n        self.linear_out = nn.Linear(n_feat, n_feat)\n        self.dropout = nn.Dropout(p=dropout_rate)\n\n    def forward_qkv(\n        self, query: torch.Tensor, key: torch.Tensor, value: torch.Tensor\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Transform query, key and value.\n\n        Args:\n            query (torch.Tensor): Query tensor (#batch, time1, size).\n            key (torch.Tensor): Key tensor (#batch, time2, size).\n            value (torch.Tensor): Value tensor (#batch, time2, size).\n\n        Returns:\n            torch.Tensor: Transformed query tensor, size\n                (#batch, n_head, time1, d_k).\n            torch.Tensor: Transformed key tensor, size\n                (#batch, n_head, time2, d_k).\n            torch.Tensor: Transformed value tensor, size\n                (#batch, n_head, time2, d_k).\n\n        \"\"\"\n        n_batch = query.size(0)\n        q = self.linear_q(query).view(n_batch, -1, self.h, self.d_k)\n        k = self.linear_k(key).view(n_batch, -1, self.h, self.d_k)\n        v = self.linear_v(value).view(n_batch, -1, self.h, self.d_k)\n        q = q.transpose(1, 2)  # (batch, head, time1, d_k)\n        k = k.transpose(1, 2)  # (batch, head, time2, d_k)\n        v = v.transpose(1, 2)  # (batch, head, time2, d_k)\n\n        return q, k, v\n\n    def forward_attention(\n        self,\n        value: torch.Tensor,\n        scores: torch.Tensor,\n        mask: torch.Tensor = torch.ones((0, 0, 0), dtype=torch.bool)\n    ) -> torch.Tensor:\n        \"\"\"Compute attention context vector.\n\n        Args:\n            value (torch.Tensor): Transformed value, size\n                (#batch, n_head, time2, d_k).\n            scores (torch.Tensor): Attention score, size\n                (#batch, n_head, time1, time2).\n            mask (torch.Tensor): Mask, size (#batch, 1, time2) or\n                (#batch, time1, time2), (0, 0, 0) means fake mask.\n\n        Returns:\n            torch.Tensor: Transformed value (#batch, time1, d_model)\n                weighted by the attention score (#batch, time1, time2).\n\n        \"\"\"\n        n_batch = value.size(0)\n        # NOTE(xcsong): When will `if mask.size(2) > 0` be True?\n        #   1. onnx(16/4) [WHY? Because we feed real cache & real mask for the\n        #           1st chunk to ease the onnx export.]\n        #   2. pytorch training\n        if mask.size(2) > 0:  # time2 > 0\n            mask = mask.unsqueeze(1).eq(0)  # (batch, 1, *, time2)\n            # For last chunk, time2 might be larger than scores.size(-1)\n            mask = mask[:, :, :, :scores.size(-1)]  # (batch, 1, *, time2)\n            scores = scores.masked_fill(mask, -float('inf'))\n            attn = torch.softmax(scores, dim=-1).masked_fill(\n                mask, 0.0)  # (batch, head, time1, time2)\n        # NOTE(xcsong): When will `if mask.size(2) > 0` be False?\n        #   1. onnx(16/-1, -1/-1, 16/0)\n        #   2. jit (16/-1, -1/-1, 16/0, 16/4)\n        else:\n            attn = torch.softmax(scores, dim=-1)  # (batch, head, time1, time2)\n\n        p_attn = self.dropout(attn)\n        x = torch.matmul(p_attn, value)  # (batch, head, time1, d_k)\n        x = (x.transpose(1, 2).contiguous().view(n_batch, -1,\n                                                 self.h * self.d_k)\n             )  # (batch, time1, d_model)\n\n        return self.linear_out(x)  # (batch, time1, d_model)\n\n    def forward(\n        self,\n        query: torch.Tensor,\n        key: torch.Tensor,\n        value: torch.Tensor,\n        mask: torch.Tensor = torch.ones((0, 0, 0), dtype=torch.bool),\n        pos_emb: torch.Tensor = torch.empty(0),\n        cache: torch.Tensor = torch.zeros((0, 0, 0, 0))\n    ) -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"Compute scaled dot product attention.\n\n        Args:\n            query (torch.Tensor): Query tensor (#batch, time1, size).\n            key (torch.Tensor): Key tensor (#batch, time2, size).\n            value (torch.Tensor): Value tensor (#batch, time2, size).\n            mask (torch.Tensor): Mask tensor (#batch, 1, time2) or\n                (#batch, time1, time2).\n                1.When applying cross attention between decoder and encoder,\n                the batch padding mask for input is in (#batch, 1, T) shape.\n                2.When applying self attention of encoder,\n                the mask is in (#batch, T, T)  shape.\n                3.When applying self attention of decoder,\n                the mask is in (#batch, L, L)  shape.\n                4.If the different position in decoder see different block\n                of the encoder, such as Mocha, the passed in mask could be\n                in (#batch, L, T) shape. But there is no such case in current\n                CosyVoice.\n            cache (torch.Tensor): Cache tensor (1, head, cache_t, d_k * 2),\n                where `cache_t == chunk_size * num_decoding_left_chunks`\n                and `head * d_k == size`\n\n\n        Returns:\n            torch.Tensor: Output tensor (#batch, time1, d_model).\n            torch.Tensor: Cache tensor (1, head, cache_t + time1, d_k * 2)\n                where `cache_t == chunk_size * num_decoding_left_chunks`\n                and `head * d_k == size`\n\n        \"\"\"\n        q, k, v = self.forward_qkv(query, key, value)\n\n        # NOTE(xcsong):\n        #   when export onnx model, for 1st chunk, we feed\n        #       cache(1, head, 0, d_k * 2) (16/-1, -1/-1, 16/0 mode)\n        #       or cache(1, head, real_cache_t, d_k * 2) (16/4 mode).\n        #       In all modes, `if cache.size(0) > 0` will alwayse be `True`\n        #       and we will always do splitting and\n        #       concatnation(this will simplify onnx export). Note that\n        #       it's OK to concat & split zero-shaped tensors(see code below).\n        #   when export jit  model, for 1st chunk, we always feed\n        #       cache(0, 0, 0, 0) since jit supports dynamic if-branch.\n        # >>> a = torch.ones((1, 2, 0, 4))\n        # >>> b = torch.ones((1, 2, 3, 4))\n        # >>> c = torch.cat((a, b), dim=2)\n        # >>> torch.equal(b, c)        # True\n        # >>> d = torch.split(a, 2, dim=-1)\n        # >>> torch.equal(d[0], d[1])  # True\n        if cache.size(0) > 0:\n            key_cache, value_cache = torch.split(cache,\n                                                 cache.size(-1) // 2,\n                                                 dim=-1)\n            k = torch.cat([key_cache, k], dim=2)\n            v = torch.cat([value_cache, v], dim=2)\n        # NOTE(xcsong): We do cache slicing in encoder.forward_chunk, since it's\n        #   non-trivial to calculate `next_cache_start` here.\n        new_cache = torch.cat((k, v), dim=-1)\n\n        scores = torch.matmul(q, k.transpose(-2, -1)) / math.sqrt(self.d_k)\n        return self.forward_attention(v, scores, mask), new_cache\n\n\nclass RelPositionMultiHeadedAttention(MultiHeadedAttention):\n    \"\"\"Multi-Head Attention layer with relative position encoding.\n    Paper: https://arxiv.org/abs/1901.02860\n    Args:\n        n_head (int): The number of heads.\n        n_feat (int): The number of features.\n        dropout_rate (float): Dropout rate.\n    \"\"\"\n\n    def __init__(self,\n                 n_head: int,\n                 n_feat: int,\n                 dropout_rate: float,\n                 key_bias: bool = True):\n        \"\"\"Construct an RelPositionMultiHeadedAttention object.\"\"\"\n        super().__init__(n_head, n_feat, dropout_rate, key_bias)\n        # linear transformation for positional encoding\n        self.linear_pos = nn.Linear(n_feat, n_feat, bias=False)\n        # these two learnable bias are used in matrix c and matrix d\n        # as described in https://arxiv.org/abs/1901.02860 Section 3.3\n        self.pos_bias_u = nn.Parameter(torch.Tensor(self.h, self.d_k))\n        self.pos_bias_v = nn.Parameter(torch.Tensor(self.h, self.d_k))\n        torch.nn.init.xavier_uniform_(self.pos_bias_u)\n        torch.nn.init.xavier_uniform_(self.pos_bias_v)\n\n    def rel_shift(self, x: torch.Tensor) -> torch.Tensor:\n        \"\"\"Compute relative positional encoding.\n\n        Args:\n            x (torch.Tensor): Input tensor (batch, head, time1, 2*time1-1).\n            time1 means the length of query vector.\n\n        Returns:\n            torch.Tensor: Output tensor.\n\n        \"\"\"\n        zero_pad = torch.zeros((x.size()[0], x.size()[1], x.size()[2], 1),\n                               device=x.device,\n                               dtype=x.dtype)\n        x_padded = torch.cat([zero_pad, x], dim=-1)\n\n        x_padded = x_padded.view(x.size()[0],\n                                 x.size()[1],\n                                 x.size(3) + 1, x.size(2))\n        x = x_padded[:, :, 1:].view_as(x)[\n            :, :, :, : x.size(-1) // 2 + 1\n        ]  # only keep the positions from 0 to time2\n        return x\n\n    def forward(\n        self,\n        query: torch.Tensor,\n        key: torch.Tensor,\n        value: torch.Tensor,\n        mask: torch.Tensor = torch.ones((0, 0, 0), dtype=torch.bool),\n        pos_emb: torch.Tensor = torch.empty(0),\n        cache: torch.Tensor = torch.zeros((0, 0, 0, 0))\n    ) -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"Compute 'Scaled Dot Product Attention' with rel. positional encoding.\n        Args:\n            query (torch.Tensor): Query tensor (#batch, time1, size).\n            key (torch.Tensor): Key tensor (#batch, time2, size).\n            value (torch.Tensor): Value tensor (#batch, time2, size).\n            mask (torch.Tensor): Mask tensor (#batch, 1, time2) or\n                (#batch, time1, time2), (0, 0, 0) means fake mask.\n            pos_emb (torch.Tensor): Positional embedding tensor\n                (#batch, time2, size).\n            cache (torch.Tensor): Cache tensor (1, head, cache_t, d_k * 2),\n                where `cache_t == chunk_size * num_decoding_left_chunks`\n                and `head * d_k == size`\n        Returns:\n            torch.Tensor: Output tensor (#batch, time1, d_model).\n            torch.Tensor: Cache tensor (1, head, cache_t + time1, d_k * 2)\n                where `cache_t == chunk_size * num_decoding_left_chunks`\n                and `head * d_k == size`\n        \"\"\"\n        q, k, v = self.forward_qkv(query, key, value)\n        q = q.transpose(1, 2)  # (batch, time1, head, d_k)\n\n        # NOTE(xcsong):\n        #   when export onnx model, for 1st chunk, we feed\n        #       cache(1, head, 0, d_k * 2) (16/-1, -1/-1, 16/0 mode)\n        #       or cache(1, head, real_cache_t, d_k * 2) (16/4 mode).\n        #       In all modes, `if cache.size(0) > 0` will alwayse be `True`\n        #       and we will always do splitting and\n        #       concatnation(this will simplify onnx export). Note that\n        #       it's OK to concat & split zero-shaped tensors(see code below).\n        #   when export jit  model, for 1st chunk, we always feed\n        #       cache(0, 0, 0, 0) since jit supports dynamic if-branch.\n        # >>> a = torch.ones((1, 2, 0, 4))\n        # >>> b = torch.ones((1, 2, 3, 4))\n        # >>> c = torch.cat((a, b), dim=2)\n        # >>> torch.equal(b, c)        # True\n        # >>> d = torch.split(a, 2, dim=-1)\n        # >>> torch.equal(d[0], d[1])  # True\n        if cache.size(0) > 0:\n            key_cache, value_cache = torch.split(cache,\n                                                 cache.size(-1) // 2,\n                                                 dim=-1)\n            k = torch.cat([key_cache, k], dim=2)\n            v = torch.cat([value_cache, v], dim=2)\n        # NOTE(xcsong): We do cache slicing in encoder.forward_chunk, since it's\n        #   non-trivial to calculate `next_cache_start` here.\n        new_cache = torch.cat((k, v), dim=-1)\n\n        n_batch_pos = pos_emb.size(0)\n        p = self.linear_pos(pos_emb).view(n_batch_pos, -1, self.h, self.d_k)\n        p = p.transpose(1, 2)  # (batch, head, time1, d_k)\n\n        # (batch, head, time1, d_k)\n        q_with_bias_u = (q + self.pos_bias_u).transpose(1, 2)\n        # (batch, head, time1, d_k)\n        q_with_bias_v = (q + self.pos_bias_v).transpose(1, 2)\n\n        # compute attention score\n        # first compute matrix a and matrix c\n        # as described in https://arxiv.org/abs/1901.02860 Section 3.3\n        # (batch, head, time1, time2)\n        matrix_ac = torch.matmul(q_with_bias_u, k.transpose(-2, -1))\n\n        # compute matrix b and matrix d\n        # (batch, head, time1, time2)\n        matrix_bd = torch.matmul(q_with_bias_v, p.transpose(-2, -1))\n        # NOTE(Xiang Lyu): Keep rel_shift since espnet rel_pos_emb is used\n        if matrix_ac.shape != matrix_bd.shape:\n            matrix_bd = self.rel_shift(matrix_bd)\n\n        scores = (matrix_ac + matrix_bd) / math.sqrt(\n            self.d_k)  # (batch, head, time1, time2)\n\n        return self.forward_attention(v, scores, mask), new_cache\n"
  },
  {
    "path": "cosyvoice/transformer/convolution.py",
    "content": "# Copyright (c) 2020 Mobvoi Inc. (authors: Binbin Zhang, Di Wu)\n#               2024 Alibaba Inc (Xiang Lyu)\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# Modified from ESPnet(https://github.com/espnet/espnet)\n\"\"\"ConvolutionModule definition.\"\"\"\n\nfrom typing import Tuple\n\nimport torch\nfrom torch import nn\nimport torch.nn.functional as F\n\n\nclass ConvolutionModule(nn.Module):\n    \"\"\"ConvolutionModule in Conformer model.\"\"\"\n\n    def __init__(self,\n                 channels: int,\n                 kernel_size: int = 15,\n                 activation: nn.Module = nn.ReLU(),\n                 norm: str = \"batch_norm\",\n                 causal: bool = False,\n                 bias: bool = True):\n        \"\"\"Construct an ConvolutionModule object.\n        Args:\n            channels (int): The number of channels of conv layers.\n            kernel_size (int): Kernel size of conv layers.\n            causal (int): Whether use causal convolution or not\n        \"\"\"\n        super().__init__()\n\n        self.pointwise_conv1 = nn.Conv1d(\n            channels,\n            2 * channels,\n            kernel_size=1,\n            stride=1,\n            padding=0,\n            bias=bias,\n        )\n        # self.lorder is used to distinguish if it's a causal convolution,\n        # if self.lorder > 0: it's a causal convolution, the input will be\n        #    padded with self.lorder frames on the left in forward.\n        # else: it's a symmetrical convolution\n        if causal:\n            padding = 0\n            self.lorder = kernel_size - 1\n        else:\n            # kernel_size should be an odd number for none causal convolution\n            assert (kernel_size - 1) % 2 == 0\n            padding = (kernel_size - 1) // 2\n            self.lorder = 0\n        self.depthwise_conv = nn.Conv1d(\n            channels,\n            channels,\n            kernel_size,\n            stride=1,\n            padding=padding,\n            groups=channels,\n            bias=bias,\n        )\n\n        assert norm in ['batch_norm', 'layer_norm']\n        if norm == \"batch_norm\":\n            self.use_layer_norm = False\n            self.norm = nn.BatchNorm1d(channels)\n        else:\n            self.use_layer_norm = True\n            self.norm = nn.LayerNorm(channels)\n\n        self.pointwise_conv2 = nn.Conv1d(\n            channels,\n            channels,\n            kernel_size=1,\n            stride=1,\n            padding=0,\n            bias=bias,\n        )\n        self.activation = activation\n\n    def forward(\n        self,\n        x: torch.Tensor,\n        mask_pad: torch.Tensor = torch.ones((0, 0, 0), dtype=torch.bool),\n        cache: torch.Tensor = torch.zeros((0, 0, 0)),\n    ) -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"Compute convolution module.\n        Args:\n            x (torch.Tensor): Input tensor (#batch, time, channels).\n            mask_pad (torch.Tensor): used for batch padding (#batch, 1, time),\n                (0, 0, 0) means fake mask.\n            cache (torch.Tensor): left context cache, it is only\n                used in causal convolution (#batch, channels, cache_t),\n                (0, 0, 0) meas fake cache.\n        Returns:\n            torch.Tensor: Output tensor (#batch, time, channels).\n        \"\"\"\n        # exchange the temporal dimension and the feature dimension\n        x = x.transpose(1, 2)  # (#batch, channels, time)\n\n        # mask batch padding\n        if mask_pad.size(2) > 0:  # time > 0\n            x.masked_fill_(~mask_pad, 0.0)\n\n        if self.lorder > 0:\n            if cache.size(2) == 0:  # cache_t == 0\n                x = nn.functional.pad(x, (self.lorder, 0), 'constant', 0.0)\n            else:\n                assert cache.size(0) == x.size(0)  # equal batch\n                assert cache.size(1) == x.size(1)  # equal channel\n                x = torch.cat((cache, x), dim=2)\n            assert (x.size(2) > self.lorder)\n            new_cache = x[:, :, -self.lorder:]\n        else:\n            # It's better we just return None if no cache is required,\n            # However, for JIT export, here we just fake one tensor instead of\n            # None.\n            new_cache = torch.zeros((0, 0, 0), dtype=x.dtype, device=x.device)\n\n        # GLU mechanism\n        x = self.pointwise_conv1(x)  # (batch, 2*channel, dim)\n        x = nn.functional.glu(x, dim=1)  # (batch, channel, dim)\n\n        # 1D Depthwise Conv\n        x = self.depthwise_conv(x)\n        if self.use_layer_norm:\n            x = x.transpose(1, 2)\n        x = self.activation(self.norm(x))\n        if self.use_layer_norm:\n            x = x.transpose(1, 2)\n        x = self.pointwise_conv2(x)\n        # mask batch padding\n        if mask_pad.size(2) > 0:  # time > 0\n            x.masked_fill_(~mask_pad, 0.0)\n\n        return x.transpose(1, 2), new_cache\n\n\n# NOTE(Xiang Lyu) causal conv module used in convolution-based vocoder\nclass CausalConv1d(torch.nn.Conv1d):\n    def __init__(\n        self,\n        in_channels: int,\n        out_channels: int,\n        kernel_size: int,\n        stride: int = 1,\n        dilation: int = 1,\n        groups: int = 1,\n        bias: bool = True,\n        padding_mode: str = 'zeros',\n        causal_type: str = 'left',\n        device=None,\n        dtype=None\n    ) -> None:\n        super(CausalConv1d, self).__init__(in_channels, out_channels,\n                                           kernel_size, stride=1,\n                                           padding=0, dilation=dilation,\n                                           groups=groups, bias=bias,\n                                           padding_mode=padding_mode,\n                                           device=device, dtype=dtype)\n        assert stride == 1\n        self.causal_padding = int((kernel_size * dilation - dilation) / 2) * 2 + (kernel_size + 1) % 2\n        assert causal_type in ['left', 'right']\n        self.causal_type = causal_type\n\n    def forward(self, x: torch.Tensor, cache: torch.Tensor = torch.zeros(0, 0, 0)) -> Tuple[torch.Tensor]:\n        input_timestep = x.shape[2]\n        if cache.size(2) == 0:\n            cache = torch.zeros(x.shape[0], x.shape[1], self.causal_padding).to(x)\n        assert cache.size(2) == self.causal_padding\n        if self.causal_type == 'left':\n            x = torch.concat([cache, x], dim=2)\n        else:\n            x = torch.concat([x, cache], dim=2)\n        x = super(CausalConv1d, self).forward(x)\n        assert x.shape[2] == input_timestep\n        return x\n\n\nclass CausalConv1dDownSample(torch.nn.Conv1d):\n    def __init__(\n        self,\n        in_channels: int,\n        out_channels: int,\n        kernel_size: int,\n        stride: int = 1,\n        dilation: int = 1,\n        groups: int = 1,\n        bias: bool = True,\n        padding_mode: str = 'zeros',\n        device=None,\n        dtype=None\n    ) -> None:\n        super(CausalConv1dDownSample, self).__init__(in_channels, out_channels,\n                                                     kernel_size, stride,\n                                                     padding=0, dilation=dilation,\n                                                     groups=groups, bias=bias,\n                                                     padding_mode=padding_mode,\n                                                     device=device, dtype=dtype)\n        assert stride != 1 and dilation == 1\n        assert kernel_size % stride == 0\n        self.causal_padding = stride - 1\n\n    def forward(self, x: torch.Tensor, cache: torch.Tensor = torch.zeros(0, 0, 0)) -> Tuple[torch.Tensor, torch.Tensor]:\n        if cache.size(2) == 0:\n            x = F.pad(x, (self.causal_padding, 0), value=0.0)\n        else:\n            assert cache.size(2) == self.causal_padding\n            x = torch.concat([cache, x], dim=2)\n        x = super(CausalConv1dDownSample, self).forward(x)\n        return x\n\n\nclass CausalConv1dUpsample(torch.nn.Conv1d):\n    def __init__(\n        self,\n        in_channels: int,\n        out_channels: int,\n        kernel_size: int,\n        stride: int = 1,\n        dilation: int = 1,\n        groups: int = 1,\n        bias: bool = True,\n        padding_mode: str = 'zeros',\n        device=None,\n        dtype=None\n    ) -> None:\n        super(CausalConv1dUpsample, self).__init__(in_channels, out_channels,\n                                                   kernel_size, 1,\n                                                   padding=0, dilation=dilation,\n                                                   groups=groups, bias=bias,\n                                                   padding_mode=padding_mode,\n                                                   device=device, dtype=dtype)\n        assert dilation == 1\n        self.causal_padding = kernel_size - 1\n        self.upsample = torch.nn.Upsample(scale_factor=stride, mode='nearest')\n\n    def forward(self, x: torch.Tensor, cache: torch.Tensor = torch.zeros(0, 0, 0)) -> Tuple[torch.Tensor, torch.Tensor]:\n        x = self.upsample(x)\n        input_timestep = x.shape[2]\n        if cache.size(2) == 0:\n            x = F.pad(x, (self.causal_padding, 0), value=0.0)\n        else:\n            assert cache.size(2) == self.causal_padding\n            x = torch.concat([cache, x], dim=2)\n        x = super(CausalConv1dUpsample, self).forward(x)\n        assert input_timestep == x.shape[2]\n        return x\n"
  },
  {
    "path": "cosyvoice/transformer/decoder.py",
    "content": "# Copyright (c) 2021 Mobvoi Inc. (authors: Binbin Zhang, Di Wu)\n#               2024 Alibaba Inc (Xiang Lyu)\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# Modified from ESPnet(https://github.com/espnet/espnet)\n\"\"\"Decoder definition.\"\"\"\nfrom typing import Tuple, List, Optional\n\nimport torch\nimport torch.utils.checkpoint as ckpt\nimport logging\n\nfrom cosyvoice.transformer.decoder_layer import DecoderLayer\nfrom cosyvoice.transformer.positionwise_feed_forward import PositionwiseFeedForward\nfrom cosyvoice.utils.class_utils import (\n    COSYVOICE_EMB_CLASSES,\n    COSYVOICE_ATTENTION_CLASSES,\n    COSYVOICE_ACTIVATION_CLASSES,\n)\nfrom cosyvoice.utils.mask import (subsequent_mask, make_pad_mask)\n\n\nclass TransformerDecoder(torch.nn.Module):\n    \"\"\"Base class of Transfomer decoder module.\n    Args:\n        vocab_size: output dim\n        encoder_output_size: dimension of attention\n        attention_heads: the number of heads of multi head attention\n        linear_units: the hidden units number of position-wise feedforward\n        num_blocks: the number of decoder blocks\n        dropout_rate: dropout rate\n        self_attention_dropout_rate: dropout rate for attention\n        input_layer: input layer type\n        use_output_layer: whether to use output layer\n        pos_enc_class: PositionalEncoding or ScaledPositionalEncoding\n        normalize_before:\n            True: use layer_norm before each sub-block of a layer.\n            False: use layer_norm after each sub-block of a layer.\n        src_attention: if false, encoder-decoder cross attention is not\n                       applied, such as CIF model\n        key_bias: whether use bias in attention.linear_k, False for whisper models.\n        gradient_checkpointing: rerunning a forward-pass segment for each\n            checkpointed segment during backward.\n        tie_word_embedding: Tie or clone module weights depending of whether we are\n            using TorchScript or not\n    \"\"\"\n\n    def __init__(\n        self,\n        vocab_size: int,\n        encoder_output_size: int,\n        attention_heads: int = 4,\n        linear_units: int = 2048,\n        num_blocks: int = 6,\n        dropout_rate: float = 0.1,\n        positional_dropout_rate: float = 0.1,\n        self_attention_dropout_rate: float = 0.0,\n        src_attention_dropout_rate: float = 0.0,\n        input_layer: str = \"embed\",\n        use_output_layer: bool = True,\n        normalize_before: bool = True,\n        src_attention: bool = True,\n        key_bias: bool = True,\n        activation_type: str = \"relu\",\n        gradient_checkpointing: bool = False,\n        tie_word_embedding: bool = False,\n    ):\n        super().__init__()\n        attention_dim = encoder_output_size\n        activation = COSYVOICE_ACTIVATION_CLASSES[activation_type]()\n\n        self.embed = torch.nn.Sequential(\n            torch.nn.Identity() if input_layer == \"no_pos\" else\n            torch.nn.Embedding(vocab_size, attention_dim),\n            COSYVOICE_EMB_CLASSES[input_layer](attention_dim,\n                                               positional_dropout_rate),\n        )\n\n        self.normalize_before = normalize_before\n        self.after_norm = torch.nn.LayerNorm(attention_dim, eps=1e-5)\n        self.use_output_layer = use_output_layer\n        if use_output_layer:\n            self.output_layer = torch.nn.Linear(attention_dim, vocab_size)\n        else:\n            self.output_layer = torch.nn.Identity()\n        self.num_blocks = num_blocks\n        self.decoders = torch.nn.ModuleList([\n            DecoderLayer(\n                attention_dim,\n                COSYVOICE_ATTENTION_CLASSES[\"selfattn\"](\n                    attention_heads, attention_dim,\n                    self_attention_dropout_rate, key_bias),\n                COSYVOICE_ATTENTION_CLASSES[\"selfattn\"](\n                    attention_heads, attention_dim, src_attention_dropout_rate,\n                    key_bias) if src_attention else None,\n                PositionwiseFeedForward(attention_dim, linear_units,\n                                        dropout_rate, activation),\n                dropout_rate,\n                normalize_before,\n            ) for _ in range(self.num_blocks)\n        ])\n\n        self.gradient_checkpointing = gradient_checkpointing\n        self.tie_word_embedding = tie_word_embedding\n\n    def forward(\n        self,\n        memory: torch.Tensor,\n        memory_mask: torch.Tensor,\n        ys_in_pad: torch.Tensor,\n        ys_in_lens: torch.Tensor,\n        r_ys_in_pad: torch.Tensor = torch.empty(0),\n        reverse_weight: float = 0.0,\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Forward decoder.\n        Args:\n            memory: encoded memory, float32  (batch, maxlen_in, feat)\n            memory_mask: encoder memory mask, (batch, 1, maxlen_in)\n            ys_in_pad: padded input token ids, int64 (batch, maxlen_out)\n            ys_in_lens: input lengths of this batch (batch)\n            r_ys_in_pad: not used in transformer decoder, in order to unify api\n                with bidirectional decoder\n            reverse_weight: not used in transformer decoder, in order to unify\n                api with bidirectional decode\n        Returns:\n            (tuple): tuple containing:\n                x: decoded token score before softmax (batch, maxlen_out,\n                    vocab_size) if use_output_layer is True,\n                torch.tensor(0.0), in order to unify api with bidirectional decoder\n                olens: (batch, )\n        NOTE(xcsong):\n            We pass the `__call__` method of the modules instead of `forward` to the\n            checkpointing API because `__call__` attaches all the hooks of the module.\n            https://discuss.pytorch.org/t/any-different-between-model-input-and-model-forward-input/3690/2\n        \"\"\"\n        tgt = ys_in_pad\n        maxlen = tgt.size(1)\n        # tgt_mask: (B, 1, L)\n        tgt_mask = ~make_pad_mask(ys_in_lens, maxlen).unsqueeze(1)\n        tgt_mask = tgt_mask.to(tgt.device)\n        # m: (1, L, L)\n        m = subsequent_mask(tgt_mask.size(-1),\n                            device=tgt_mask.device).unsqueeze(0)\n        # tgt_mask: (B, L, L)\n        tgt_mask = tgt_mask & m\n        x, _ = self.embed(tgt)\n        if self.gradient_checkpointing and self.training:\n            x = self.forward_layers_checkpointed(x, tgt_mask, memory,\n                                                 memory_mask)\n        else:\n            x = self.forward_layers(x, tgt_mask, memory, memory_mask)\n        if self.normalize_before:\n            x = self.after_norm(x)\n        if self.use_output_layer:\n            x = self.output_layer(x)\n        olens = tgt_mask.sum(1)\n        return x, torch.tensor(0.0), olens\n\n    def forward_layers(self, x: torch.Tensor, tgt_mask: torch.Tensor,\n                       memory: torch.Tensor,\n                       memory_mask: torch.Tensor) -> torch.Tensor:\n        for layer in self.decoders:\n            x, tgt_mask, memory, memory_mask = layer(x, tgt_mask, memory,\n                                                     memory_mask)\n        return x\n\n    @torch.jit.unused\n    def forward_layers_checkpointed(self, x: torch.Tensor,\n                                    tgt_mask: torch.Tensor,\n                                    memory: torch.Tensor,\n                                    memory_mask: torch.Tensor) -> torch.Tensor:\n        for layer in self.decoders:\n            x, tgt_mask, memory, memory_mask = ckpt.checkpoint(\n                layer.__call__, x, tgt_mask, memory, memory_mask)\n        return x\n\n    def forward_one_step(\n        self,\n        memory: torch.Tensor,\n        memory_mask: torch.Tensor,\n        tgt: torch.Tensor,\n        tgt_mask: torch.Tensor,\n        cache: Optional[List[torch.Tensor]] = None,\n    ) -> Tuple[torch.Tensor, List[torch.Tensor]]:\n        \"\"\"Forward one step.\n            This is only used for decoding.\n        Args:\n            memory: encoded memory, float32  (batch, maxlen_in, feat)\n            memory_mask: encoded memory mask, (batch, 1, maxlen_in)\n            tgt: input token ids, int64 (batch, maxlen_out)\n            tgt_mask: input token mask,  (batch, maxlen_out)\n                      dtype=torch.uint8 in PyTorch 1.2-\n                      dtype=torch.bool in PyTorch 1.2+ (include 1.2)\n            cache: cached output list of (batch, max_time_out-1, size)\n        Returns:\n            y, cache: NN output value and cache per `self.decoders`.\n            y.shape` is (batch, maxlen_out, token)\n        \"\"\"\n        x, _ = self.embed(tgt)\n        new_cache = []\n        for i, decoder in enumerate(self.decoders):\n            if cache is None:\n                c = None\n            else:\n                c = cache[i]\n            x, tgt_mask, memory, memory_mask = decoder(x,\n                                                       tgt_mask,\n                                                       memory,\n                                                       memory_mask,\n                                                       cache=c)\n            new_cache.append(x)\n        if self.normalize_before:\n            y = self.after_norm(x[:, -1])\n        else:\n            y = x[:, -1]\n        if self.use_output_layer:\n            y = torch.log_softmax(self.output_layer(y), dim=-1)\n        return y, new_cache\n\n    def tie_or_clone_weights(self, jit_mode: bool = True):\n        \"\"\"Tie or clone module weights (between word_emb and output_layer)\n            depending of whether we are using TorchScript or not\"\"\"\n        if not self.use_output_layer:\n            return\n        if jit_mode:\n            logging.info(\"clone emb.weight to output.weight\")\n            self.output_layer.weight = torch.nn.Parameter(\n                self.embed[0].weight.clone())\n        else:\n            logging.info(\"tie emb.weight with output.weight\")\n            self.output_layer.weight = self.embed[0].weight\n\n        if getattr(self.output_layer, \"bias\", None) is not None:\n            self.output_layer.bias.data = torch.nn.functional.pad(\n                self.output_layer.bias.data,\n                (\n                    0,\n                    self.output_layer.weight.shape[0] -\n                    self.output_layer.bias.shape[0],\n                ),\n                \"constant\",\n                0,\n            )\n\n\nclass BiTransformerDecoder(torch.nn.Module):\n    \"\"\"Base class of Transfomer decoder module.\n    Args:\n        vocab_size: output dim\n        encoder_output_size: dimension of attention\n        attention_heads: the number of heads of multi head attention\n        linear_units: the hidden units number of position-wise feedforward\n        num_blocks: the number of decoder blocks\n        r_num_blocks: the number of right to left decoder blocks\n        dropout_rate: dropout rate\n        self_attention_dropout_rate: dropout rate for attention\n        input_layer: input layer type\n        use_output_layer: whether to use output layer\n        pos_enc_class: PositionalEncoding or ScaledPositionalEncoding\n        normalize_before:\n            True: use layer_norm before each sub-block of a layer.\n            False: use layer_norm after each sub-block of a layer.\n        key_bias: whether use bias in attention.linear_k, False for whisper models.\n    \"\"\"\n\n    def __init__(\n        self,\n        vocab_size: int,\n        encoder_output_size: int,\n        attention_heads: int = 4,\n        linear_units: int = 2048,\n        num_blocks: int = 6,\n        r_num_blocks: int = 0,\n        dropout_rate: float = 0.1,\n        positional_dropout_rate: float = 0.1,\n        self_attention_dropout_rate: float = 0.0,\n        src_attention_dropout_rate: float = 0.0,\n        input_layer: str = \"embed\",\n        use_output_layer: bool = True,\n        normalize_before: bool = True,\n        key_bias: bool = True,\n        gradient_checkpointing: bool = False,\n        tie_word_embedding: bool = False,\n    ):\n\n        super().__init__()\n        self.tie_word_embedding = tie_word_embedding\n        self.left_decoder = TransformerDecoder(\n            vocab_size,\n            encoder_output_size,\n            attention_heads,\n            linear_units,\n            num_blocks,\n            dropout_rate,\n            positional_dropout_rate,\n            self_attention_dropout_rate,\n            src_attention_dropout_rate,\n            input_layer,\n            use_output_layer,\n            normalize_before,\n            key_bias=key_bias,\n            gradient_checkpointing=gradient_checkpointing,\n            tie_word_embedding=tie_word_embedding)\n\n        self.right_decoder = TransformerDecoder(\n            vocab_size,\n            encoder_output_size,\n            attention_heads,\n            linear_units,\n            r_num_blocks,\n            dropout_rate,\n            positional_dropout_rate,\n            self_attention_dropout_rate,\n            src_attention_dropout_rate,\n            input_layer,\n            use_output_layer,\n            normalize_before,\n            key_bias=key_bias,\n            gradient_checkpointing=gradient_checkpointing,\n            tie_word_embedding=tie_word_embedding)\n\n    def forward(\n        self,\n        memory: torch.Tensor,\n        memory_mask: torch.Tensor,\n        ys_in_pad: torch.Tensor,\n        ys_in_lens: torch.Tensor,\n        r_ys_in_pad: torch.Tensor,\n        reverse_weight: float = 0.0,\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Forward decoder.\n        Args:\n            memory: encoded memory, float32  (batch, maxlen_in, feat)\n            memory_mask: encoder memory mask, (batch, 1, maxlen_in)\n            ys_in_pad: padded input token ids, int64 (batch, maxlen_out)\n            ys_in_lens: input lengths of this batch (batch)\n            r_ys_in_pad: padded input token ids, int64 (batch, maxlen_out),\n                used for right to left decoder\n            reverse_weight: used for right to left decoder\n        Returns:\n            (tuple): tuple containing:\n                x: decoded token score before softmax (batch, maxlen_out,\n                    vocab_size) if use_output_layer is True,\n                r_x: x: decoded token score (right to left decoder)\n                    before softmax (batch, maxlen_out, vocab_size)\n                    if use_output_layer is True,\n                olens: (batch, )\n        \"\"\"\n        l_x, _, olens = self.left_decoder(memory, memory_mask, ys_in_pad,\n                                          ys_in_lens)\n        r_x = torch.tensor(0.0)\n        if reverse_weight > 0.0:\n            r_x, _, olens = self.right_decoder(memory, memory_mask,\n                                               r_ys_in_pad, ys_in_lens)\n        return l_x, r_x, olens\n\n    def forward_one_step(\n        self,\n        memory: torch.Tensor,\n        memory_mask: torch.Tensor,\n        tgt: torch.Tensor,\n        tgt_mask: torch.Tensor,\n        cache: Optional[List[torch.Tensor]] = None,\n    ) -> Tuple[torch.Tensor, List[torch.Tensor]]:\n        \"\"\"Forward one step.\n            This is only used for decoding.\n        Args:\n            memory: encoded memory, float32  (batch, maxlen_in, feat)\n            memory_mask: encoded memory mask, (batch, 1, maxlen_in)\n            tgt: input token ids, int64 (batch, maxlen_out)\n            tgt_mask: input token mask,  (batch, maxlen_out)\n                      dtype=torch.uint8 in PyTorch 1.2-\n                      dtype=torch.bool in PyTorch 1.2+ (include 1.2)\n            cache: cached output list of (batch, max_time_out-1, size)\n        Returns:\n            y, cache: NN output value and cache per `self.decoders`.\n            y.shape` is (batch, maxlen_out, token)\n        \"\"\"\n        return self.left_decoder.forward_one_step(memory, memory_mask, tgt,\n                                                  tgt_mask, cache)\n\n    def tie_or_clone_weights(self, jit_mode: bool = True):\n        \"\"\"Tie or clone module weights (between word_emb and output_layer)\n            depending of whether we are using TorchScript or not\"\"\"\n        self.left_decoder.tie_or_clone_weights(jit_mode)\n        self.right_decoder.tie_or_clone_weights(jit_mode)\n"
  },
  {
    "path": "cosyvoice/transformer/decoder_layer.py",
    "content": "# Copyright (c) 2019 Shigeki Karita\n#               2020 Mobvoi Inc (Binbin Zhang)\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\"\"\"Decoder self-attention layer definition.\"\"\"\nfrom typing import Optional, Tuple\n\nimport torch\nfrom torch import nn\n\n\nclass DecoderLayer(nn.Module):\n    \"\"\"Single decoder layer module.\n\n    Args:\n        size (int): Input dimension.\n        self_attn (torch.nn.Module): Self-attention module instance.\n            `MultiHeadedAttention` instance can be used as the argument.\n        src_attn (torch.nn.Module): Inter-attention module instance.\n            `MultiHeadedAttention` instance can be used as the argument.\n            If `None` is passed, Inter-attention is not used, such as\n            CIF, GPT, and other decoder only model.\n        feed_forward (torch.nn.Module): Feed-forward module instance.\n            `PositionwiseFeedForward` instance can be used as the argument.\n        dropout_rate (float): Dropout rate.\n        normalize_before (bool):\n            True: use layer_norm before each sub-block.\n            False: to use layer_norm after each sub-block.\n    \"\"\"\n\n    def __init__(\n        self,\n        size: int,\n        self_attn: nn.Module,\n        src_attn: Optional[nn.Module],\n        feed_forward: nn.Module,\n        dropout_rate: float,\n        normalize_before: bool = True,\n    ):\n        \"\"\"Construct an DecoderLayer object.\"\"\"\n        super().__init__()\n        self.size = size\n        self.self_attn = self_attn\n        self.src_attn = src_attn\n        self.feed_forward = feed_forward\n        self.norm1 = nn.LayerNorm(size, eps=1e-5)\n        self.norm2 = nn.LayerNorm(size, eps=1e-5)\n        self.norm3 = nn.LayerNorm(size, eps=1e-5)\n        self.dropout = nn.Dropout(dropout_rate)\n        self.normalize_before = normalize_before\n\n    def forward(\n        self,\n        tgt: torch.Tensor,\n        tgt_mask: torch.Tensor,\n        memory: torch.Tensor,\n        memory_mask: torch.Tensor,\n        cache: Optional[torch.Tensor] = None\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Compute decoded features.\n\n        Args:\n            tgt (torch.Tensor): Input tensor (#batch, maxlen_out, size).\n            tgt_mask (torch.Tensor): Mask for input tensor\n                (#batch, maxlen_out).\n            memory (torch.Tensor): Encoded memory\n                (#batch, maxlen_in, size).\n            memory_mask (torch.Tensor): Encoded memory mask\n                (#batch, maxlen_in).\n            cache (torch.Tensor): cached tensors.\n                (#batch, maxlen_out - 1, size).\n\n        Returns:\n            torch.Tensor: Output tensor (#batch, maxlen_out, size).\n            torch.Tensor: Mask for output tensor (#batch, maxlen_out).\n            torch.Tensor: Encoded memory (#batch, maxlen_in, size).\n            torch.Tensor: Encoded memory mask (#batch, maxlen_in).\n\n        \"\"\"\n        residual = tgt\n        if self.normalize_before:\n            tgt = self.norm1(tgt)\n\n        if cache is None:\n            tgt_q = tgt\n            tgt_q_mask = tgt_mask\n        else:\n            # compute only the last frame query keeping dim: max_time_out -> 1\n            assert cache.shape == (\n                tgt.shape[0],\n                tgt.shape[1] - 1,\n                self.size,\n            ), \"{cache.shape} == {(tgt.shape[0], tgt.shape[1] - 1, self.size)}\"\n            tgt_q = tgt[:, -1:, :]\n            residual = residual[:, -1:, :]\n            tgt_q_mask = tgt_mask[:, -1:, :]\n\n        x = residual + self.dropout(\n            self.self_attn(tgt_q, tgt, tgt, tgt_q_mask)[0])\n        if not self.normalize_before:\n            x = self.norm1(x)\n\n        if self.src_attn is not None:\n            residual = x\n            if self.normalize_before:\n                x = self.norm2(x)\n            x = residual + self.dropout(\n                self.src_attn(x, memory, memory, memory_mask)[0])\n            if not self.normalize_before:\n                x = self.norm2(x)\n\n        residual = x\n        if self.normalize_before:\n            x = self.norm3(x)\n        x = residual + self.dropout(self.feed_forward(x))\n        if not self.normalize_before:\n            x = self.norm3(x)\n\n        if cache is not None:\n            x = torch.cat([cache, x], dim=1)\n\n        return x, tgt_mask, memory, memory_mask\n"
  },
  {
    "path": "cosyvoice/transformer/embedding.py",
    "content": "# Copyright (c) 2020 Mobvoi Inc. (authors: Binbin Zhang, Di Wu)\n#               2024 Alibaba Inc (Xiang Lyu)\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# Modified from ESPnet(https://github.com/espnet/espnet)\n\"\"\"Positonal Encoding Module.\"\"\"\n\nimport math\nfrom typing import Tuple, Union\n\nimport torch\nimport torch.nn.functional as F\nimport numpy as np\n\n\nclass PositionalEncoding(torch.nn.Module):\n    \"\"\"Positional encoding.\n\n    :param int d_model: embedding dim\n    :param float dropout_rate: dropout rate\n    :param int max_len: maximum input length\n\n    PE(pos, 2i)   = sin(pos/(10000^(2i/dmodel)))\n    PE(pos, 2i+1) = cos(pos/(10000^(2i/dmodel)))\n    \"\"\"\n\n    def __init__(self,\n                 d_model: int,\n                 dropout_rate: float,\n                 max_len: int = 5000,\n                 reverse: bool = False):\n        \"\"\"Construct an PositionalEncoding object.\"\"\"\n        super().__init__()\n        self.d_model = d_model\n        self.xscale = math.sqrt(self.d_model)\n        self.dropout = torch.nn.Dropout(p=dropout_rate)\n        self.max_len = max_len\n\n        self.pe = torch.zeros(self.max_len, self.d_model)\n        position = torch.arange(0, self.max_len,\n                                dtype=torch.float32).unsqueeze(1)\n        div_term = torch.exp(\n            torch.arange(0, self.d_model, 2, dtype=torch.float32) *\n            -(math.log(10000.0) / self.d_model))\n        self.pe[:, 0::2] = torch.sin(position * div_term)\n        self.pe[:, 1::2] = torch.cos(position * div_term)\n        self.pe = self.pe.unsqueeze(0)\n\n    def forward(self,\n                x: torch.Tensor,\n                offset: Union[int, torch.Tensor] = 0) \\\n            -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"Add positional encoding.\n\n        Args:\n            x (torch.Tensor): Input. Its shape is (batch, time, ...)\n            offset (int, torch.tensor): position offset\n\n        Returns:\n            torch.Tensor: Encoded tensor. Its shape is (batch, time, ...)\n            torch.Tensor: for compatibility to RelPositionalEncoding\n        \"\"\"\n\n        self.pe = self.pe.to(x.device)\n        pos_emb = self.position_encoding(offset, x.size(1), False)\n        x = x * self.xscale + pos_emb\n        return self.dropout(x), self.dropout(pos_emb)\n\n    def position_encoding(self,\n                          offset: Union[int, torch.Tensor],\n                          size: int,\n                          apply_dropout: bool = True) -> torch.Tensor:\n        \"\"\" For getting encoding in a streaming fashion\n\n        Attention!!!!!\n        we apply dropout only once at the whole utterance level in a none\n        streaming way, but will call this function several times with\n        increasing input size in a streaming scenario, so the dropout will\n        be applied several times.\n\n        Args:\n            offset (int or torch.tensor): start offset\n            size (int): required size of position encoding\n\n        Returns:\n            torch.Tensor: Corresponding encoding\n        \"\"\"\n        # How to subscript a Union type:\n        #   https://github.com/pytorch/pytorch/issues/69434\n        if isinstance(offset, int):\n            assert offset + size <= self.max_len\n            pos_emb = self.pe[:, offset:offset + size]\n        elif isinstance(offset, torch.Tensor) and offset.dim() == 0:  # scalar\n            assert offset + size <= self.max_len\n            pos_emb = self.pe[:, offset:offset + size]\n        else:  # for batched streaming decoding on GPU\n            assert torch.max(offset) + size <= self.max_len\n            index = offset.unsqueeze(1) + \\\n                torch.arange(0, size).to(offset.device)  # B X T\n            flag = index > 0\n            # remove negative offset\n            index = index * flag\n            pos_emb = F.embedding(index, self.pe[0])  # B X T X d_model\n\n        if apply_dropout:\n            pos_emb = self.dropout(pos_emb)\n        return pos_emb\n\n\nclass RelPositionalEncoding(PositionalEncoding):\n    \"\"\"Relative positional encoding module.\n    See : Appendix B in https://arxiv.org/abs/1901.02860\n    Args:\n        d_model (int): Embedding dimension.\n        dropout_rate (float): Dropout rate.\n        max_len (int): Maximum input length.\n    \"\"\"\n\n    def __init__(self, d_model: int, dropout_rate: float, max_len: int = 5000):\n        \"\"\"Initialize class.\"\"\"\n        super().__init__(d_model, dropout_rate, max_len, reverse=True)\n\n    def forward(self,\n                x: torch.Tensor,\n                offset: Union[int, torch.Tensor] = 0) \\\n            -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"Compute positional encoding.\n        Args:\n            x (torch.Tensor): Input tensor (batch, time, `*`).\n        Returns:\n            torch.Tensor: Encoded tensor (batch, time, `*`).\n            torch.Tensor: Positional embedding tensor (1, time, `*`).\n        \"\"\"\n        self.pe = self.pe.to(x.device)\n        x = x * self.xscale\n        pos_emb = self.position_encoding(offset, x.size(1), False)\n        return self.dropout(x), self.dropout(pos_emb)\n\n\nclass WhisperPositionalEncoding(PositionalEncoding):\n    \"\"\" Sinusoids position encoding used in openai-whisper.encoder\n    \"\"\"\n\n    def __init__(self, d_model: int, dropout_rate: float, max_len: int = 1500):\n        super().__init__(d_model, dropout_rate, max_len)\n        self.xscale = 1.0\n        log_timescale_increment = np.log(10000) / (d_model // 2 - 1)\n        inv_timescales = torch.exp(-log_timescale_increment *\n                                   torch.arange(d_model // 2))\n        scaled_time = torch.arange(max_len)[:, np.newaxis] * \\\n            inv_timescales[np.newaxis, :]\n        pe = torch.cat([torch.sin(scaled_time), torch.cos(scaled_time)], dim=1)\n        delattr(self, \"pe\")\n        self.register_buffer(\"pe\", pe.unsqueeze(0))\n\n\nclass LearnablePositionalEncoding(PositionalEncoding):\n    \"\"\" Learnable position encoding used in openai-whisper.decoder\n    \"\"\"\n\n    def __init__(self, d_model: int, dropout_rate: float, max_len: int = 448):\n        super().__init__(d_model, dropout_rate, max_len)\n        # NOTE(xcsong): overwrite self.pe & self.xscale\n        self.pe = torch.nn.Parameter(torch.empty(1, max_len, d_model))\n        self.xscale = 1.0\n\n\nclass NoPositionalEncoding(torch.nn.Module):\n    \"\"\" No position encoding\n    \"\"\"\n\n    def __init__(self, d_model: int, dropout_rate: float):\n        super().__init__()\n        self.d_model = d_model\n        self.dropout = torch.nn.Dropout(p=dropout_rate)\n\n    def forward(self,\n                x: torch.Tensor,\n                offset: Union[int, torch.Tensor] = 0) \\\n            -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\" Just return zero vector for interface compatibility\n        \"\"\"\n        pos_emb = torch.zeros(1, x.size(1), self.d_model).to(x.device)\n        return self.dropout(x), pos_emb\n\n    def position_encoding(self, offset: Union[int, torch.Tensor],\n                          size: int) -> torch.Tensor:\n        return torch.zeros(1, size, self.d_model)\n\n\nclass EspnetRelPositionalEncoding(torch.nn.Module):\n    \"\"\"Relative positional encoding module (new implementation).\n\n    Details can be found in https://github.com/espnet/espnet/pull/2816.\n\n    See : Appendix B in https://arxiv.org/abs/1901.02860\n\n    Args:\n        d_model (int): Embedding dimension.\n        dropout_rate (float): Dropout rate.\n        max_len (int): Maximum input length.\n\n    \"\"\"\n\n    def __init__(self, d_model: int, dropout_rate: float, max_len: int = 5000):\n        \"\"\"Construct an PositionalEncoding object.\"\"\"\n        super(EspnetRelPositionalEncoding, self).__init__()\n        self.d_model = d_model\n        self.xscale = math.sqrt(self.d_model)\n        self.dropout = torch.nn.Dropout(p=dropout_rate)\n        self.pe = None\n        self.extend_pe(torch.tensor(0.0).expand(1, max_len))\n\n    def extend_pe(self, x: torch.Tensor):\n        \"\"\"Reset the positional encodings.\"\"\"\n        if self.pe is not None:\n            # self.pe contains both positive and negative parts\n            # the length of self.pe is 2 * input_len - 1\n            if self.pe.size(1) >= x.size(1) * 2 - 1:\n                if self.pe.dtype != x.dtype or self.pe.device != x.device:\n                    self.pe = self.pe.to(dtype=x.dtype, device=x.device)\n                return\n        # Suppose `i` means to the position of query vecotr and `j` means the\n        # position of key vector. We use position relative positions when keys\n        # are to the left (i>j) and negative relative positions otherwise (i<j).\n        pe_positive = torch.zeros(x.size(1), self.d_model)\n        pe_negative = torch.zeros(x.size(1), self.d_model)\n        position = torch.arange(0, x.size(1), dtype=torch.float32).unsqueeze(1)\n        div_term = torch.exp(\n            torch.arange(0, self.d_model, 2, dtype=torch.float32)\n            * -(math.log(10000.0) / self.d_model)\n        )\n        pe_positive[:, 0::2] = torch.sin(position * div_term)\n        pe_positive[:, 1::2] = torch.cos(position * div_term)\n        pe_negative[:, 0::2] = torch.sin(-1 * position * div_term)\n        pe_negative[:, 1::2] = torch.cos(-1 * position * div_term)\n\n        # Reserve the order of positive indices and concat both positive and\n        # negative indices. This is used to support the shifting trick\n        # as in https://arxiv.org/abs/1901.02860\n        pe_positive = torch.flip(pe_positive, [0]).unsqueeze(0)\n        pe_negative = pe_negative[1:].unsqueeze(0)\n        pe = torch.cat([pe_positive, pe_negative], dim=1)\n        self.pe = pe.to(device=x.device, dtype=x.dtype)\n\n    def forward(self, x: torch.Tensor, offset: Union[int, torch.Tensor] = 0) \\\n            -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"Add positional encoding.\n\n        Args:\n            x (torch.Tensor): Input tensor (batch, time, `*`).\n\n        Returns:\n            torch.Tensor: Encoded tensor (batch, time, `*`).\n\n        \"\"\"\n        self.extend_pe(x)\n        x = x * self.xscale\n        pos_emb = self.position_encoding(size=x.size(1), offset=offset)\n        return self.dropout(x), self.dropout(pos_emb)\n\n    def position_encoding(self,\n                          offset: Union[int, torch.Tensor],\n                          size: int) -> torch.Tensor:\n        \"\"\" For getting encoding in a streaming fashion\n\n        Attention!!!!!\n        we apply dropout only once at the whole utterance level in a none\n        streaming way, but will call this function several times with\n        increasing input size in a streaming scenario, so the dropout will\n        be applied several times.\n\n        Args:\n            offset (int or torch.tensor): start offset\n            size (int): required size of position encoding\n\n        Returns:\n            torch.Tensor: Corresponding encoding\n        \"\"\"\n        # How to subscript a Union type:\n        #   https://github.com/pytorch/pytorch/issues/69434\n        if isinstance(offset, int):\n            pos_emb = self.pe[\n                :,\n                self.pe.size(1) // 2 - size - offset + 1: self.pe.size(1) // 2 + size + offset,\n            ]\n        elif isinstance(offset, torch.Tensor):\n            pos_emb = self.pe[\n                :,\n                self.pe.size(1) // 2 - size - offset + 1: self.pe.size(1) // 2 + size + offset,\n            ]\n        return pos_emb\n"
  },
  {
    "path": "cosyvoice/transformer/encoder.py",
    "content": "# Copyright (c) 2021 Mobvoi Inc (Binbin Zhang, Di Wu)\n#               2022 Xingchen Song (sxc19@mails.tsinghua.edu.cn)\n#               2024 Alibaba Inc (Xiang Lyu)\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# Modified from ESPnet(https://github.com/espnet/espnet)\n\"\"\"Encoder definition.\"\"\"\nfrom typing import Tuple\n\nimport torch\nimport torch.utils.checkpoint as ckpt\n\nfrom cosyvoice.transformer.convolution import ConvolutionModule\nfrom cosyvoice.transformer.encoder_layer import TransformerEncoderLayer\nfrom cosyvoice.transformer.encoder_layer import ConformerEncoderLayer\nfrom cosyvoice.transformer.positionwise_feed_forward import PositionwiseFeedForward\nfrom cosyvoice.utils.class_utils import (\n    COSYVOICE_EMB_CLASSES,\n    COSYVOICE_SUBSAMPLE_CLASSES,\n    COSYVOICE_ATTENTION_CLASSES,\n    COSYVOICE_ACTIVATION_CLASSES,\n)\nfrom cosyvoice.utils.mask import make_pad_mask\nfrom cosyvoice.utils.mask import add_optional_chunk_mask\n\n\nclass BaseEncoder(torch.nn.Module):\n\n    def __init__(\n        self,\n        input_size: int,\n        output_size: int = 256,\n        attention_heads: int = 4,\n        linear_units: int = 2048,\n        num_blocks: int = 6,\n        dropout_rate: float = 0.1,\n        positional_dropout_rate: float = 0.1,\n        attention_dropout_rate: float = 0.0,\n        input_layer: str = \"conv2d\",\n        pos_enc_layer_type: str = \"abs_pos\",\n        normalize_before: bool = True,\n        static_chunk_size: int = 0,\n        use_dynamic_chunk: bool = False,\n        global_cmvn: torch.nn.Module = None,\n        use_dynamic_left_chunk: bool = False,\n        gradient_checkpointing: bool = False,\n    ):\n        \"\"\"\n        Args:\n            input_size (int): input dim\n            output_size (int): dimension of attention\n            attention_heads (int): the number of heads of multi head attention\n            linear_units (int): the hidden units number of position-wise feed\n                forward\n            num_blocks (int): the number of decoder blocks\n            dropout_rate (float): dropout rate\n            attention_dropout_rate (float): dropout rate in attention\n            positional_dropout_rate (float): dropout rate after adding\n                positional encoding\n            input_layer (str): input layer type.\n                optional [linear, conv2d, conv2d6, conv2d8]\n            pos_enc_layer_type (str): Encoder positional encoding layer type.\n                opitonal [abs_pos, scaled_abs_pos, rel_pos, no_pos]\n            normalize_before (bool):\n                True: use layer_norm before each sub-block of a layer.\n                False: use layer_norm after each sub-block of a layer.\n            static_chunk_size (int): chunk size for static chunk training and\n                decoding\n            use_dynamic_chunk (bool): whether use dynamic chunk size for\n                training or not, You can only use fixed chunk(chunk_size > 0)\n                or dyanmic chunk size(use_dynamic_chunk = True)\n            global_cmvn (Optional[torch.nn.Module]): Optional GlobalCMVN module\n            use_dynamic_left_chunk (bool): whether use dynamic left chunk in\n                dynamic chunk training\n            key_bias: whether use bias in attention.linear_k, False for whisper models.\n            gradient_checkpointing: rerunning a forward-pass segment for each\n                checkpointed segment during backward.\n        \"\"\"\n        super().__init__()\n        self._output_size = output_size\n\n        self.global_cmvn = global_cmvn\n        self.embed = COSYVOICE_SUBSAMPLE_CLASSES[input_layer](\n            input_size,\n            output_size,\n            dropout_rate,\n            COSYVOICE_EMB_CLASSES[pos_enc_layer_type](output_size,\n                                                      positional_dropout_rate),\n        )\n\n        self.normalize_before = normalize_before\n        self.after_norm = torch.nn.LayerNorm(output_size, eps=1e-5)\n        self.static_chunk_size = static_chunk_size\n        self.use_dynamic_chunk = use_dynamic_chunk\n        self.use_dynamic_left_chunk = use_dynamic_left_chunk\n        self.gradient_checkpointing = gradient_checkpointing\n\n    def output_size(self) -> int:\n        return self._output_size\n\n    def forward(\n        self,\n        xs: torch.Tensor,\n        xs_lens: torch.Tensor,\n        decoding_chunk_size: int = 0,\n        num_decoding_left_chunks: int = -1,\n    ) -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"Embed positions in tensor.\n\n        Args:\n            xs: padded input tensor (B, T, D)\n            xs_lens: input length (B)\n            decoding_chunk_size: decoding chunk size for dynamic chunk\n                0: default for training, use random dynamic chunk.\n                <0: for decoding, use full chunk.\n                >0: for decoding, use fixed chunk size as set.\n            num_decoding_left_chunks: number of left chunks, this is for decoding,\n            the chunk size is decoding_chunk_size.\n                >=0: use num_decoding_left_chunks\n                <0: use all left chunks\n        Returns:\n            encoder output tensor xs, and subsampled masks\n            xs: padded output tensor (B, T' ~= T/subsample_rate, D)\n            masks: torch.Tensor batch padding mask after subsample\n                (B, 1, T' ~= T/subsample_rate)\n        NOTE(xcsong):\n            We pass the `__call__` method of the modules instead of `forward` to the\n            checkpointing API because `__call__` attaches all the hooks of the module.\n            https://discuss.pytorch.org/t/any-different-between-model-input-and-model-forward-input/3690/2\n        \"\"\"\n        T = xs.size(1)\n        masks = ~make_pad_mask(xs_lens, T).unsqueeze(1)  # (B, 1, T)\n        if self.global_cmvn is not None:\n            xs = self.global_cmvn(xs)\n        xs, pos_emb, masks = self.embed(xs, masks)\n        mask_pad = masks  # (B, 1, T/subsample_rate)\n        chunk_masks = add_optional_chunk_mask(xs, masks,\n                                              self.use_dynamic_chunk,\n                                              self.use_dynamic_left_chunk,\n                                              decoding_chunk_size,\n                                              self.static_chunk_size,\n                                              num_decoding_left_chunks)\n        if self.gradient_checkpointing and self.training:\n            xs = self.forward_layers_checkpointed(xs, chunk_masks, pos_emb,\n                                                  mask_pad)\n        else:\n            xs = self.forward_layers(xs, chunk_masks, pos_emb, mask_pad)\n        if self.normalize_before:\n            xs = self.after_norm(xs)\n        # Here we assume the mask is not changed in encoder layers, so just\n        # return the masks before encoder layers, and the masks will be used\n        # for cross attention with decoder later\n        return xs, masks\n\n    def forward_layers(self, xs: torch.Tensor, chunk_masks: torch.Tensor,\n                       pos_emb: torch.Tensor,\n                       mask_pad: torch.Tensor) -> torch.Tensor:\n        for layer in self.encoders:\n            xs, chunk_masks, _, _ = layer(xs, chunk_masks, pos_emb, mask_pad)\n        return xs\n\n    @torch.jit.unused\n    def forward_layers_checkpointed(self, xs: torch.Tensor,\n                                    chunk_masks: torch.Tensor,\n                                    pos_emb: torch.Tensor,\n                                    mask_pad: torch.Tensor) -> torch.Tensor:\n        for layer in self.encoders:\n            xs, chunk_masks, _, _ = ckpt.checkpoint(layer.__call__, xs,\n                                                    chunk_masks, pos_emb,\n                                                    mask_pad)\n        return xs\n\n    @torch.jit.export\n    def forward_chunk(\n        self,\n        xs: torch.Tensor,\n        offset: int,\n        required_cache_size: int,\n        att_cache: torch.Tensor = torch.zeros(0, 0, 0, 0),\n        cnn_cache: torch.Tensor = torch.zeros(0, 0, 0, 0),\n        att_mask: torch.Tensor = torch.ones((0, 0, 0), dtype=torch.bool),\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\" Forward just one chunk\n\n        Args:\n            xs (torch.Tensor): chunk input, with shape (b=1, time, mel-dim),\n                where `time == (chunk_size - 1) * subsample_rate + \\\n                        subsample.right_context + 1`\n            offset (int): current offset in encoder output time stamp\n            required_cache_size (int): cache size required for next chunk\n                compuation\n                >=0: actual cache size\n                <0: means all history cache is required\n            att_cache (torch.Tensor): cache tensor for KEY & VALUE in\n                transformer/conformer attention, with shape\n                (elayers, head, cache_t1, d_k * 2), where\n                `head * d_k == hidden-dim` and\n                `cache_t1 == chunk_size * num_decoding_left_chunks`.\n            cnn_cache (torch.Tensor): cache tensor for cnn_module in conformer,\n                (elayers, b=1, hidden-dim, cache_t2), where\n                `cache_t2 == cnn.lorder - 1`\n\n        Returns:\n            torch.Tensor: output of current input xs,\n                with shape (b=1, chunk_size, hidden-dim).\n            torch.Tensor: new attention cache required for next chunk, with\n                dynamic shape (elayers, head, ?, d_k * 2)\n                depending on required_cache_size.\n            torch.Tensor: new conformer cnn cache required for next chunk, with\n                same shape as the original cnn_cache.\n\n        \"\"\"\n        assert xs.size(0) == 1\n        # tmp_masks is just for interface compatibility\n        tmp_masks = torch.ones(1,\n                               xs.size(1),\n                               device=xs.device,\n                               dtype=torch.bool)\n        tmp_masks = tmp_masks.unsqueeze(1)\n        if self.global_cmvn is not None:\n            xs = self.global_cmvn(xs)\n        # NOTE(xcsong): Before embed, shape(xs) is (b=1, time, mel-dim)\n        xs, pos_emb, _ = self.embed(xs, tmp_masks, offset)\n        # NOTE(xcsong): After  embed, shape(xs) is (b=1, chunk_size, hidden-dim)\n        elayers, cache_t1 = att_cache.size(0), att_cache.size(2)\n        chunk_size = xs.size(1)\n        attention_key_size = cache_t1 + chunk_size\n        pos_emb = self.embed.position_encoding(offset=offset - cache_t1,\n                                               size=attention_key_size)\n        if required_cache_size < 0:\n            next_cache_start = 0\n        elif required_cache_size == 0:\n            next_cache_start = attention_key_size\n        else:\n            next_cache_start = max(attention_key_size - required_cache_size, 0)\n        r_att_cache = []\n        r_cnn_cache = []\n        for i, layer in enumerate(self.encoders):\n            # NOTE(xcsong): Before layer.forward\n            #   shape(att_cache[i:i + 1]) is (1, head, cache_t1, d_k * 2),\n            #   shape(cnn_cache[i])       is (b=1, hidden-dim, cache_t2)\n            xs, _, new_att_cache, new_cnn_cache = layer(\n                xs,\n                att_mask,\n                pos_emb,\n                att_cache=att_cache[i:i + 1] if elayers > 0 else att_cache,\n                cnn_cache=cnn_cache[i] if cnn_cache.size(0) > 0 else cnn_cache)\n            # NOTE(xcsong): After layer.forward\n            #   shape(new_att_cache) is (1, head, attention_key_size, d_k * 2),\n            #   shape(new_cnn_cache) is (b=1, hidden-dim, cache_t2)\n            r_att_cache.append(new_att_cache[:, :, next_cache_start:, :])\n            r_cnn_cache.append(new_cnn_cache.unsqueeze(0))\n        if self.normalize_before:\n            xs = self.after_norm(xs)\n\n        # NOTE(xcsong): shape(r_att_cache) is (elayers, head, ?, d_k * 2),\n        #   ? may be larger than cache_t1, it depends on required_cache_size\n        r_att_cache = torch.cat(r_att_cache, dim=0)\n        # NOTE(xcsong): shape(r_cnn_cache) is (e, b=1, hidden-dim, cache_t2)\n        r_cnn_cache = torch.cat(r_cnn_cache, dim=0)\n\n        return (xs, r_att_cache, r_cnn_cache)\n\n    @torch.jit.unused\n    def forward_chunk_by_chunk(\n        self,\n        xs: torch.Tensor,\n        decoding_chunk_size: int,\n        num_decoding_left_chunks: int = -1,\n    ) -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\" Forward input chunk by chunk with chunk_size like a streaming\n            fashion\n\n        Here we should pay special attention to computation cache in the\n        streaming style forward chunk by chunk. Three things should be taken\n        into account for computation in the current network:\n            1. transformer/conformer encoder layers output cache\n            2. convolution in conformer\n            3. convolution in subsampling\n\n        However, we don't implement subsampling cache for:\n            1. We can control subsampling module to output the right result by\n               overlapping input instead of cache left context, even though it\n               wastes some computation, but subsampling only takes a very\n               small fraction of computation in the whole model.\n            2. Typically, there are several covolution layers with subsampling\n               in subsampling module, it is tricky and complicated to do cache\n               with different convolution layers with different subsampling\n               rate.\n            3. Currently, nn.Sequential is used to stack all the convolution\n               layers in subsampling, we need to rewrite it to make it work\n               with cache, which is not preferred.\n        Args:\n            xs (torch.Tensor): (1, max_len, dim)\n            chunk_size (int): decoding chunk size\n        \"\"\"\n        assert decoding_chunk_size > 0\n        # The model is trained by static or dynamic chunk\n        assert self.static_chunk_size > 0 or self.use_dynamic_chunk\n        subsampling = self.embed.subsampling_rate\n        context = self.embed.right_context + 1  # Add current frame\n        stride = subsampling * decoding_chunk_size\n        decoding_window = (decoding_chunk_size - 1) * subsampling + context\n        num_frames = xs.size(1)\n        att_cache: torch.Tensor = torch.zeros((0, 0, 0, 0), device=xs.device)\n        cnn_cache: torch.Tensor = torch.zeros((0, 0, 0, 0), device=xs.device)\n        outputs = []\n        offset = 0\n        required_cache_size = decoding_chunk_size * num_decoding_left_chunks\n\n        # Feed forward overlap input step by step\n        for cur in range(0, num_frames - context + 1, stride):\n            end = min(cur + decoding_window, num_frames)\n            chunk_xs = xs[:, cur:end, :]\n            (y, att_cache,\n             cnn_cache) = self.forward_chunk(chunk_xs, offset,\n                                             required_cache_size, att_cache,\n                                             cnn_cache)\n            outputs.append(y)\n            offset += y.size(1)\n        ys = torch.cat(outputs, 1)\n        masks = torch.ones((1, 1, ys.size(1)),\n                           device=ys.device,\n                           dtype=torch.bool)\n        return ys, masks\n\n\nclass TransformerEncoder(BaseEncoder):\n    \"\"\"Transformer encoder module.\"\"\"\n\n    def __init__(\n        self,\n        input_size: int,\n        output_size: int = 256,\n        attention_heads: int = 4,\n        linear_units: int = 2048,\n        num_blocks: int = 6,\n        dropout_rate: float = 0.1,\n        positional_dropout_rate: float = 0.1,\n        attention_dropout_rate: float = 0.0,\n        input_layer: str = \"conv2d\",\n        pos_enc_layer_type: str = \"abs_pos\",\n        normalize_before: bool = True,\n        static_chunk_size: int = 0,\n        use_dynamic_chunk: bool = False,\n        global_cmvn: torch.nn.Module = None,\n        use_dynamic_left_chunk: bool = False,\n        key_bias: bool = True,\n        selfattention_layer_type: str = \"selfattn\",\n        activation_type: str = \"relu\",\n        gradient_checkpointing: bool = False,\n    ):\n        \"\"\" Construct TransformerEncoder\n\n        See Encoder for the meaning of each parameter.\n        \"\"\"\n        super().__init__(input_size, output_size, attention_heads,\n                         linear_units, num_blocks, dropout_rate,\n                         positional_dropout_rate, attention_dropout_rate,\n                         input_layer, pos_enc_layer_type, normalize_before,\n                         static_chunk_size, use_dynamic_chunk, global_cmvn,\n                         use_dynamic_left_chunk, gradient_checkpointing)\n        activation = COSYVOICE_ACTIVATION_CLASSES[activation_type]()\n        self.encoders = torch.nn.ModuleList([\n            TransformerEncoderLayer(\n                output_size,\n                COSYVOICE_ATTENTION_CLASSES[selfattention_layer_type](attention_heads,\n                                                                      output_size,\n                                                                      attention_dropout_rate,\n                                                                      key_bias),\n                PositionwiseFeedForward(output_size, linear_units,\n                                        dropout_rate, activation),\n                dropout_rate, normalize_before) for _ in range(num_blocks)\n        ])\n\n\nclass ConformerEncoder(BaseEncoder):\n    \"\"\"Conformer encoder module.\"\"\"\n\n    def __init__(\n        self,\n        input_size: int,\n        output_size: int = 256,\n        attention_heads: int = 4,\n        linear_units: int = 2048,\n        num_blocks: int = 6,\n        dropout_rate: float = 0.1,\n        positional_dropout_rate: float = 0.1,\n        attention_dropout_rate: float = 0.0,\n        input_layer: str = \"conv2d\",\n        pos_enc_layer_type: str = \"rel_pos\",\n        normalize_before: bool = True,\n        static_chunk_size: int = 0,\n        use_dynamic_chunk: bool = False,\n        global_cmvn: torch.nn.Module = None,\n        use_dynamic_left_chunk: bool = False,\n        positionwise_conv_kernel_size: int = 1,\n        macaron_style: bool = True,\n        selfattention_layer_type: str = \"rel_selfattn\",\n        activation_type: str = \"swish\",\n        use_cnn_module: bool = True,\n        cnn_module_kernel: int = 15,\n        causal: bool = False,\n        cnn_module_norm: str = \"batch_norm\",\n        key_bias: bool = True,\n        gradient_checkpointing: bool = False,\n    ):\n        \"\"\"Construct ConformerEncoder\n\n        Args:\n            input_size to use_dynamic_chunk, see in BaseEncoder\n            positionwise_conv_kernel_size (int): Kernel size of positionwise\n                conv1d layer.\n            macaron_style (bool): Whether to use macaron style for\n                positionwise layer.\n            selfattention_layer_type (str): Encoder attention layer type,\n                the parameter has no effect now, it's just for configure\n                compatibility.\n            activation_type (str): Encoder activation function type.\n            use_cnn_module (bool): Whether to use convolution module.\n            cnn_module_kernel (int): Kernel size of convolution module.\n            causal (bool): whether to use causal convolution or not.\n            key_bias: whether use bias in attention.linear_k, False for whisper models.\n        \"\"\"\n        super().__init__(input_size, output_size, attention_heads,\n                         linear_units, num_blocks, dropout_rate,\n                         positional_dropout_rate, attention_dropout_rate,\n                         input_layer, pos_enc_layer_type, normalize_before,\n                         static_chunk_size, use_dynamic_chunk, global_cmvn,\n                         use_dynamic_left_chunk, gradient_checkpointing)\n        activation = COSYVOICE_ACTIVATION_CLASSES[activation_type]()\n\n        # self-attention module definition\n        encoder_selfattn_layer_args = (\n            attention_heads,\n            output_size,\n            attention_dropout_rate,\n            key_bias,\n        )\n        # feed-forward module definition\n        positionwise_layer_args = (\n            output_size,\n            linear_units,\n            dropout_rate,\n            activation,\n        )\n        # convolution module definition\n        convolution_layer_args = (output_size, cnn_module_kernel, activation,\n                                  cnn_module_norm, causal)\n\n        self.encoders = torch.nn.ModuleList([\n            ConformerEncoderLayer(\n                output_size,\n                COSYVOICE_ATTENTION_CLASSES[selfattention_layer_type](\n                    *encoder_selfattn_layer_args),\n                PositionwiseFeedForward(*positionwise_layer_args),\n                PositionwiseFeedForward(\n                    *positionwise_layer_args) if macaron_style else None,\n                ConvolutionModule(\n                    *convolution_layer_args) if use_cnn_module else None,\n                dropout_rate,\n                normalize_before,\n            ) for _ in range(num_blocks)\n        ])\n"
  },
  {
    "path": "cosyvoice/transformer/encoder_layer.py",
    "content": "# Copyright (c) 2021 Mobvoi Inc (Binbin Zhang, Di Wu)\n#               2022 Xingchen Song (sxc19@mails.tsinghua.edu.cn)\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# Modified from ESPnet(https://github.com/espnet/espnet)\n\"\"\"Encoder self-attention layer definition.\"\"\"\n\nfrom typing import Optional, Tuple\n\nimport torch\nfrom torch import nn\n\n\nclass TransformerEncoderLayer(nn.Module):\n    \"\"\"Encoder layer module.\n\n    Args:\n        size (int): Input dimension.\n        self_attn (torch.nn.Module): Self-attention module instance.\n            `MultiHeadedAttention` or `RelPositionMultiHeadedAttention`\n            instance can be used as the argument.\n        feed_forward (torch.nn.Module): Feed-forward module instance.\n            `PositionwiseFeedForward`, instance can be used as the argument.\n        dropout_rate (float): Dropout rate.\n        normalize_before (bool):\n            True: use layer_norm before each sub-block.\n            False: to use layer_norm after each sub-block.\n    \"\"\"\n\n    def __init__(\n        self,\n        size: int,\n        self_attn: torch.nn.Module,\n        feed_forward: torch.nn.Module,\n        dropout_rate: float,\n        normalize_before: bool = True,\n    ):\n        \"\"\"Construct an EncoderLayer object.\"\"\"\n        super().__init__()\n        self.self_attn = self_attn\n        self.feed_forward = feed_forward\n        self.norm1 = nn.LayerNorm(size, eps=1e-12)\n        self.norm2 = nn.LayerNorm(size, eps=1e-12)\n        self.dropout = nn.Dropout(dropout_rate)\n        self.size = size\n        self.normalize_before = normalize_before\n\n    def forward(\n        self,\n        x: torch.Tensor,\n        mask: torch.Tensor,\n        pos_emb: torch.Tensor,\n        mask_pad: torch.Tensor = torch.ones((0, 0, 0), dtype=torch.bool),\n        att_cache: torch.Tensor = torch.zeros((0, 0, 0, 0)),\n        cnn_cache: torch.Tensor = torch.zeros((0, 0, 0, 0)),\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Compute encoded features.\n\n        Args:\n            x (torch.Tensor): (#batch, time, size)\n            mask (torch.Tensor): Mask tensor for the input (#batch, time，time),\n                (0, 0, 0) means fake mask.\n            pos_emb (torch.Tensor): just for interface compatibility\n                to ConformerEncoderLayer\n            mask_pad (torch.Tensor): does not used in transformer layer,\n                just for unified api with conformer.\n            att_cache (torch.Tensor): Cache tensor of the KEY & VALUE\n                (#batch=1, head, cache_t1, d_k * 2), head * d_k == size.\n            cnn_cache (torch.Tensor): Convolution cache in conformer layer\n                (#batch=1, size, cache_t2), not used here, it's for interface\n                compatibility to ConformerEncoderLayer.\n        Returns:\n            torch.Tensor: Output tensor (#batch, time, size).\n            torch.Tensor: Mask tensor (#batch, time, time).\n            torch.Tensor: att_cache tensor,\n                (#batch=1, head, cache_t1 + time, d_k * 2).\n            torch.Tensor: cnn_cahce tensor (#batch=1, size, cache_t2).\n\n        \"\"\"\n        residual = x\n        if self.normalize_before:\n            x = self.norm1(x)\n        x_att, new_att_cache = self.self_attn(x, x, x, mask, pos_emb=pos_emb, cache=att_cache)\n        x = residual + self.dropout(x_att)\n        if not self.normalize_before:\n            x = self.norm1(x)\n\n        residual = x\n        if self.normalize_before:\n            x = self.norm2(x)\n        x = residual + self.dropout(self.feed_forward(x))\n        if not self.normalize_before:\n            x = self.norm2(x)\n\n        fake_cnn_cache = torch.zeros((0, 0, 0), dtype=x.dtype, device=x.device)\n        return x, mask, new_att_cache, fake_cnn_cache\n\n\nclass ConformerEncoderLayer(nn.Module):\n    \"\"\"Encoder layer module.\n    Args:\n        size (int): Input dimension.\n        self_attn (torch.nn.Module): Self-attention module instance.\n            `MultiHeadedAttention` or `RelPositionMultiHeadedAttention`\n            instance can be used as the argument.\n        feed_forward (torch.nn.Module): Feed-forward module instance.\n            `PositionwiseFeedForward` instance can be used as the argument.\n        feed_forward_macaron (torch.nn.Module): Additional feed-forward module\n             instance.\n            `PositionwiseFeedForward` instance can be used as the argument.\n        conv_module (torch.nn.Module): Convolution module instance.\n            `ConvlutionModule` instance can be used as the argument.\n        dropout_rate (float): Dropout rate.\n        normalize_before (bool):\n            True: use layer_norm before each sub-block.\n            False: use layer_norm after each sub-block.\n    \"\"\"\n\n    def __init__(\n        self,\n        size: int,\n        self_attn: torch.nn.Module,\n        feed_forward: Optional[nn.Module] = None,\n        feed_forward_macaron: Optional[nn.Module] = None,\n        conv_module: Optional[nn.Module] = None,\n        dropout_rate: float = 0.1,\n        normalize_before: bool = True,\n    ):\n        \"\"\"Construct an EncoderLayer object.\"\"\"\n        super().__init__()\n        self.self_attn = self_attn\n        self.feed_forward = feed_forward\n        self.feed_forward_macaron = feed_forward_macaron\n        self.conv_module = conv_module\n        self.norm_ff = nn.LayerNorm(size, eps=1e-12)  # for the FNN module\n        self.norm_mha = nn.LayerNorm(size, eps=1e-12)  # for the MHA module\n        if feed_forward_macaron is not None:\n            self.norm_ff_macaron = nn.LayerNorm(size, eps=1e-12)\n            self.ff_scale = 0.5\n        else:\n            self.ff_scale = 1.0\n        if self.conv_module is not None:\n            self.norm_conv = nn.LayerNorm(size, eps=1e-12)  # for the CNN module\n            self.norm_final = nn.LayerNorm(\n                size, eps=1e-12)  # for the final output of the block\n        self.dropout = nn.Dropout(dropout_rate)\n        self.size = size\n        self.normalize_before = normalize_before\n\n    def forward(\n        self,\n        x: torch.Tensor,\n        mask: torch.Tensor,\n        pos_emb: torch.Tensor,\n        mask_pad: torch.Tensor = torch.ones((0, 0, 0), dtype=torch.bool),\n        att_cache: torch.Tensor = torch.zeros((0, 0, 0, 0)),\n        cnn_cache: torch.Tensor = torch.zeros((0, 0, 0, 0)),\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Compute encoded features.\n\n        Args:\n            x (torch.Tensor): (#batch, time, size)\n            mask (torch.Tensor): Mask tensor for the input (#batch, time，time),\n                (0, 0, 0) means fake mask.\n            pos_emb (torch.Tensor): positional encoding, must not be None\n                for ConformerEncoderLayer.\n            mask_pad (torch.Tensor): batch padding mask used for conv module.\n                (#batch, 1，time), (0, 0, 0) means fake mask.\n            att_cache (torch.Tensor): Cache tensor of the KEY & VALUE\n                (#batch=1, head, cache_t1, d_k * 2), head * d_k == size.\n            cnn_cache (torch.Tensor): Convolution cache in conformer layer\n                (#batch=1, size, cache_t2)\n        Returns:\n            torch.Tensor: Output tensor (#batch, time, size).\n            torch.Tensor: Mask tensor (#batch, time, time).\n            torch.Tensor: att_cache tensor,\n                (#batch=1, head, cache_t1 + time, d_k * 2).\n            torch.Tensor: cnn_cahce tensor (#batch, size, cache_t2).\n        \"\"\"\n\n        # whether to use macaron style\n        if self.feed_forward_macaron is not None:\n            residual = x\n            if self.normalize_before:\n                x = self.norm_ff_macaron(x)\n            x = residual + self.ff_scale * self.dropout(\n                self.feed_forward_macaron(x))\n            if not self.normalize_before:\n                x = self.norm_ff_macaron(x)\n\n        # multi-headed self-attention module\n        residual = x\n        if self.normalize_before:\n            x = self.norm_mha(x)\n        x_att, new_att_cache = self.self_attn(x, x, x, mask, pos_emb,\n                                              att_cache)\n        x = residual + self.dropout(x_att)\n        if not self.normalize_before:\n            x = self.norm_mha(x)\n\n        # convolution module\n        # Fake new cnn cache here, and then change it in conv_module\n        new_cnn_cache = torch.zeros((0, 0, 0), dtype=x.dtype, device=x.device)\n        if self.conv_module is not None:\n            residual = x\n            if self.normalize_before:\n                x = self.norm_conv(x)\n            x, new_cnn_cache = self.conv_module(x, mask_pad, cnn_cache)\n            x = residual + self.dropout(x)\n\n            if not self.normalize_before:\n                x = self.norm_conv(x)\n\n        # feed forward module\n        residual = x\n        if self.normalize_before:\n            x = self.norm_ff(x)\n\n        x = residual + self.ff_scale * self.dropout(self.feed_forward(x))\n        if not self.normalize_before:\n            x = self.norm_ff(x)\n\n        if self.conv_module is not None:\n            x = self.norm_final(x)\n\n        return x, mask, new_att_cache, new_cnn_cache\n"
  },
  {
    "path": "cosyvoice/transformer/label_smoothing_loss.py",
    "content": "# Copyright (c) 2019 Shigeki Karita\n#               2020 Mobvoi Inc (Binbin Zhang)\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\"\"\"Label smoothing module.\"\"\"\n\nimport torch\nfrom torch import nn\n\n\nclass LabelSmoothingLoss(nn.Module):\n    \"\"\"Label-smoothing loss.\n\n    In a standard CE loss, the label's data distribution is:\n    [0,1,2] ->\n    [\n        [1.0, 0.0, 0.0],\n        [0.0, 1.0, 0.0],\n        [0.0, 0.0, 1.0],\n    ]\n\n    In the smoothing version CE Loss,some probabilities\n    are taken from the true label prob (1.0) and are divided\n    among other labels.\n\n    e.g.\n    smoothing=0.1\n    [0,1,2] ->\n    [\n        [0.9, 0.05, 0.05],\n        [0.05, 0.9, 0.05],\n        [0.05, 0.05, 0.9],\n    ]\n\n    Args:\n        size (int): the number of class\n        padding_idx (int): padding class id which will be ignored for loss\n        smoothing (float): smoothing rate (0.0 means the conventional CE)\n        normalize_length (bool):\n            normalize loss by sequence length if True\n            normalize loss by batch size if False\n    \"\"\"\n\n    def __init__(self,\n                 size: int,\n                 padding_idx: int,\n                 smoothing: float,\n                 normalize_length: bool = False):\n        \"\"\"Construct an LabelSmoothingLoss object.\"\"\"\n        super(LabelSmoothingLoss, self).__init__()\n        self.criterion = nn.KLDivLoss(reduction=\"none\")\n        self.padding_idx = padding_idx\n        self.confidence = 1.0 - smoothing\n        self.smoothing = smoothing\n        self.size = size\n        self.normalize_length = normalize_length\n\n    def forward(self, x: torch.Tensor, target: torch.Tensor) -> torch.Tensor:\n        \"\"\"Compute loss between x and target.\n\n        The model outputs and data labels tensors are flatten to\n        (batch*seqlen, class) shape and a mask is applied to the\n        padding part which should not be calculated for loss.\n\n        Args:\n            x (torch.Tensor): prediction (batch, seqlen, class)\n            target (torch.Tensor):\n                target signal masked with self.padding_id (batch, seqlen)\n        Returns:\n            loss (torch.Tensor) : The KL loss, scalar float value\n        \"\"\"\n        assert x.size(2) == self.size\n        batch_size = x.size(0)\n        x = x.view(-1, self.size)\n        target = target.view(-1)\n        # use zeros_like instead of torch.no_grad() for true_dist,\n        # since no_grad() can not be exported by JIT\n        true_dist = torch.zeros_like(x)\n        true_dist.fill_(self.smoothing / (self.size - 1))\n        ignore = target == self.padding_idx  # (B,)\n        total = len(target) - ignore.sum().item()\n        target = target.masked_fill(ignore, 0)  # avoid -1 index\n        true_dist.scatter_(1, target.unsqueeze(1), self.confidence)\n        kl = self.criterion(torch.log_softmax(x, dim=1), true_dist)\n        denom = total if self.normalize_length else batch_size\n        return kl.masked_fill(ignore.unsqueeze(1), 0).sum() / denom\n"
  },
  {
    "path": "cosyvoice/transformer/positionwise_feed_forward.py",
    "content": "# Copyright (c) 2019 Shigeki Karita\n#               2020 Mobvoi Inc (Binbin Zhang)\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\"\"\"Positionwise feed forward layer definition.\"\"\"\n\nimport torch\n\n\nclass PositionwiseFeedForward(torch.nn.Module):\n    \"\"\"Positionwise feed forward layer.\n\n    FeedForward are appied on each position of the sequence.\n    The output dim is same with the input dim.\n\n    Args:\n        idim (int): Input dimenstion.\n        hidden_units (int): The number of hidden units.\n        dropout_rate (float): Dropout rate.\n        activation (torch.nn.Module): Activation function\n    \"\"\"\n\n    def __init__(\n            self,\n            idim: int,\n            hidden_units: int,\n            dropout_rate: float,\n            activation: torch.nn.Module = torch.nn.ReLU(),\n    ):\n        \"\"\"Construct a PositionwiseFeedForward object.\"\"\"\n        super(PositionwiseFeedForward, self).__init__()\n        self.w_1 = torch.nn.Linear(idim, hidden_units)\n        self.activation = activation\n        self.dropout = torch.nn.Dropout(dropout_rate)\n        self.w_2 = torch.nn.Linear(hidden_units, idim)\n\n    def forward(self, xs: torch.Tensor) -> torch.Tensor:\n        \"\"\"Forward function.\n\n        Args:\n            xs: input tensor (B, L, D)\n        Returns:\n            output tensor, (B, L, D)\n        \"\"\"\n        return self.w_2(self.dropout(self.activation(self.w_1(xs))))\n\n\nclass MoEFFNLayer(torch.nn.Module):\n    \"\"\"\n    Mixture of expert with Positionwise feed forward layer\n    See also figure 1 in https://arxiv.org/pdf/2305.15663.pdf\n    The output dim is same with the input dim.\n\n    Modified from https://github.com/Lightning-AI/lit-gpt/pull/823\n                  https://github.com/mistralai/mistral-src/blob/b46d6/moe_one_file_ref.py#L203-L219\n    Args:\n        n_expert: number of expert.\n        n_expert_per_token: The actual number of experts used for each frame\n        idim (int): Input dimenstion.\n        hidden_units (int): The number of hidden units.\n        dropout_rate (float): Dropout rate.\n        activation (torch.nn.Module): Activation function\n    \"\"\"\n\n    def __init__(\n            self,\n            n_expert: int,\n            n_expert_per_token: int,\n            idim: int,\n            hidden_units: int,\n            dropout_rate: float,\n            activation: torch.nn.Module = torch.nn.ReLU(),\n    ):\n        super(MoEFFNLayer, self).__init__()\n        self.gate = torch.nn.Linear(idim, n_expert, bias=False)\n        self.experts = torch.nn.ModuleList(\n            PositionwiseFeedForward(idim, hidden_units, dropout_rate,\n                                    activation) for _ in range(n_expert))\n        self.n_expert_per_token = n_expert_per_token\n\n    def forward(self, xs: torch.Tensor) -> torch.Tensor:\n        \"\"\"Foward function.\n        Args:\n            xs: input tensor (B, L, D)\n        Returns:\n            output tensor, (B, L, D)\n\n        \"\"\"\n        B, L, D = xs.size(\n        )  # batch size, sequence length, embedding dimension (idim)\n        xs = xs.view(-1, D)  # (B*L, D)\n        router = self.gate(xs)  # (B*L, n_expert)\n        logits, indices = torch.topk(\n            router, self.n_expert_per_token\n        )  # probs:(B*L, n_expert), indices: (B*L, n_expert)\n        weights = torch.nn.functional.softmax(\n            logits, dim=1,\n            dtype=torch.float).to(dtype=xs.dtype)  # (B*L, n_expert_per_token)\n        output = torch.zeros_like(xs)  # (B*L, D)\n        for i, expert in enumerate(self.experts):\n            mask = indices == i\n            batch_idx, ith_expert = torch.where(mask)\n            output[batch_idx] += weights[batch_idx, ith_expert, None] * expert(\n                xs[batch_idx])\n        return output.view(B, L, D)\n"
  },
  {
    "path": "cosyvoice/transformer/subsampling.py",
    "content": "# Copyright (c) 2021 Mobvoi Inc (Binbin Zhang, Di Wu)\n#               2024 Alibaba Inc (Xiang Lyu)\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# Modified from ESPnet(https://github.com/espnet/espnet)\n\"\"\"Subsampling layer definition.\"\"\"\n\nfrom typing import Tuple, Union\n\nimport torch\n\n\nclass BaseSubsampling(torch.nn.Module):\n\n    def __init__(self):\n        super().__init__()\n        self.right_context = 0\n        self.subsampling_rate = 1\n\n    def position_encoding(self, offset: Union[int, torch.Tensor],\n                          size: int) -> torch.Tensor:\n        return self.pos_enc.position_encoding(offset, size)\n\n\nclass EmbedinigNoSubsampling(BaseSubsampling):\n    \"\"\"Embedding input without subsampling\n    \"\"\"\n\n    def __init__(self, idim: int, odim: int, dropout_rate: float,\n                 pos_enc_class: torch.nn.Module):\n        super().__init__()\n        self.embed = torch.nn.Embedding(idim, odim)\n        self.pos_enc = pos_enc_class\n\n    def forward(\n        self,\n        x: torch.Tensor,\n        x_mask: torch.Tensor,\n        offset: Union[int, torch.Tensor] = 0\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Input x.\n\n        Args:\n            x (torch.Tensor): Input tensor (#batch, time, idim).\n            x_mask (torch.Tensor): Input mask (#batch, 1, time).\n\n        Returns:\n            torch.Tensor: linear input tensor (#batch, time', odim),\n                where time' = time .\n            torch.Tensor: linear input mask (#batch, 1, time'),\n                where time' = time .\n\n        \"\"\"\n        x = self.embed(x)\n        x, pos_emb = self.pos_enc(x, offset)\n        return x, pos_emb, x_mask\n\n\nclass LinearNoSubsampling(BaseSubsampling):\n    \"\"\"Linear transform the input without subsampling\n\n    Args:\n        idim (int): Input dimension.\n        odim (int): Output dimension.\n        dropout_rate (float): Dropout rate.\n\n    \"\"\"\n\n    def __init__(self, idim: int, odim: int, dropout_rate: float,\n                 pos_enc_class: torch.nn.Module):\n        \"\"\"Construct an linear object.\"\"\"\n        super().__init__()\n        self.out = torch.nn.Sequential(\n            torch.nn.Linear(idim, odim),\n            torch.nn.LayerNorm(odim, eps=1e-5),\n            torch.nn.Dropout(dropout_rate),\n        )\n        self.pos_enc = pos_enc_class\n        self.right_context = 0\n        self.subsampling_rate = 1\n\n    def forward(\n        self,\n        x: torch.Tensor,\n        x_mask: torch.Tensor,\n        offset: Union[int, torch.Tensor] = 0\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Input x.\n\n        Args:\n            x (torch.Tensor): Input tensor (#batch, time, idim).\n            x_mask (torch.Tensor): Input mask (#batch, 1, time).\n\n        Returns:\n            torch.Tensor: linear input tensor (#batch, time', odim),\n                where time' = time .\n            torch.Tensor: linear input mask (#batch, 1, time'),\n                where time' = time .\n\n        \"\"\"\n        x = self.out(x)\n        x, pos_emb = self.pos_enc(x, offset)\n        return x, pos_emb, x_mask\n\n\nclass Conv1dSubsampling2(BaseSubsampling):\n    \"\"\"Convolutional 1D subsampling (to 1/2 length).\n       It is designed for Whisper, ref:\n       https://github.com/openai/whisper/blob/main/whisper/model.py\n\n    Args:\n        idim (int): Input dimension.\n        odim (int): Output dimension.\n        dropout_rate (float): Dropout rate.\n\n    \"\"\"\n\n    def __init__(self, idim: int, odim: int, dropout_rate: float,\n                 pos_enc_class: torch.nn.Module):\n        \"\"\"Construct an Conv1dSubsampling2 object.\"\"\"\n        super().__init__()\n        self.conv = torch.nn.Sequential(\n            torch.nn.Conv1d(idim, odim, kernel_size=3, padding=1),\n            torch.nn.GELU(),\n            torch.nn.Conv1d(odim, odim, kernel_size=3, stride=2, padding=1),\n            torch.nn.GELU(),\n        )\n        self.pos_enc = pos_enc_class\n        # The right context for every conv layer is computed by:\n        # (kernel_size - 1) * frame_rate_of_this_layer\n        self.subsampling_rate = 2\n        # 4 = (3 - 1) * 1 + (3 - 1) * 1\n        self.right_context = 4\n\n    def forward(\n        self,\n        x: torch.Tensor,\n        x_mask: torch.Tensor,\n        offset: Union[int, torch.Tensor] = 0\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Subsample x.\n\n        Args:\n            x (torch.Tensor): Input tensor (#batch, time, idim).\n            x_mask (torch.Tensor): Input mask (#batch, 1, time).\n\n        Returns:\n            torch.Tensor: Subsampled tensor (#batch, time', odim),\n                where time' = time // 2.\n            torch.Tensor: Subsampled mask (#batch, 1, time'),\n                where time' = time // 2.\n            torch.Tensor: positional encoding\n\n        \"\"\"\n        time = x.size(1)\n        x = x.transpose(1, 2)  # (b, f, t)\n        x = self.conv(x)\n        x = x.transpose(1, 2)  # (b, t, f)\n        x, pos_emb = self.pos_enc(x, offset)\n        return x, pos_emb, x_mask[:, :, (time + 1) % 2::2]\n\n\nclass Conv2dSubsampling4(BaseSubsampling):\n    \"\"\"Convolutional 2D subsampling (to 1/4 length).\n\n    Args:\n        idim (int): Input dimension.\n        odim (int): Output dimension.\n        dropout_rate (float): Dropout rate.\n\n    \"\"\"\n\n    def __init__(self, idim: int, odim: int, dropout_rate: float,\n                 pos_enc_class: torch.nn.Module):\n        \"\"\"Construct an Conv2dSubsampling4 object.\"\"\"\n        super().__init__()\n        self.conv = torch.nn.Sequential(\n            torch.nn.Conv2d(1, odim, 3, 2),\n            torch.nn.ReLU(),\n            torch.nn.Conv2d(odim, odim, 3, 2),\n            torch.nn.ReLU(),\n        )\n        self.out = torch.nn.Sequential(\n            torch.nn.Linear(odim * (((idim - 1) // 2 - 1) // 2), odim))\n        self.pos_enc = pos_enc_class\n        # The right context for every conv layer is computed by:\n        # (kernel_size - 1) * frame_rate_of_this_layer\n        self.subsampling_rate = 4\n        # 6 = (3 - 1) * 1 + (3 - 1) * 2\n        self.right_context = 6\n\n    def forward(\n        self,\n        x: torch.Tensor,\n        x_mask: torch.Tensor,\n        offset: Union[int, torch.Tensor] = 0\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Subsample x.\n\n        Args:\n            x (torch.Tensor): Input tensor (#batch, time, idim).\n            x_mask (torch.Tensor): Input mask (#batch, 1, time).\n\n        Returns:\n            torch.Tensor: Subsampled tensor (#batch, time', odim),\n                where time' = time // 4.\n            torch.Tensor: Subsampled mask (#batch, 1, time'),\n                where time' = time // 4.\n            torch.Tensor: positional encoding\n\n        \"\"\"\n        x = x.unsqueeze(1)  # (b, c=1, t, f)\n        x = self.conv(x)\n        b, c, t, f = x.size()\n        x = self.out(x.transpose(1, 2).contiguous().view(b, t, c * f))\n        x, pos_emb = self.pos_enc(x, offset)\n        return x, pos_emb, x_mask[:, :, 2::2][:, :, 2::2]\n\n\nclass Conv2dSubsampling6(BaseSubsampling):\n    \"\"\"Convolutional 2D subsampling (to 1/6 length).\n    Args:\n        idim (int): Input dimension.\n        odim (int): Output dimension.\n        dropout_rate (float): Dropout rate.\n        pos_enc (torch.nn.Module): Custom position encoding layer.\n    \"\"\"\n\n    def __init__(self, idim: int, odim: int, dropout_rate: float,\n                 pos_enc_class: torch.nn.Module):\n        \"\"\"Construct an Conv2dSubsampling6 object.\"\"\"\n        super().__init__()\n        self.conv = torch.nn.Sequential(\n            torch.nn.Conv2d(1, odim, 3, 2),\n            torch.nn.ReLU(),\n            torch.nn.Conv2d(odim, odim, 5, 3),\n            torch.nn.ReLU(),\n        )\n        self.linear = torch.nn.Linear(odim * (((idim - 1) // 2 - 2) // 3),\n                                      odim)\n        self.pos_enc = pos_enc_class\n        # 10 = (3 - 1) * 1 + (5 - 1) * 2\n        self.subsampling_rate = 6\n        self.right_context = 10\n\n    def forward(\n        self,\n        x: torch.Tensor,\n        x_mask: torch.Tensor,\n        offset: Union[int, torch.Tensor] = 0\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Subsample x.\n        Args:\n            x (torch.Tensor): Input tensor (#batch, time, idim).\n            x_mask (torch.Tensor): Input mask (#batch, 1, time).\n\n        Returns:\n            torch.Tensor: Subsampled tensor (#batch, time', odim),\n                where time' = time // 6.\n            torch.Tensor: Subsampled mask (#batch, 1, time'),\n                where time' = time // 6.\n            torch.Tensor: positional encoding\n        \"\"\"\n        x = x.unsqueeze(1)  # (b, c, t, f)\n        x = self.conv(x)\n        b, c, t, f = x.size()\n        x = self.linear(x.transpose(1, 2).contiguous().view(b, t, c * f))\n        x, pos_emb = self.pos_enc(x, offset)\n        return x, pos_emb, x_mask[:, :, 2::2][:, :, 4::3]\n\n\nclass Conv2dSubsampling8(BaseSubsampling):\n    \"\"\"Convolutional 2D subsampling (to 1/8 length).\n\n    Args:\n        idim (int): Input dimension.\n        odim (int): Output dimension.\n        dropout_rate (float): Dropout rate.\n\n    \"\"\"\n\n    def __init__(self, idim: int, odim: int, dropout_rate: float,\n                 pos_enc_class: torch.nn.Module):\n        \"\"\"Construct an Conv2dSubsampling8 object.\"\"\"\n        super().__init__()\n        self.conv = torch.nn.Sequential(\n            torch.nn.Conv2d(1, odim, 3, 2),\n            torch.nn.ReLU(),\n            torch.nn.Conv2d(odim, odim, 3, 2),\n            torch.nn.ReLU(),\n            torch.nn.Conv2d(odim, odim, 3, 2),\n            torch.nn.ReLU(),\n        )\n        self.linear = torch.nn.Linear(\n            odim * ((((idim - 1) // 2 - 1) // 2 - 1) // 2), odim)\n        self.pos_enc = pos_enc_class\n        self.subsampling_rate = 8\n        # 14 = (3 - 1) * 1 + (3 - 1) * 2 + (3 - 1) * 4\n        self.right_context = 14\n\n    def forward(\n        self,\n        x: torch.Tensor,\n        x_mask: torch.Tensor,\n        offset: Union[int, torch.Tensor] = 0\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Subsample x.\n\n        Args:\n            x (torch.Tensor): Input tensor (#batch, time, idim).\n            x_mask (torch.Tensor): Input mask (#batch, 1, time).\n\n        Returns:\n            torch.Tensor: Subsampled tensor (#batch, time', odim),\n                where time' = time // 8.\n            torch.Tensor: Subsampled mask (#batch, 1, time'),\n                where time' = time // 8.\n            torch.Tensor: positional encoding\n        \"\"\"\n        x = x.unsqueeze(1)  # (b, c, t, f)\n        x = self.conv(x)\n        b, c, t, f = x.size()\n        x = self.linear(x.transpose(1, 2).contiguous().view(b, t, c * f))\n        x, pos_emb = self.pos_enc(x, offset)\n        return x, pos_emb, x_mask[:, :, 2::2][:, :, 2::2][:, :, 2::2]\n\n\nclass LegacyLinearNoSubsampling(BaseSubsampling):\n    \"\"\"Linear transform the input without subsampling\n\n    Args:\n        idim (int): Input dimension.\n        odim (int): Output dimension.\n        dropout_rate (float): Dropout rate.\n\n    \"\"\"\n\n    def __init__(self, idim: int, odim: int, dropout_rate: float,\n                 pos_enc_class: torch.nn.Module):\n        \"\"\"Construct an linear object.\"\"\"\n        super().__init__()\n        self.out = torch.nn.Sequential(\n            torch.nn.Linear(idim, odim),\n            torch.nn.LayerNorm(odim, eps=1e-5),\n            torch.nn.Dropout(dropout_rate),\n            torch.nn.ReLU(),\n        )\n        self.pos_enc = pos_enc_class\n        self.right_context = 0\n        self.subsampling_rate = 1\n\n    def forward(\n        self,\n        x: torch.Tensor,\n        x_mask: torch.Tensor,\n        offset: Union[int, torch.Tensor] = 0\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"Input x.\n\n        Args:\n            x (torch.Tensor): Input tensor (#batch, time, idim).\n            x_mask (torch.Tensor): Input mask (#batch, 1, time).\n\n        Returns:\n            torch.Tensor: linear input tensor (#batch, time', odim),\n                where time' = time .\n            torch.Tensor: linear input mask (#batch, 1, time'),\n                where time' = time .\n\n        \"\"\"\n        x = self.out(x)\n        x, pos_emb = self.pos_enc(x, offset)\n        return x, pos_emb, x_mask\n"
  },
  {
    "path": "cosyvoice/transformer/upsample_encoder.py",
    "content": "# Copyright (c) 2021 Mobvoi Inc (Binbin Zhang, Di Wu)\n#               2022 Xingchen Song (sxc19@mails.tsinghua.edu.cn)\n#               2024 Alibaba Inc (Xiang Lyu)\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# Modified from ESPnet(https://github.com/espnet/espnet)\n\"\"\"Encoder definition.\"\"\"\nfrom typing import Tuple\n\nimport torch\nfrom torch import nn\nfrom torch.nn import functional as F\n\nfrom cosyvoice.transformer.convolution import ConvolutionModule\nfrom cosyvoice.transformer.encoder_layer import ConformerEncoderLayer\nfrom cosyvoice.transformer.positionwise_feed_forward import PositionwiseFeedForward\nfrom cosyvoice.utils.class_utils import (\n    COSYVOICE_EMB_CLASSES,\n    COSYVOICE_SUBSAMPLE_CLASSES,\n    COSYVOICE_ATTENTION_CLASSES,\n    COSYVOICE_ACTIVATION_CLASSES,\n)\nfrom cosyvoice.utils.mask import make_pad_mask\nfrom cosyvoice.utils.mask import add_optional_chunk_mask\n\n\nclass Upsample1D(nn.Module):\n    \"\"\"A 1D upsampling layer with an optional convolution.\n\n    Parameters:\n        channels (`int`):\n            number of channels in the inputs and outputs.\n        use_conv (`bool`, default `False`):\n            option to use a convolution.\n        use_conv_transpose (`bool`, default `False`):\n            option to use a convolution transpose.\n        out_channels (`int`, optional):\n            number of output channels. Defaults to `channels`.\n    \"\"\"\n\n    def __init__(self, channels: int, out_channels: int, stride: int = 2):\n        super().__init__()\n        self.channels = channels\n        self.out_channels = out_channels\n        self.stride = stride\n        # In this mode, first repeat interpolate, than conv with stride=1\n        self.conv = nn.Conv1d(self.channels, self.out_channels, stride * 2 + 1, stride=1, padding=0)\n\n    def forward(self, inputs: torch.Tensor, input_lengths: torch.Tensor) -> Tuple[torch.Tensor, torch.Tensor]:\n        outputs = F.interpolate(inputs, scale_factor=float(self.stride), mode=\"nearest\")\n        outputs = F.pad(outputs, (self.stride * 2, 0), value=0.0)\n        outputs = self.conv(outputs)\n        return outputs, input_lengths * self.stride\n\n\nclass PreLookaheadLayer(nn.Module):\n    def __init__(self, in_channels: int, channels: int, pre_lookahead_len: int = 1):\n        super().__init__()\n        self.in_channels = in_channels\n        self.channels = channels\n        self.pre_lookahead_len = pre_lookahead_len\n        self.conv1 = nn.Conv1d(\n            in_channels, channels,\n            kernel_size=pre_lookahead_len + 1,\n            stride=1, padding=0,\n        )\n        self.conv2 = nn.Conv1d(\n            channels, in_channels,\n            kernel_size=3, stride=1, padding=0,\n        )\n\n    def forward(self, inputs: torch.Tensor, context: torch.Tensor = torch.zeros(0, 0, 0)) -> torch.Tensor:\n        \"\"\"\n        inputs: (batch_size, seq_len, channels)\n        \"\"\"\n        outputs = inputs.transpose(1, 2).contiguous()\n        context = context.transpose(1, 2).contiguous()\n        # look ahead\n        if context.size(2) == 0:\n            outputs = F.pad(outputs, (0, self.pre_lookahead_len), mode='constant', value=0.0)\n        else:\n            assert self.training is False, 'you have passed context, make sure that you are running inference mode'\n            assert context.size(2) == self.pre_lookahead_len\n            outputs = F.pad(torch.concat([outputs, context], dim=2), (0, self.pre_lookahead_len - context.size(2)), mode='constant', value=0.0)\n        outputs = F.leaky_relu(self.conv1(outputs))\n        # outputs\n        outputs = F.pad(outputs, (self.conv2.kernel_size[0] - 1, 0), mode='constant', value=0.0)\n        outputs = self.conv2(outputs)\n        outputs = outputs.transpose(1, 2).contiguous()\n\n        # residual connection\n        outputs = outputs + inputs\n        return outputs\n\n\nclass UpsampleConformerEncoder(torch.nn.Module):\n\n    def __init__(\n        self,\n        input_size: int,\n        output_size: int = 256,\n        attention_heads: int = 4,\n        linear_units: int = 2048,\n        num_blocks: int = 6,\n        dropout_rate: float = 0.1,\n        positional_dropout_rate: float = 0.1,\n        attention_dropout_rate: float = 0.0,\n        input_layer: str = \"conv2d\",\n        pos_enc_layer_type: str = \"rel_pos\",\n        normalize_before: bool = True,\n        static_chunk_size: int = 0,\n        use_dynamic_chunk: bool = False,\n        global_cmvn: torch.nn.Module = None,\n        use_dynamic_left_chunk: bool = False,\n        positionwise_conv_kernel_size: int = 1,\n        macaron_style: bool = True,\n        selfattention_layer_type: str = \"rel_selfattn\",\n        activation_type: str = \"swish\",\n        use_cnn_module: bool = True,\n        cnn_module_kernel: int = 15,\n        causal: bool = False,\n        cnn_module_norm: str = \"batch_norm\",\n        key_bias: bool = True,\n        gradient_checkpointing: bool = False,\n    ):\n        \"\"\"\n        Args:\n            input_size (int): input dim\n            output_size (int): dimension of attention\n            attention_heads (int): the number of heads of multi head attention\n            linear_units (int): the hidden units number of position-wise feed\n                forward\n            num_blocks (int): the number of decoder blocks\n            dropout_rate (float): dropout rate\n            attention_dropout_rate (float): dropout rate in attention\n            positional_dropout_rate (float): dropout rate after adding\n                positional encoding\n            input_layer (str): input layer type.\n                optional [linear, conv2d, conv2d6, conv2d8]\n            pos_enc_layer_type (str): Encoder positional encoding layer type.\n                opitonal [abs_pos, scaled_abs_pos, rel_pos, no_pos]\n            normalize_before (bool):\n                True: use layer_norm before each sub-block of a layer.\n                False: use layer_norm after each sub-block of a layer.\n            static_chunk_size (int): chunk size for static chunk training and\n                decoding\n            use_dynamic_chunk (bool): whether use dynamic chunk size for\n                training or not, You can only use fixed chunk(chunk_size > 0)\n                or dyanmic chunk size(use_dynamic_chunk = True)\n            global_cmvn (Optional[torch.nn.Module]): Optional GlobalCMVN module\n            use_dynamic_left_chunk (bool): whether use dynamic left chunk in\n                dynamic chunk training\n            key_bias: whether use bias in attention.linear_k, False for whisper models.\n            gradient_checkpointing: rerunning a forward-pass segment for each\n                checkpointed segment during backward.\n        \"\"\"\n        super().__init__()\n        self._output_size = output_size\n\n        self.global_cmvn = global_cmvn\n        self.embed = COSYVOICE_SUBSAMPLE_CLASSES[input_layer](\n            input_size,\n            output_size,\n            dropout_rate,\n            COSYVOICE_EMB_CLASSES[pos_enc_layer_type](output_size,\n                                                      positional_dropout_rate),\n        )\n\n        self.normalize_before = normalize_before\n        self.after_norm = torch.nn.LayerNorm(output_size, eps=1e-5)\n        self.static_chunk_size = static_chunk_size\n        self.use_dynamic_chunk = use_dynamic_chunk\n        self.use_dynamic_left_chunk = use_dynamic_left_chunk\n        self.gradient_checkpointing = gradient_checkpointing\n        activation = COSYVOICE_ACTIVATION_CLASSES[activation_type]()\n        # self-attention module definition\n        encoder_selfattn_layer_args = (\n            attention_heads,\n            output_size,\n            attention_dropout_rate,\n            key_bias,\n        )\n        # feed-forward module definition\n        positionwise_layer_args = (\n            output_size,\n            linear_units,\n            dropout_rate,\n            activation,\n        )\n        # convolution module definition\n        convolution_layer_args = (output_size, cnn_module_kernel, activation,\n                                  cnn_module_norm, causal)\n        self.pre_lookahead_layer = PreLookaheadLayer(in_channels=512, channels=512, pre_lookahead_len=3)\n        self.encoders = torch.nn.ModuleList([\n            ConformerEncoderLayer(\n                output_size,\n                COSYVOICE_ATTENTION_CLASSES[selfattention_layer_type](\n                    *encoder_selfattn_layer_args),\n                PositionwiseFeedForward(*positionwise_layer_args),\n                PositionwiseFeedForward(\n                    *positionwise_layer_args) if macaron_style else None,\n                ConvolutionModule(\n                    *convolution_layer_args) if use_cnn_module else None,\n                dropout_rate,\n                normalize_before,\n            ) for _ in range(num_blocks)\n        ])\n        self.up_layer = Upsample1D(channels=512, out_channels=512, stride=2)\n        self.up_embed = COSYVOICE_SUBSAMPLE_CLASSES[input_layer](\n            input_size,\n            output_size,\n            dropout_rate,\n            COSYVOICE_EMB_CLASSES[pos_enc_layer_type](output_size,\n                                                      positional_dropout_rate),\n        )\n        self.up_encoders = torch.nn.ModuleList([\n            ConformerEncoderLayer(\n                output_size,\n                COSYVOICE_ATTENTION_CLASSES[selfattention_layer_type](\n                    *encoder_selfattn_layer_args),\n                PositionwiseFeedForward(*positionwise_layer_args),\n                PositionwiseFeedForward(\n                    *positionwise_layer_args) if macaron_style else None,\n                ConvolutionModule(\n                    *convolution_layer_args) if use_cnn_module else None,\n                dropout_rate,\n                normalize_before,\n            ) for _ in range(4)\n        ])\n\n    def output_size(self) -> int:\n        return self._output_size\n\n    def forward(\n        self,\n        xs: torch.Tensor,\n        xs_lens: torch.Tensor,\n        context: torch.Tensor = torch.zeros(0, 0, 0),\n        decoding_chunk_size: int = 0,\n        num_decoding_left_chunks: int = -1,\n        streaming: bool = False,\n    ) -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"Embed positions in tensor.\n\n        Args:\n            xs: padded input tensor (B, T, D)\n            xs_lens: input length (B)\n            decoding_chunk_size: decoding chunk size for dynamic chunk\n                0: default for training, use random dynamic chunk.\n                <0: for decoding, use full chunk.\n                >0: for decoding, use fixed chunk size as set.\n            num_decoding_left_chunks: number of left chunks, this is for decoding,\n            the chunk size is decoding_chunk_size.\n                >=0: use num_decoding_left_chunks\n                <0: use all left chunks\n        Returns:\n            encoder output tensor xs, and subsampled masks\n            xs: padded output tensor (B, T' ~= T/subsample_rate, D)\n            masks: torch.Tensor batch padding mask after subsample\n                (B, 1, T' ~= T/subsample_rate)\n        NOTE(xcsong):\n            We pass the `__call__` method of the modules instead of `forward` to the\n            checkpointing API because `__call__` attaches all the hooks of the module.\n            https://discuss.pytorch.org/t/any-different-between-model-input-and-model-forward-input/3690/2\n        \"\"\"\n        T = xs.size(1)\n        masks = ~make_pad_mask(xs_lens, T).unsqueeze(1)  # (B, 1, T)\n        if self.global_cmvn is not None:\n            xs = self.global_cmvn(xs)\n        xs, pos_emb, masks = self.embed(xs, masks)\n        if context.size(1) != 0:\n            assert self.training is False, 'you have passed context, make sure that you are running inference mode'\n            context_masks = torch.ones(1, 1, context.size(1)).to(masks)\n            context, _, _ = self.embed(context, context_masks, offset=xs.size(1))\n        mask_pad = masks  # (B, 1, T/subsample_rate)\n        chunk_masks = add_optional_chunk_mask(xs, masks, False, False, 0, self.static_chunk_size if streaming is True else 0, -1)\n        # lookahead + conformer encoder\n        xs = self.pre_lookahead_layer(xs, context=context)\n        xs = self.forward_layers(xs, chunk_masks, pos_emb, mask_pad)\n\n        # upsample + conformer encoder\n        xs = xs.transpose(1, 2).contiguous()\n        xs, xs_lens = self.up_layer(xs, xs_lens)\n        xs = xs.transpose(1, 2).contiguous()\n        T = xs.size(1)\n        masks = ~make_pad_mask(xs_lens, T).unsqueeze(1)  # (B, 1, T)\n        xs, pos_emb, masks = self.up_embed(xs, masks)\n        mask_pad = masks  # (B, 1, T/subsample_rate)\n        chunk_masks = add_optional_chunk_mask(xs, masks, False, False, 0, self.static_chunk_size * self.up_layer.stride if streaming is True else 0, -1)\n        xs = self.forward_up_layers(xs, chunk_masks, pos_emb, mask_pad)\n\n        if self.normalize_before:\n            xs = self.after_norm(xs)\n        # Here we assume the mask is not changed in encoder layers, so just\n        # return the masks before encoder layers, and the masks will be used\n        # for cross attention with decoder later\n        return xs, masks\n\n    def forward_layers(self, xs: torch.Tensor, chunk_masks: torch.Tensor,\n                       pos_emb: torch.Tensor,\n                       mask_pad: torch.Tensor) -> torch.Tensor:\n        for layer in self.encoders:\n            xs, chunk_masks, _, _ = layer(xs, chunk_masks, pos_emb, mask_pad)\n        return xs\n\n    def forward_up_layers(self, xs: torch.Tensor, chunk_masks: torch.Tensor,\n                          pos_emb: torch.Tensor,\n                          mask_pad: torch.Tensor) -> torch.Tensor:\n        for layer in self.up_encoders:\n            xs, chunk_masks, _, _ = layer(xs, chunk_masks, pos_emb, mask_pad)\n        return xs\n"
  },
  {
    "path": "cosyvoice/utils/__init__.py",
    "content": ""
  },
  {
    "path": "cosyvoice/utils/class_utils.py",
    "content": "# Copyright [2023-11-28] <sxc19@mails.tsinghua.edu.cn, Xingchen Song>\n#            2024 Alibaba Inc (authors: Xiang Lyu)\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.\nimport torch\n\nfrom cosyvoice.transformer.activation import Swish\nfrom cosyvoice.transformer.subsampling import (\n    LinearNoSubsampling,\n    EmbedinigNoSubsampling,\n    Conv1dSubsampling2,\n    Conv2dSubsampling4,\n    Conv2dSubsampling6,\n    Conv2dSubsampling8,\n)\nfrom cosyvoice.transformer.embedding import (PositionalEncoding,\n                                             RelPositionalEncoding,\n                                             WhisperPositionalEncoding,\n                                             LearnablePositionalEncoding,\n                                             NoPositionalEncoding)\nfrom cosyvoice.transformer.attention import (MultiHeadedAttention,\n                                             RelPositionMultiHeadedAttention)\nfrom cosyvoice.transformer.embedding import EspnetRelPositionalEncoding\nfrom cosyvoice.transformer.subsampling import LegacyLinearNoSubsampling\nfrom cosyvoice.llm.llm import TransformerLM, Qwen2LM, CosyVoice3LM\nfrom cosyvoice.flow.flow import MaskedDiffWithXvec, CausalMaskedDiffWithXvec, CausalMaskedDiffWithDiT\nfrom cosyvoice.hifigan.generator import HiFTGenerator, CausalHiFTGenerator\nfrom cosyvoice.cli.model import CosyVoiceModel, CosyVoice2Model, CosyVoice3Model\n\n\nCOSYVOICE_ACTIVATION_CLASSES = {\n    \"hardtanh\": torch.nn.Hardtanh,\n    \"tanh\": torch.nn.Tanh,\n    \"relu\": torch.nn.ReLU,\n    \"selu\": torch.nn.SELU,\n    \"swish\": getattr(torch.nn, \"SiLU\", Swish),\n    \"gelu\": torch.nn.GELU,\n}\n\nCOSYVOICE_SUBSAMPLE_CLASSES = {\n    \"linear\": LinearNoSubsampling,\n    \"linear_legacy\": LegacyLinearNoSubsampling,\n    \"embed\": EmbedinigNoSubsampling,\n    \"conv1d2\": Conv1dSubsampling2,\n    \"conv2d\": Conv2dSubsampling4,\n    \"conv2d6\": Conv2dSubsampling6,\n    \"conv2d8\": Conv2dSubsampling8,\n    'paraformer_dummy': torch.nn.Identity\n}\n\nCOSYVOICE_EMB_CLASSES = {\n    \"embed\": PositionalEncoding,\n    \"abs_pos\": PositionalEncoding,\n    \"rel_pos\": RelPositionalEncoding,\n    \"rel_pos_espnet\": EspnetRelPositionalEncoding,\n    \"no_pos\": NoPositionalEncoding,\n    \"abs_pos_whisper\": WhisperPositionalEncoding,\n    \"embed_learnable_pe\": LearnablePositionalEncoding,\n}\n\nCOSYVOICE_ATTENTION_CLASSES = {\n    \"selfattn\": MultiHeadedAttention,\n    \"rel_selfattn\": RelPositionMultiHeadedAttention,\n}\n\n\ndef get_model_type(configs):\n    # NOTE CosyVoice2Model inherits CosyVoiceModel\n    if isinstance(configs['llm'], TransformerLM) and isinstance(configs['flow'], MaskedDiffWithXvec) and isinstance(configs['hift'], HiFTGenerator):\n        return CosyVoiceModel\n    if isinstance(configs['llm'], Qwen2LM) and isinstance(configs['flow'], CausalMaskedDiffWithXvec) and isinstance(configs['hift'], HiFTGenerator):\n        return CosyVoice2Model\n    if isinstance(configs['llm'], CosyVoice3LM) and isinstance(configs['flow'], CausalMaskedDiffWithDiT) and isinstance(configs['hift'], CausalHiFTGenerator):\n        return CosyVoice3Model\n    raise TypeError('No valid model type found!')\n"
  },
  {
    "path": "cosyvoice/utils/common.py",
    "content": "# Copyright (c) 2020 Mobvoi Inc (Binbin Zhang)\n#               2024 Alibaba Inc (authors: Xiang Lyu)\n#               2025 Alibaba Inc (authors: Xiang Lyu, Bofan Zhou)\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# Modified from ESPnet(https://github.com/espnet/espnet)\n\"\"\"Unility functions for Transformer.\"\"\"\n\nimport queue\nimport random\nfrom typing import List\n\nimport numpy as np\nimport torch\n\nIGNORE_ID = -1\n\ninstruct_list = [\"You are a helpful assistant. 请用广东话表达。<|endofprompt|>\",\n                 \"You are a helpful assistant. 请用东北话表达。<|endofprompt|>\",\n                 \"You are a helpful assistant. 请用甘肃话表达。<|endofprompt|>\",\n                 \"You are a helpful assistant. 请用贵州话表达。<|endofprompt|>\",\n                 \"You are a helpful assistant. 请用河南话表达。<|endofprompt|>\",\n                 \"You are a helpful assistant. 请用湖北话表达。<|endofprompt|>\",\n                 \"You are a helpful assistant. 请用湖南话表达。<|endofprompt|>\",\n                 \"You are a helpful assistant. 请用江西话表达。<|endofprompt|>\",\n                 \"You are a helpful assistant. 请用闽南话表达。<|endofprompt|>\",\n                 \"You are a helpful assistant. 请用宁夏话表达。<|endofprompt|>\",\n                 \"You are a helpful assistant. 请用山西话表达。<|endofprompt|>\",\n                 \"You are a helpful assistant. 请用陕西话表达。<|endofprompt|>\",\n                 \"You are a helpful assistant. 请用山东话表达。<|endofprompt|>\",\n                 \"You are a helpful assistant. 请用上海话表达。<|endofprompt|>\",\n                 \"You are a helpful assistant. 请用四川话表达。<|endofprompt|>\",\n                 \"You are a helpful assistant. 请用天津话表达。<|endofprompt|>\",\n                 \"You are a helpful assistant. 请用云南话表达。<|endofprompt|>\",\n                 \"You are a helpful assistant. Please say a sentence as loudly as possible.<|endofprompt|>\",\n                 \"You are a helpful assistant. Please say a sentence in a very soft voice.<|endofprompt|>\",\n                 \"You are a helpful assistant. 请用尽可能慢地语速说一句话。<|endofprompt|>\",\n                 \"You are a helpful assistant. 请用尽可能快地语速说一句话。<|endofprompt|>\",\n                 \"You are a helpful assistant. 请非常开心地说一句话。<|endofprompt|>\",\n                 \"You are a helpful assistant. 请非常伤心地说一句话。<|endofprompt|>\",\n                 \"You are a helpful assistant. 请非常生气地说一句话。<|endofprompt|>\",\n                 \"You are a helpful assistant. 我想体验一下小猪佩奇风格，可以吗？<|endofprompt|>\",\n                 \"You are a helpful assistant. 你可以尝试用机器人的方式解答吗？<|endofprompt|>\"]\n\n\ndef pad_list(xs: List[torch.Tensor], pad_value: int):\n    \"\"\"Perform padding for the list of tensors.\n\n    Args:\n        xs (List): List of Tensors [(T_1, `*`), (T_2, `*`), ..., (T_B, `*`)].\n        pad_value (float): Value for padding.\n\n    Returns:\n        Tensor: Padded tensor (B, Tmax, `*`).\n\n    Examples:\n        >>> x = [torch.ones(4), torch.ones(2), torch.ones(1)]\n        >>> x\n        [tensor([1., 1., 1., 1.]), tensor([1., 1.]), tensor([1.])]\n        >>> pad_list(x, 0)\n        tensor([[1., 1., 1., 1.],\n                [1., 1., 0., 0.],\n                [1., 0., 0., 0.]])\n\n    \"\"\"\n    max_len = max([len(item) for item in xs])\n    batchs = len(xs)\n    ndim = xs[0].ndim\n    if ndim == 1:\n        pad_res = torch.zeros(batchs,\n                              max_len,\n                              dtype=xs[0].dtype,\n                              device=xs[0].device)\n    elif ndim == 2:\n        pad_res = torch.zeros(batchs,\n                              max_len,\n                              xs[0].shape[1],\n                              dtype=xs[0].dtype,\n                              device=xs[0].device)\n    elif ndim == 3:\n        pad_res = torch.zeros(batchs,\n                              max_len,\n                              xs[0].shape[1],\n                              xs[0].shape[2],\n                              dtype=xs[0].dtype,\n                              device=xs[0].device)\n    else:\n        raise ValueError(f\"Unsupported ndim: {ndim}\")\n    pad_res.fill_(pad_value)\n    for i in range(batchs):\n        pad_res[i, :len(xs[i])] = xs[i]\n    return pad_res\n\n\ndef th_accuracy(pad_outputs: torch.Tensor, pad_targets: torch.Tensor,\n                ignore_label: int) -> torch.Tensor:\n    \"\"\"Calculate accuracy.\n\n    Args:\n        pad_outputs (Tensor): Prediction tensors (B * Lmax, D).\n        pad_targets (LongTensor): Target label tensors (B, Lmax).\n        ignore_label (int): Ignore label id.\n\n    Returns:\n        torch.Tensor: Accuracy value (0.0 - 1.0).\n\n    \"\"\"\n    pad_pred = pad_outputs.view(pad_targets.size(0), pad_targets.size(1),\n                                pad_outputs.size(1)).argmax(2)\n    mask = pad_targets != ignore_label\n    numerator = torch.sum(\n        pad_pred.masked_select(mask) == pad_targets.masked_select(mask))\n    denominator = torch.sum(mask)\n    return (numerator / denominator).detach()\n\n\ndef get_padding(kernel_size, dilation=1):\n    return int((kernel_size * dilation - dilation) / 2)\n\n\ndef init_weights(m, mean=0.0, std=0.01):\n    classname = m.__class__.__name__\n    if classname.find(\"Conv\") != -1:\n        m.weight.data.normal_(mean, std)\n\n\n# Repetition Aware Sampling in VALL-E 2\ndef ras_sampling(weighted_scores, decoded_tokens, sampling, top_p=0.8, top_k=25, win_size=10, tau_r=0.1):\n    top_ids = nucleus_sampling(weighted_scores, top_p=top_p, top_k=top_k)\n    rep_num = (torch.tensor(decoded_tokens[-win_size:]).to(weighted_scores.device) == top_ids).sum().item()\n    if rep_num >= win_size * tau_r:\n        weighted_scores[top_ids] = -float('inf')\n        top_ids = random_sampling(weighted_scores, decoded_tokens, sampling)\n    return top_ids\n\n\ndef nucleus_sampling(weighted_scores, top_p=0.8, top_k=25):\n    prob, indices = [], []\n    cum_prob = 0.0\n    sorted_value, sorted_idx = weighted_scores.softmax(dim=0).sort(descending=True, stable=True)\n    for i in range(len(sorted_idx)):\n        # sampling both top-p and numbers.\n        if cum_prob < top_p and len(prob) < top_k:\n            cum_prob += sorted_value[i]\n            prob.append(sorted_value[i])\n            indices.append(sorted_idx[i])\n        else:\n            break\n    prob = torch.tensor(prob).to(weighted_scores)\n    indices = torch.tensor(indices, dtype=torch.long).to(weighted_scores.device)\n    top_ids = indices[prob.multinomial(1, replacement=True)].item()\n    return top_ids\n\n\ndef random_sampling(weighted_scores, decoded_tokens, sampling):\n    top_ids = weighted_scores.softmax(dim=0).multinomial(1, replacement=True).item()\n    return top_ids\n\n\ndef fade_in_out(fade_in_mel, fade_out_mel, window):\n    device = fade_in_mel.device\n    fade_in_mel, fade_out_mel = fade_in_mel.cpu(), fade_out_mel.cpu()\n    mel_overlap_len = int(window.shape[0] / 2)\n    if fade_in_mel.device == torch.device('cpu'):\n        fade_in_mel = fade_in_mel.clone()\n    fade_in_mel[..., :mel_overlap_len] = fade_in_mel[..., :mel_overlap_len] * window[:mel_overlap_len] + \\\n        fade_out_mel[..., -mel_overlap_len:] * window[mel_overlap_len:]\n    return fade_in_mel.to(device)\n\n\ndef set_all_random_seed(seed):\n    random.seed(seed)\n    np.random.seed(seed)\n    torch.manual_seed(seed)\n    torch.cuda.manual_seed_all(seed)\n\n\ndef mask_to_bias(mask: torch.Tensor, dtype: torch.dtype) -> torch.Tensor:\n    assert mask.dtype == torch.bool\n    assert dtype in [torch.float32, torch.bfloat16, torch.float16]\n    mask = mask.to(dtype)\n    # attention mask bias\n    # NOTE(Mddct): torch.finfo jit issues\n    #     chunk_masks = (1.0 - chunk_masks) * torch.finfo(dtype).min\n    mask = (1.0 - mask) * -1.0e+10\n    return mask\n\n\nclass TrtContextWrapper:\n    def __init__(self, trt_engine, trt_concurrent=1, device='cuda:0'):\n        self.trt_context_pool = queue.Queue(maxsize=trt_concurrent)\n        self.trt_engine = trt_engine\n        for _ in range(trt_concurrent):\n            trt_context = trt_engine.create_execution_context()\n            trt_stream = torch.cuda.stream(torch.cuda.Stream(device))\n            assert trt_context is not None, 'failed to create trt context, maybe not enough CUDA memory, try reduce current trt concurrent {}'.format(trt_concurrent)\n            self.trt_context_pool.put([trt_context, trt_stream])\n        assert self.trt_context_pool.empty() is False, 'no avaialbe estimator context'\n\n    def acquire_estimator(self):\n        return self.trt_context_pool.get(), self.trt_engine\n\n    def release_estimator(self, context, stream):\n        self.trt_context_pool.put([context, stream])\n"
  },
  {
    "path": "cosyvoice/utils/executor.py",
    "content": "# Copyright (c) 2020 Mobvoi Inc (Binbin Zhang)\n#               2024 Alibaba Inc (authors: Xiang Lyu)\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\nimport logging\nfrom contextlib import nullcontext\nimport os\n\nimport torch\nimport torch.distributed as dist\n\nfrom cosyvoice.utils.train_utils import update_parameter_and_lr, log_per_step, log_per_save, batch_forward, batch_backward, save_model, cosyvoice_join\n\n\nclass Executor:\n\n    def __init__(self, gan: bool = False, ref_model: torch.nn.Module = None, dpo_loss: torch.nn.Module = None):\n        self.gan = gan\n        self.ref_model = ref_model\n        self.dpo_loss = dpo_loss\n        self.step = 0\n        self.epoch = 0\n        self.rank = int(os.environ.get('RANK', 0))\n        self.device = torch.device('cuda:{}'.format(self.rank))\n\n    def train_one_epoc(self, model, optimizer, scheduler, train_data_loader, cv_data_loader, writer, info_dict, scaler, group_join, ref_model=None):\n        ''' Train one epoch\n        '''\n\n        lr = optimizer.param_groups[0]['lr']\n        logging.info('Epoch {} TRAIN info lr {} rank {}'.format(self.epoch, lr, self.rank))\n        logging.info('using accumulate grad, new batch size is {} times'\n                     ' larger than before'.format(info_dict['accum_grad']))\n        # A context manager to be used in conjunction with an instance of\n        # torch.nn.parallel.DistributedDataParallel to be able to train\n        # with uneven inputs across participating processes.\n        model.train()\n        if self.ref_model is not None:\n            self.ref_model.eval()\n        model_context = model.join if info_dict['train_engine'] == 'torch_ddp' else nullcontext\n        with model_context():\n            for batch_idx, batch_dict in enumerate(train_data_loader):\n                info_dict[\"tag\"] = \"TRAIN\"\n                info_dict[\"step\"] = self.step\n                info_dict[\"epoch\"] = self.epoch\n                info_dict[\"batch_idx\"] = batch_idx\n                if cosyvoice_join(group_join, info_dict):\n                    break\n\n                # Disable gradient synchronizations across DDP processes.\n                # Within this context, gradients will be accumulated on module\n                # variables, which will later be synchronized.\n                if info_dict['train_engine'] == 'torch_ddp' and (batch_idx + 1) % info_dict[\"accum_grad\"] != 0:\n                    context = model.no_sync\n                # Used for single gpu training and DDP gradient synchronization\n                # processes.\n                else:\n                    context = nullcontext\n\n                with context():\n                    info_dict = batch_forward(model, batch_dict, scaler, info_dict, ref_model=self.ref_model, dpo_loss=self.dpo_loss)\n                    info_dict = batch_backward(model, scaler, info_dict)\n\n                info_dict = update_parameter_and_lr(model, optimizer, scheduler, scaler, info_dict)\n                log_per_step(writer, info_dict)\n                # NOTE specify save_per_step in cosyvoice.yaml if you want to enable step save\n                if info_dict['save_per_step'] > 0 and (self.step + 1) % info_dict['save_per_step'] == 0 and \\\n                   (batch_idx + 1) % info_dict[\"accum_grad\"] == 0:\n                    dist.barrier()\n                    self.cv(model, cv_data_loader, writer, info_dict, on_batch_end=False)\n                    model.train()\n                if (batch_idx + 1) % info_dict[\"accum_grad\"] == 0:\n                    self.step += 1\n        dist.barrier()\n        self.cv(model, cv_data_loader, writer, info_dict, on_batch_end=True)\n\n    def train_one_epoc_gan(self, model, optimizer, scheduler, optimizer_d, scheduler_d, train_data_loader, cv_data_loader,\n                           writer, info_dict, scaler, group_join):\n        ''' Train one epoch\n        '''\n\n        lr = optimizer.param_groups[0]['lr']\n        logging.info('Epoch {} TRAIN info lr {} rank {}'.format(self.epoch, lr, self.rank))\n        logging.info('using accumulate grad, new batch size is {} times'\n                     ' larger than before'.format(info_dict['accum_grad']))\n        # A context manager to be used in conjunction with an instance of\n        # torch.nn.parallel.DistributedDataParallel to be able to train\n        # with uneven inputs across participating processes.\n        model.train()\n        model_context = model.join if info_dict['train_engine'] == 'torch_ddp' else nullcontext\n        with model_context():\n            for batch_idx, batch_dict in enumerate(train_data_loader):\n                info_dict[\"tag\"] = \"TRAIN\"\n                info_dict[\"step\"] = self.step\n                info_dict[\"epoch\"] = self.epoch\n                info_dict[\"batch_idx\"] = batch_idx\n                if cosyvoice_join(group_join, info_dict):\n                    break\n\n                # Disable gradient synchronizations across DDP processes.\n                # Within this context, gradients will be accumulated on module\n                # variables, which will later be synchronized.\n                if info_dict['train_engine'] == 'torch_ddp' and (batch_idx + 1) % info_dict[\"accum_grad\"] != 0:\n                    context = model.no_sync\n                # Used for single gpu training and DDP gradient synchronization\n                # processes.\n                else:\n                    context = nullcontext\n\n                with context():\n                    batch_dict['turn'] = 'discriminator'\n                    info_dict = batch_forward(model, batch_dict, scaler, info_dict)\n                    info_dict = batch_backward(model, scaler, info_dict)\n                info_dict = update_parameter_and_lr(model, optimizer_d, scheduler_d, scaler, info_dict)\n                optimizer.zero_grad()\n                log_per_step(writer, info_dict)\n                with context():\n                    batch_dict['turn'] = 'generator'\n                    info_dict = batch_forward(model, batch_dict, scaler, info_dict)\n                    info_dict = batch_backward(model, scaler, info_dict)\n                info_dict = update_parameter_and_lr(model, optimizer, scheduler, scaler, info_dict)\n                optimizer_d.zero_grad()\n                log_per_step(writer, info_dict)\n                # NOTE specify save_per_step in cosyvoice.yaml if you want to enable step save\n                if info_dict['save_per_step'] > 0 and (self.step + 1) % info_dict['save_per_step'] == 0 and \\\n                   (batch_idx + 1) % info_dict[\"accum_grad\"] == 0:\n                    dist.barrier()\n                    self.cv(model, cv_data_loader, writer, info_dict, on_batch_end=False)\n                    model.train()\n                if (batch_idx + 1) % info_dict[\"accum_grad\"] == 0:\n                    self.step += 1\n        dist.barrier()\n        self.cv(model, cv_data_loader, writer, info_dict, on_batch_end=True)\n\n    @torch.inference_mode()\n    def cv(self, model, cv_data_loader, writer, info_dict, on_batch_end=True):\n        ''' Cross validation on\n        '''\n        logging.info('Epoch {} Step {} on_batch_end {} CV rank {}'.format(self.epoch, self.step + 1, on_batch_end, self.rank))\n        model.eval()\n        total_num_utts, total_loss_dict = 0, {}  # avoid division by 0\n        for batch_idx, batch_dict in enumerate(cv_data_loader):\n            info_dict[\"tag\"] = \"CV\"\n            info_dict[\"step\"] = self.step\n            info_dict[\"epoch\"] = self.epoch\n            info_dict[\"batch_idx\"] = batch_idx\n\n            num_utts = len(batch_dict[\"utts\"])\n            total_num_utts += num_utts\n\n            if self.gan is True:\n                batch_dict['turn'] = 'generator'\n            info_dict = batch_forward(model, batch_dict, None, info_dict)\n\n            for k, v in info_dict['loss_dict'].items():\n                if k not in total_loss_dict:\n                    total_loss_dict[k] = []\n                total_loss_dict[k].append(v.mean().item() * num_utts)\n            log_per_step(None, info_dict)\n        for k, v in total_loss_dict.items():\n            total_loss_dict[k] = sum(v) / total_num_utts\n        info_dict['loss_dict'] = total_loss_dict\n        log_per_save(writer, info_dict)\n        model_name = 'epoch_{}_whole'.format(self.epoch) if on_batch_end else 'epoch_{}_step_{}'.format(self.epoch, self.step + 1)\n        save_model(model, model_name, info_dict)\n"
  },
  {
    "path": "cosyvoice/utils/file_utils.py",
    "content": "# Copyright (c) 2021 Mobvoi Inc. (authors: Binbin Zhang)\n#               2024 Alibaba Inc (authors: Xiang Lyu, Zetao Hu)\n#               2025 Alibaba Inc (authors: Xiang Lyu, Yabin Li)\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\nimport os\nimport json\nimport torch\nimport torchaudio\nimport logging\nlogging.getLogger('matplotlib').setLevel(logging.WARNING)\nlogging.basicConfig(level=logging.DEBUG,\n                    format='%(asctime)s %(levelname)s %(message)s')\n\n\ndef read_lists(list_file):\n    lists = []\n    with open(list_file, 'r', encoding='utf8') as fin:\n        for line in fin:\n            lists.append(line.strip())\n    return lists\n\n\ndef read_json_lists(list_file):\n    lists = read_lists(list_file)\n    results = {}\n    for fn in lists:\n        with open(fn, 'r', encoding='utf8') as fin:\n            results.update(json.load(fin))\n    return results\n\n\ndef load_wav(wav, target_sr, min_sr=16000):\n    speech, sample_rate = torchaudio.load(wav, backend='soundfile')\n    speech = speech.mean(dim=0, keepdim=True)\n    if sample_rate != target_sr:\n        assert sample_rate >= min_sr, 'wav sample rate {} must be greater than {}'.format(sample_rate, target_sr)\n        speech = torchaudio.transforms.Resample(orig_freq=sample_rate, new_freq=target_sr)(speech)\n    return speech\n\n\ndef convert_onnx_to_trt(trt_model, trt_kwargs, onnx_model, fp16):\n    import tensorrt as trt\n    logging.info(\"Converting onnx to trt...\")\n    network_flags = 1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)\n    logger = trt.Logger(trt.Logger.INFO)\n    builder = trt.Builder(logger)\n    network = builder.create_network(network_flags)\n    parser = trt.OnnxParser(network, logger)\n    config = builder.create_builder_config()\n    config.set_memory_pool_limit(trt.MemoryPoolType.WORKSPACE, 1 << 32)  # 4GB\n    if fp16:\n        config.set_flag(trt.BuilderFlag.FP16)\n    profile = builder.create_optimization_profile()\n    # load onnx model\n    with open(onnx_model, \"rb\") as f:\n        if not parser.parse(f.read()):\n            for error in range(parser.num_errors):\n                print(parser.get_error(error))\n            raise ValueError('failed to parse {}'.format(onnx_model))\n    # set input shapes\n    for i in range(len(trt_kwargs['input_names'])):\n        profile.set_shape(trt_kwargs['input_names'][i], trt_kwargs['min_shape'][i], trt_kwargs['opt_shape'][i], trt_kwargs['max_shape'][i])\n    tensor_dtype = trt.DataType.HALF if fp16 else trt.DataType.FLOAT\n    # set input and output data type\n    for i in range(network.num_inputs):\n        input_tensor = network.get_input(i)\n        input_tensor.dtype = tensor_dtype\n    for i in range(network.num_outputs):\n        output_tensor = network.get_output(i)\n        output_tensor.dtype = tensor_dtype\n    config.add_optimization_profile(profile)\n    engine_bytes = builder.build_serialized_network(network, config)\n    # save trt engine\n    with open(trt_model, \"wb\") as f:\n        f.write(engine_bytes)\n    logging.info(\"Succesfully convert onnx to trt...\")\n\n\n# NOTE do not support bistream inference as only speech token embedding/head is kept\ndef export_cosyvoice2_vllm(model, model_path, device):\n    if os.path.exists(model_path):\n        return\n\n    dtype = torch.bfloat16\n    # lm_head\n    use_bias = True if model.llm_decoder.bias is not None else False\n    model.llm.model.lm_head = model.llm_decoder\n    # embed_tokens\n    embed_tokens = model.llm.model.model.embed_tokens\n    model.llm.model.set_input_embeddings(model.speech_embedding)\n    model.llm.model.to(device)\n    model.llm.model.to(dtype)\n    tmp_vocab_size = model.llm.model.config.vocab_size\n    tmp_tie_embedding = model.llm.model.config.tie_word_embeddings\n    del model.llm.model.generation_config.eos_token_id\n    del model.llm.model.config.bos_token_id\n    del model.llm.model.config.eos_token_id\n    model.llm.model.config.vocab_size = model.speech_embedding.num_embeddings\n    model.llm.model.config.tie_word_embeddings = False\n    model.llm.model.config.use_bias = use_bias\n    model.llm.model.save_pretrained(model_path)\n    if use_bias is True:\n        os.system('sed -i s@Qwen2ForCausalLM@CosyVoice2ForCausalLM@g {}/config.json'.format(os.path.abspath(model_path)))\n    model.llm.model.config.vocab_size = tmp_vocab_size\n    model.llm.model.config.tie_word_embeddings = tmp_tie_embedding\n    model.llm.model.set_input_embeddings(embed_tokens)\n"
  },
  {
    "path": "cosyvoice/utils/frontend_utils.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu, Zhihao Du)\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\nimport re\nimport regex\nchinese_char_pattern = re.compile(r'[\\u4e00-\\u9fff]+')\n\n\n# whether contain chinese character\ndef contains_chinese(text):\n    return bool(chinese_char_pattern.search(text))\n\n\n# replace special symbol\ndef replace_corner_mark(text):\n    text = text.replace('²', '平方')\n    text = text.replace('³', '立方')\n    return text\n\n\n# remove meaningless symbol\ndef remove_bracket(text):\n    text = text.replace('（', '').replace('）', '')\n    text = text.replace('【', '').replace('】', '')\n    text = text.replace('`', '').replace('`', '')\n    text = text.replace(\"——\", \" \")\n    return text\n\n\n# spell Arabic numerals\ndef spell_out_number(text: str, inflect_parser):\n    new_text = []\n    st = None\n    for i, c in enumerate(text):\n        if not c.isdigit():\n            if st is not None:\n                num_str = inflect_parser.number_to_words(text[st: i])\n                new_text.append(num_str)\n                st = None\n            new_text.append(c)\n        else:\n            if st is None:\n                st = i\n    if st is not None and st < len(text):\n        num_str = inflect_parser.number_to_words(text[st:])\n        new_text.append(num_str)\n    return ''.join(new_text)\n\n\n# split paragrah logic：\n# 1. per sentence max len token_max_n, min len token_min_n, merge if last sentence len less than merge_len\n# 2. cal sentence len according to lang\n# 3. split sentence according to puncatation\ndef split_paragraph(text: str, tokenize, lang=\"zh\", token_max_n=80, token_min_n=60, merge_len=20, comma_split=False):\n    def calc_utt_length(_text: str):\n        if lang == \"zh\":\n            return len(_text)\n        else:\n            return len(tokenize(_text))\n\n    def should_merge(_text: str):\n        if lang == \"zh\":\n            return len(_text) < merge_len\n        else:\n            return len(tokenize(_text)) < merge_len\n\n    if lang == \"zh\":\n        pounc = ['。', '？', '！', '；', '：', '、', '.', '?', '!', ';']\n    else:\n        pounc = ['.', '?', '!', ';', ':']\n    if comma_split:\n        pounc.extend(['，', ','])\n\n    if text[-1] not in pounc:\n        if lang == \"zh\":\n            text += \"。\"\n        else:\n            text += \".\"\n\n    st = 0\n    utts = []\n    for i, c in enumerate(text):\n        if c in pounc:\n            if len(text[st: i]) > 0:\n                utts.append(text[st: i] + c)\n            if i + 1 < len(text) and text[i + 1] in ['\"', '”']:\n                tmp = utts.pop(-1)\n                utts.append(tmp + text[i + 1])\n                st = i + 2\n            else:\n                st = i + 1\n\n    final_utts = []\n    cur_utt = \"\"\n    for utt in utts:\n        if calc_utt_length(cur_utt + utt) > token_max_n and calc_utt_length(cur_utt) > token_min_n:\n            final_utts.append(cur_utt)\n            cur_utt = \"\"\n        cur_utt = cur_utt + utt\n    if len(cur_utt) > 0:\n        if should_merge(cur_utt) and len(final_utts) != 0:\n            final_utts[-1] = final_utts[-1] + cur_utt\n        else:\n            final_utts.append(cur_utt)\n\n    return final_utts\n\n\n# remove blank between chinese character\ndef replace_blank(text: str):\n    out_str = []\n    for i, c in enumerate(text):\n        if c == \" \":\n            if ((text[i + 1].isascii() and text[i + 1] != \" \") and\n                    (text[i - 1].isascii() and text[i - 1] != \" \")):\n                out_str.append(c)\n        else:\n            out_str.append(c)\n    return \"\".join(out_str)\n\n\ndef is_only_punctuation(text):\n    # Regular expression: Match strings that consist only of punctuation marks or are empty.\n    punctuation_pattern = r'^[\\p{P}\\p{S}]*$'\n    return bool(regex.fullmatch(punctuation_pattern, text))\n"
  },
  {
    "path": "cosyvoice/utils/losses.py",
    "content": "import torch\nimport torch.nn.functional as F\nfrom typing import Tuple\n\n\ndef tpr_loss(disc_real_outputs, disc_generated_outputs, tau):\n    loss = 0\n    for dr, dg in zip(disc_real_outputs, disc_generated_outputs):\n        m_DG = torch.median((dr - dg))\n        L_rel = torch.mean((((dr - dg) - m_DG) ** 2)[dr < dg + m_DG])\n        loss += tau - F.relu(tau - L_rel)\n    return loss\n\n\ndef mel_loss(real_speech, generated_speech, mel_transforms):\n    loss = 0\n    for transform in mel_transforms:\n        mel_r = transform(real_speech)\n        mel_g = transform(generated_speech)\n        loss += F.l1_loss(mel_g, mel_r)\n    return loss\n\n\nclass DPOLoss(torch.nn.Module):\n    \"\"\"\n    DPO Loss\n    \"\"\"\n\n    def __init__(self, beta: float, label_smoothing: float = 0.0, ipo: bool = False) -> None:\n        super().__init__()\n        self.beta = beta\n        self.label_smoothing = label_smoothing\n        self.ipo = ipo\n\n    def forward(\n        self,\n        policy_chosen_logps: torch.Tensor,\n        policy_rejected_logps: torch.Tensor,\n        reference_chosen_logps: torch.Tensor,\n        reference_rejected_logps: torch.Tensor,\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        pi_logratios = policy_chosen_logps - policy_rejected_logps\n        ref_logratios = reference_chosen_logps - reference_rejected_logps\n        logits = pi_logratios - ref_logratios\n        if self.ipo:\n            losses = (logits - 1 / (2 * self.beta)) ** 2  # Eq. 17 of https://arxiv.org/pdf/2310.12036v2.pdf\n        else:\n            # Eq. 3 https://ericmitchell.ai/cdpo.pdf; label_smoothing=0 gives original DPO (Eq. 7 of https://arxiv.org/pdf/2305.18290.pdf)\n            losses = (\n                -F.logsigmoid(self.beta * logits) * (1 - self.label_smoothing)\n                - F.logsigmoid(-self.beta * logits) * self.label_smoothing\n            )\n        loss = losses.mean()\n        chosen_rewards = self.beta * (policy_chosen_logps - reference_chosen_logps).detach()\n        rejected_rewards = self.beta * (policy_rejected_logps - reference_rejected_logps).detach()\n\n        return loss, chosen_rewards, rejected_rewards\n"
  },
  {
    "path": "cosyvoice/utils/mask.py",
    "content": "# Copyright (c) 2019 Shigeki Karita\n#               2020 Mobvoi Inc (Binbin Zhang)\n#               2024 Alibaba Inc (authors: Xiang Lyu)\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\nimport torch\n'''\ndef subsequent_mask(\n        size: int,\n        device: torch.device = torch.device(\"cpu\"),\n) -> torch.Tensor:\n    \"\"\"Create mask for subsequent steps (size, size).\n\n    This mask is used only in decoder which works in an auto-regressive mode.\n    This means the current step could only do attention with its left steps.\n\n    In encoder, fully attention is used when streaming is not necessary and\n    the sequence is not long. In this  case, no attention mask is needed.\n\n    When streaming is need, chunk-based attention is used in encoder. See\n    subsequent_chunk_mask for the chunk-based attention mask.\n\n    Args:\n        size (int): size of mask\n        str device (str): \"cpu\" or \"cuda\" or torch.Tensor.device\n        dtype (torch.device): result dtype\n\n    Returns:\n        torch.Tensor: mask\n\n    Examples:\n        >>> subsequent_mask(3)\n        [[1, 0, 0],\n         [1, 1, 0],\n         [1, 1, 1]]\n    \"\"\"\n    ret = torch.ones(size, size, device=device, dtype=torch.bool)\n    return torch.tril(ret)\n'''\n\n\ndef subsequent_mask(\n        size: int,\n        device: torch.device = torch.device(\"cpu\"),\n) -> torch.Tensor:\n    \"\"\"Create mask for subsequent steps (size, size).\n\n    This mask is used only in decoder which works in an auto-regressive mode.\n    This means the current step could only do attention with its left steps.\n\n    In encoder, fully attention is used when streaming is not necessary and\n    the sequence is not long. In this  case, no attention mask is needed.\n\n    When streaming is need, chunk-based attention is used in encoder. See\n    subsequent_chunk_mask for the chunk-based attention mask.\n\n    Args:\n        size (int): size of mask\n        str device (str): \"cpu\" or \"cuda\" or torch.Tensor.device\n        dtype (torch.device): result dtype\n\n    Returns:\n        torch.Tensor: mask\n\n    Examples:\n        >>> subsequent_mask(3)\n        [[1, 0, 0],\n         [1, 1, 0],\n         [1, 1, 1]]\n    \"\"\"\n    arange = torch.arange(size, device=device)\n    mask = arange.expand(size, size)\n    arange = arange.unsqueeze(-1)\n    mask = mask <= arange\n    return mask\n\n\ndef subsequent_chunk_mask_deprecated(\n        size: int,\n        chunk_size: int,\n        num_left_chunks: int = -1,\n        device: torch.device = torch.device(\"cpu\"),\n) -> torch.Tensor:\n    \"\"\"Create mask for subsequent steps (size, size) with chunk size,\n       this is for streaming encoder\n\n    Args:\n        size (int): size of mask\n        chunk_size (int): size of chunk\n        num_left_chunks (int): number of left chunks\n            <0: use full chunk\n            >=0: use num_left_chunks\n        device (torch.device): \"cpu\" or \"cuda\" or torch.Tensor.device\n\n    Returns:\n        torch.Tensor: mask\n\n    Examples:\n        >>> subsequent_chunk_mask(4, 2)\n        [[1, 1, 0, 0],\n         [1, 1, 0, 0],\n         [1, 1, 1, 1],\n         [1, 1, 1, 1]]\n    \"\"\"\n    ret = torch.zeros(size, size, device=device, dtype=torch.bool)\n    for i in range(size):\n        if num_left_chunks < 0:\n            start = 0\n        else:\n            start = max((i // chunk_size - num_left_chunks) * chunk_size, 0)\n        ending = min((i // chunk_size + 1) * chunk_size, size)\n        ret[i, start:ending] = True\n    return ret\n\n\ndef subsequent_chunk_mask(\n        size: int,\n        chunk_size: int,\n        num_left_chunks: int = -1,\n        device: torch.device = torch.device(\"cpu\"),\n) -> torch.Tensor:\n    \"\"\"Create mask for subsequent steps (size, size) with chunk size,\n       this is for streaming encoder\n\n    Args:\n        size (int): size of mask\n        chunk_size (int): size of chunk\n        num_left_chunks (int): number of left chunks\n            <0: use full chunk\n            >=0: use num_left_chunks\n        device (torch.device): \"cpu\" or \"cuda\" or torch.Tensor.device\n\n    Returns:\n        torch.Tensor: mask\n\n    Examples:\n        >>> subsequent_chunk_mask(4, 2)\n        [[1, 1, 0, 0],\n         [1, 1, 0, 0],\n         [1, 1, 1, 1],\n         [1, 1, 1, 1]]\n    \"\"\"\n    # NOTE this modified implementation meets onnx export requirements, but it doesn't support num_left_chunks\n    pos_idx = torch.arange(size, device=device)\n    block_value = (torch.div(pos_idx, chunk_size, rounding_mode='trunc') + 1) * chunk_size\n    ret = pos_idx.unsqueeze(0) < block_value.unsqueeze(1)\n    return ret\n\n\ndef add_optional_chunk_mask(xs: torch.Tensor,\n                            masks: torch.Tensor,\n                            use_dynamic_chunk: bool,\n                            use_dynamic_left_chunk: bool,\n                            decoding_chunk_size: int,\n                            static_chunk_size: int,\n                            num_decoding_left_chunks: int,\n                            enable_full_context: bool = True):\n    \"\"\" Apply optional mask for encoder.\n\n    Args:\n        xs (torch.Tensor): padded input, (B, L, D), L for max length\n        mask (torch.Tensor): mask for xs, (B, 1, L)\n        use_dynamic_chunk (bool): whether to use dynamic chunk or not\n        use_dynamic_left_chunk (bool): whether to use dynamic left chunk for\n            training.\n        decoding_chunk_size (int): decoding chunk size for dynamic chunk, it's\n            0: default for training, use random dynamic chunk.\n            <0: for decoding, use full chunk.\n            >0: for decoding, use fixed chunk size as set.\n        static_chunk_size (int): chunk size for static chunk training/decoding\n            if it's greater than 0, if use_dynamic_chunk is true,\n            this parameter will be ignored\n        num_decoding_left_chunks: number of left chunks, this is for decoding,\n            the chunk size is decoding_chunk_size.\n            >=0: use num_decoding_left_chunks\n            <0: use all left chunks\n        enable_full_context (bool):\n            True: chunk size is either [1, 25] or full context(max_len)\n            False: chunk size ~ U[1, 25]\n\n    Returns:\n        torch.Tensor: chunk mask of the input xs.\n    \"\"\"\n    # Whether to use chunk mask or not\n    if use_dynamic_chunk:\n        max_len = xs.size(1)\n        if decoding_chunk_size < 0:\n            chunk_size = max_len\n            num_left_chunks = -1\n        elif decoding_chunk_size > 0:\n            chunk_size = decoding_chunk_size\n            num_left_chunks = num_decoding_left_chunks\n        else:\n            # chunk size is either [1, 25] or full context(max_len).\n            # Since we use 4 times subsampling and allow up to 1s(100 frames)\n            # delay, the maximum frame is 100 / 4 = 25.\n            chunk_size = torch.randint(1, max_len, (1, )).item()\n            num_left_chunks = -1\n            if chunk_size > max_len // 2 and enable_full_context:\n                chunk_size = max_len\n            else:\n                chunk_size = chunk_size % 25 + 1\n                if use_dynamic_left_chunk:\n                    max_left_chunks = (max_len - 1) // chunk_size\n                    num_left_chunks = torch.randint(0, max_left_chunks,\n                                                    (1, )).item()\n        chunk_masks = subsequent_chunk_mask(xs.size(1), chunk_size,\n                                            num_left_chunks,\n                                            xs.device)  # (L, L)\n        chunk_masks = chunk_masks.unsqueeze(0)  # (1, L, L)\n        chunk_masks = masks & chunk_masks  # (B, L, L)\n    elif static_chunk_size > 0:\n        num_left_chunks = num_decoding_left_chunks\n        chunk_masks = subsequent_chunk_mask(xs.size(1), static_chunk_size,\n                                            num_left_chunks,\n                                            xs.device)  # (L, L)\n        chunk_masks = chunk_masks.unsqueeze(0)  # (1, L, L)\n        chunk_masks = masks & chunk_masks  # (B, L, L)\n    else:\n        chunk_masks = masks\n    assert chunk_masks.dtype == torch.bool\n    if (chunk_masks.sum(dim=-1) == 0).sum().item() != 0:\n        print('get chunk_masks all false at some timestep, force set to true, make sure they are masked in futuer computation!')\n        chunk_masks[chunk_masks.sum(dim=-1) == 0] = True\n    return chunk_masks\n\n\ndef make_pad_mask(lengths: torch.Tensor, max_len: int = 0) -> torch.Tensor:\n    \"\"\"Make mask tensor containing indices of padded part.\n\n    See description of make_non_pad_mask.\n\n    Args:\n        lengths (torch.Tensor): Batch of lengths (B,).\n    Returns:\n        torch.Tensor: Mask tensor containing indices of padded part.\n\n    Examples:\n        >>> lengths = [5, 3, 2]\n        >>> make_pad_mask(lengths)\n        masks = [[0, 0, 0, 0 ,0],\n                 [0, 0, 0, 1, 1],\n                 [0, 0, 1, 1, 1]]\n    \"\"\"\n    batch_size = lengths.size(0)\n    max_len = max_len if max_len > 0 else lengths.max().item()\n    seq_range = torch.arange(0,\n                             max_len,\n                             dtype=torch.int64,\n                             device=lengths.device)\n    seq_range_expand = seq_range.unsqueeze(0).expand(batch_size, max_len)\n    seq_length_expand = lengths.unsqueeze(-1)\n    mask = seq_range_expand >= seq_length_expand\n    return mask\n"
  },
  {
    "path": "cosyvoice/utils/onnx.py",
    "content": "import onnxruntime\nimport torch, random\nimport os\nimport torchaudio.compliance.kaldi as kaldi\n\n\nclass SpeechTokenExtractor():\n    def __init__(self, model_path):\n        self.local_rank = int(os.environ.get(\"LOCAL_RANK\", 0))\n        option = onnxruntime.SessionOptions()\n        option.graph_optimization_level = onnxruntime.GraphOptimizationLevel.ORT_ENABLE_ALL\n        option.intra_op_num_threads = 1\n        self.speech_tokenizer_session = onnxruntime.InferenceSession(model_path,\n                                                                     sess_options=option,\n                                                                     providers=[(\"CUDAExecutionProvider\", {'device_id': self.local_rank})])\n\n    def inference(self, feat, feat_lengths, device):\n        speech_token = self.speech_tokenizer_session.run(None,\n                                                    {self.speech_tokenizer_session.get_inputs()[0].name:\n                                                    feat.transpose(1, 2).detach().cpu().numpy(),\n                                                    self.speech_tokenizer_session.get_inputs()[1].name:\n                                                    feat_lengths.detach().cpu().numpy()})[0]\n        return torch.tensor(speech_token).to(torch.int32).to(device), (feat_lengths / 4).to(torch.int32).to(device)\n\n\nclass EmbeddingExtractor():\n    def __init__(self, model_path):\n        option = onnxruntime.SessionOptions()\n        option.graph_optimization_level = onnxruntime.GraphOptimizationLevel.ORT_ENABLE_ALL\n        option.intra_op_num_threads = 1\n        self.max_len = 10 * 16000\n        self.campplus_session = onnxruntime.InferenceSession(model_path,\n                                                             sess_options=option,\n                                                             providers=[\"CPUExecutionProvider\"])\n\n    def inference(self, speech):\n        if speech.shape[1] > self.max_len:\n            start_index = random.randint(0, speech.shape[1] - self.max_len)\n            speech = speech[:, start_index: start_index + self.max_len]\n        feat = kaldi.fbank(speech,\n                           num_mel_bins=80,\n                           dither=0,\n                           sample_frequency=16000)\n        feat = feat - feat.mean(dim=0, keepdim=True)\n        embedding = self.campplus_session.run(None,\n                                              {self.campplus_session.get_inputs()[0].name: feat.unsqueeze(dim=0).cpu().numpy()})[0].flatten().tolist()\n        return torch.tensor(embedding).to(speech.device)\n\n# singleton mode, only initialized once\nonnx_path = os.environ.get('onnx_path')\nif onnx_path is not None:\n    embedding_extractor, online_feature = EmbeddingExtractor(model_path=os.path.join(onnx_path, 'campplus.onnx')), True\nelse:\n    embedding_extractor, online_feature = None, False"
  },
  {
    "path": "cosyvoice/utils/scheduler.py",
    "content": "# Copyright (c) 2020 Mobvoi Inc (Binbin Zhang)\n#               2022 Ximalaya Inc (Yuguang Yang)\n#               2024 Alibaba Inc (authors: Xiang Lyu)\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# Modified from ESPnet(https://github.com/espnet/espnet)\n#               NeMo(https://github.com/NVIDIA/NeMo)\n\nfrom typing import Union\n\nimport math\nimport warnings\nimport torch\nfrom torch.optim.lr_scheduler import _LRScheduler\n\n\nclass WarmupLR(_LRScheduler):\n    \"\"\"The WarmupLR scheduler\n\n    This scheduler is almost same as NoamLR Scheduler except for following\n    difference:\n\n    NoamLR:\n        lr = optimizer.lr * model_size ** -0.5\n             * min(step ** -0.5, step * warmup_step ** -1.5)\n    WarmupLR:\n        lr = optimizer.lr * warmup_step ** 0.5\n             * min(step ** -0.5, step * warmup_step ** -1.5)\n\n    Note that the maximum lr equals to optimizer.lr in this scheduler.\n\n    \"\"\"\n\n    def __init__(\n        self,\n        optimizer: torch.optim.Optimizer,\n        warmup_steps: Union[int, float] = 25000,\n        last_epoch: int = -1,\n    ):\n        self.warmup_steps = warmup_steps\n\n        # __init__() must be invoked before setting field\n        # because step() is also invoked in __init__()\n        super().__init__(optimizer, last_epoch)\n\n    def __repr__(self):\n        return f\"{self.__class__.__name__}(warmup_steps={self.warmup_steps})\"\n\n    def get_lr(self):\n        step_num = self.last_epoch + 1\n        if self.warmup_steps == 0:\n            return [lr * step_num**-0.5 for lr in self.base_lrs]\n        else:\n            return [\n                lr * self.warmup_steps**0.5 *\n                min(step_num**-0.5, step_num * self.warmup_steps**-1.5)\n                for lr in self.base_lrs\n            ]\n\n    def set_step(self, step: int):\n        self.last_epoch = step\n\n\nclass WarmupPolicy(_LRScheduler):\n    \"\"\"Adds warmup kwargs and warmup logic to lr policy.\n    All arguments should be passed as kwargs for clarity,\n    Args:\n        warmup_steps: Number of training steps in warmup stage\n        warmup_ratio: Ratio of warmup steps to total steps\n        max_steps: Total number of steps while training or `None` for\n            infinite training\n    \"\"\"\n\n    def __init__(self,\n                 optimizer,\n                 *,\n                 warmup_steps=None,\n                 warmup_ratio=None,\n                 max_steps=None,\n                 min_lr=0.0,\n                 last_epoch=-1):\n        assert not (warmup_steps is not None and warmup_ratio is not None),\\\n            \"Either use particular number of step or ratio\"\n        assert warmup_ratio is None or max_steps is not None, \\\n            \"If there is a ratio, there should be a total steps\"\n\n        # It is necessary to assign all attributes *before* __init__,\n        # as class is wrapped by an inner class.\n        self.max_steps = max_steps\n        if warmup_steps is not None:\n            self.warmup_steps = warmup_steps\n        elif warmup_ratio is not None:\n            self.warmup_steps = int(warmup_ratio * max_steps)\n        else:\n            self.warmup_steps = 0\n\n        self.min_lr = min_lr\n        super().__init__(optimizer, last_epoch)\n\n    def get_lr(self):\n        if not self._get_lr_called_within_step:\n            warnings.warn(\n                \"To get the last learning rate computed \"\n                \"by the scheduler, please use `get_last_lr()`.\",\n                UserWarning,\n                stacklevel=2)\n\n        step = self.last_epoch\n\n        if step <= self.warmup_steps and self.warmup_steps > 0:\n            return self._get_warmup_lr(step)\n\n        if step > self.max_steps:\n            return [self.min_lr for _ in self.base_lrs]\n\n        return self._get_lr(step)\n\n    def _get_warmup_lr(self, step):\n        lr_val = (step + 1) / (self.warmup_steps + 1)\n        return [initial_lr * lr_val for initial_lr in self.base_lrs]\n\n    def _get_lr(self, step):\n        \"\"\"Simple const lr policy\"\"\"\n        return self.base_lrs\n\n\nclass SquareRootConstantPolicy(_LRScheduler):\n    \"\"\"Adds warmup kwargs and warmup logic to lr policy.\n    All arguments should be passed as kwargs for clarity,\n    Args:\n        warmup_steps: Number of training steps in warmup stage\n        warmup_ratio: Ratio of warmup steps to total steps\n        max_steps: Total number of steps while training or `None` for\n            infinite training\n    \"\"\"\n\n    def __init__(self,\n                 optimizer,\n                 *,\n                 constant_steps=None,\n                 constant_ratio=None,\n                 max_steps=None,\n                 min_lr=0.0,\n                 last_epoch=-1):\n        assert not (constant_steps is not None\n                    and constant_ratio is not None), \\\n            \"Either use particular number of step or ratio\"\n        assert constant_ratio is None or max_steps is not None, \\\n            \"If there is a ratio, there should be a total steps\"\n\n        # It is necessary to assign all attributes *before* __init__,\n        # as class is wrapped by an inner class.\n        self.max_steps = max_steps\n        if constant_steps is not None:\n            self.constant_steps = constant_steps\n        elif constant_ratio is not None:\n            self.constant_steps = int(constant_ratio * max_steps)\n        else:\n            self.constant_steps = 0\n\n        self.constant_lr = 1 / (constant_steps**0.5)\n        self.min_lr = min_lr\n        super().__init__(optimizer, last_epoch)\n\n    def get_lr(self):\n        if not self._get_lr_called_within_step:\n            warnings.warn(\n                \"To get the last learning rate computed \"\n                \"by the scheduler, please use `get_last_lr()`.\",\n                UserWarning,\n                stacklevel=2)\n\n        step = self.last_epoch\n\n        if step <= self.constant_steps:\n            return [self.constant_lr for _ in self.base_lrs]\n\n        if step > self.max_steps:\n            return [self.min_lr for _ in self.base_lrs]\n\n        return self._get_lr(step)\n\n    def _get_lr(self, step):\n        \"\"\"Simple const lr policy\"\"\"\n        return self.base_lrs\n\n\nclass WarmupHoldPolicy(WarmupPolicy):\n    \"\"\"Variant of WarmupPolicy which maintains high\n       learning rate for a defined number of steps.\n    All arguments should be passed as kwargs for clarity,\n    Args:\n        warmup_steps: Number of training steps in warmup stage\n        warmup_ratio: Ratio of warmup steps to total steps\n        hold_steps: Number of training steps to\n                    hold the learning rate after warm up\n        hold_ratio: Ratio of hold steps to total steps\n        max_steps: Total number of steps while training or `None` for\n            infinite training\n    \"\"\"\n\n    def __init__(\n        self,\n        optimizer,\n        *,\n        warmup_steps=None,\n        warmup_ratio=None,\n        hold_steps=None,\n        hold_ratio=None,\n        max_steps=None,\n        min_lr=0.0,\n        last_epoch=-1,\n    ):\n        assert not (hold_steps is not None and hold_ratio is not None), \\\n            \"Either use particular number of step or ratio\"\n        assert hold_ratio is None or max_steps is not None, \\\n            \"If there is a ratio, there should be a total steps\"\n\n        self.min_lr = min_lr\n        self._last_warmup_lr = 0.0\n\n        # Necessary to duplicate as class attributes are hidden in inner class\n        self.max_steps = max_steps\n        if warmup_steps is not None:\n            self.warmup_steps = warmup_steps\n        elif warmup_ratio is not None:\n            self.warmup_steps = int(warmup_ratio * max_steps)\n        else:\n            self.warmup_steps = 0\n\n        if hold_steps is not None:\n            self.hold_steps = hold_steps + self.warmup_steps\n        elif hold_ratio is not None:\n            self.hold_steps = int(hold_ratio * max_steps) + self.warmup_steps\n        else:\n            self.hold_steps = 0\n\n        super().__init__(\n            optimizer,\n            warmup_steps=warmup_steps,\n            warmup_ratio=warmup_ratio,\n            max_steps=max_steps,\n            last_epoch=last_epoch,\n            min_lr=min_lr,\n        )\n\n    def get_lr(self):\n        if not self._get_lr_called_within_step:\n            warnings.warn(\n                \"To get the last learning rate computed by the scheduler,\"\n                \" \"\n                \"please use `get_last_lr()`.\",\n                UserWarning,\n                stacklevel=2)\n\n        step = self.last_epoch\n\n        # Warmup phase\n        if step <= self.warmup_steps and self.warmup_steps > 0:\n            return self._get_warmup_lr(step)\n\n        # Hold phase\n        if (step >= self.warmup_steps) and (step < self.hold_steps):\n            return self.base_lrs\n\n        if step > self.max_steps:\n            return [self.min_lr for _ in self.base_lrs]\n\n        return self._get_lr(step)\n\n\nclass WarmupAnnealHoldPolicy(_LRScheduler):\n    \"\"\"Adds warmup kwargs and warmup logic to lr policy.\n    All arguments should be passed as kwargs for clarity,\n    Args:\n        warmup_steps: Number of training steps in warmup stage\n        warmup_ratio: Ratio of warmup steps to total steps\n        max_steps: Total number of steps while training or `None` for\n            infinite training\n        min_lr: Minimum lr to hold the learning rate after decay at.\n        constant_steps: Number of steps to keep lr constant at.\n        constant_ratio: Ratio of steps to keep lr constant.\n    \"\"\"\n\n    def __init__(\n        self,\n        optimizer,\n        *,\n        warmup_steps=None,\n        warmup_ratio=None,\n        constant_steps=None,\n        constant_ratio=None,\n        max_steps=None,\n        min_lr=0.0,\n        last_epoch=-1,\n    ):\n        assert not (warmup_steps is not None\n                    and warmup_ratio is not None), \\\n            \"Either use particular number of step or ratio\"\n        assert not (constant_steps is not None\n                    and constant_ratio is not None), \\\n            \"Either use constant_steps or constant_ratio\"\n        assert warmup_ratio is None or max_steps is not None, \\\n            \"If there is a ratio, there should be a total steps\"\n\n        # It is necessary to assign all attributes *before* __init__,\n        # as class is wrapped by an inner class.\n        self.max_steps = max_steps\n\n        if warmup_steps is not None:\n            self.warmup_steps = warmup_steps\n        elif warmup_ratio is not None:\n            self.warmup_steps = int(warmup_ratio * max_steps)\n        else:\n            self.warmup_steps = 0\n\n        if constant_steps is not None:\n            self.constant_steps = constant_steps\n        elif constant_ratio is not None:\n            self.constant_steps = int(constant_ratio * max_steps)\n        else:\n            self.constant_steps = 0\n\n        self.decay_steps = max_steps - (self.constant_steps +\n                                        self.warmup_steps)\n\n        self.min_lr = min_lr\n        super().__init__(optimizer, last_epoch)\n\n    def get_lr(self):\n        if not self._get_lr_called_within_step:\n            warnings.warn(\n                \"To get the last learning rate computed \"\n                \"by the scheduler, please use `get_last_lr()`.\",\n                UserWarning,\n                stacklevel=2)\n\n        step = self.last_epoch\n\n        # Warmup steps\n        if self.warmup_steps > 0 and step <= self.warmup_steps:\n            return self._get_warmup_lr(step)\n\n        # Constant steps after warmup and decay\n        if self.constant_steps > 0 and (\n                self.warmup_steps + self.decay_steps) < step <= self.max_steps:\n            return self._get_constant_lr(step)\n\n        # Min lr after max steps of updates\n        if step > self.max_steps:\n            return [self.min_lr for _ in self.base_lrs]\n\n        return self._get_lr(step)\n\n    def _get_warmup_lr(self, step):\n        lr_val = (step + 1) / (self.warmup_steps + 1)\n        return [initial_lr * lr_val for initial_lr in self.base_lrs]\n\n    def _get_constant_lr(self, step):\n        return [self.min_lr for _ in self.base_lrs]\n\n    def _get_lr(self, step):\n        \"\"\"Simple const lr policy\"\"\"\n        return self.base_lrs\n\n\ndef _squareroot_annealing(initial_lr, step, max_steps, min_lr):\n    mult = ((max_steps - step) / max_steps)**0.5\n    out_lr = initial_lr * mult\n    out_lr = max(out_lr, min_lr)\n    return out_lr\n\n\ndef _square_annealing(initial_lr, step, max_steps, min_lr):\n    mult = ((max_steps - step) / max_steps)**2\n    out_lr = initial_lr * mult\n    out_lr = max(out_lr, min_lr)\n    return out_lr\n\n\ndef _cosine_annealing(initial_lr, step, max_steps, min_lr):\n    mult = 0.5 * (1 + math.cos(math.pi * step / max_steps))\n    out_lr = (initial_lr - min_lr) * mult + min_lr\n    return out_lr\n\n\ndef _linear_warmup_with_cosine_annealing(max_lr, warmup_steps, step,\n                                         decay_steps, min_lr):\n    assert max_lr > min_lr\n    # Use linear warmup for the initial part.\n    if warmup_steps > 0 and step <= warmup_steps:\n        return max_lr * float(step) / float(warmup_steps)\n\n    # For any steps larger than `decay_steps`, use `min_lr`.\n    if step > warmup_steps + decay_steps:\n        return min_lr\n\n    # If we are done with the warmup period, use the decay style.\n    num_steps_ = step - warmup_steps\n    decay_steps_ = decay_steps\n    decay_ratio = float(num_steps_) / float(decay_steps_)\n    assert decay_ratio >= 0.0\n    assert decay_ratio <= 1.0\n    delta_lr = max_lr - min_lr\n\n    coeff = 0.5 * (math.cos(math.pi * decay_ratio) + 1.0)\n\n    return min_lr + coeff * delta_lr\n\n\ndef _poly_decay(initial_lr, step, decay_steps, power, min_lr, cycle):\n    if cycle:\n        multiplier = 1.0 if step == 0 else math.ceil(step / decay_steps)\n        decay_steps *= multiplier\n    else:\n        step = min(step, decay_steps)\n    p = step / decay_steps\n    lr = (initial_lr - min_lr) * math.pow(1.0 - p, power)\n    lr += min_lr\n    return lr\n\n\ndef _noam_hold_annealing(initial_lr, step, warmup_steps, hold_steps,\n                         decay_rate, min_lr):\n    # hold_steps = total number of steps\n    # to hold the LR, not the warmup + hold steps.\n    T_warmup_decay = max(1, warmup_steps**decay_rate)\n    T_hold_decay = max(1, (step - hold_steps)**decay_rate)\n    lr = (initial_lr * T_warmup_decay) / T_hold_decay\n    lr = max(lr, min_lr)\n    return lr\n\n\nclass SquareAnnealing(WarmupPolicy):\n\n    def __init__(self,\n                 optimizer,\n                 *,\n                 max_steps,\n                 min_lr=1e-5,\n                 last_epoch=-1,\n                 **kwargs):\n        super().__init__(optimizer=optimizer,\n                         max_steps=max_steps,\n                         last_epoch=last_epoch,\n                         min_lr=min_lr,\n                         **kwargs)\n\n    def _get_lr(self, step):\n        new_lrs = [\n            _square_annealing(\n                initial_lr=initial_lr,\n                step=step - self.warmup_steps,\n                max_steps=self.max_steps - self.warmup_steps,\n                min_lr=self.min_lr,\n            ) for initial_lr in self.base_lrs\n        ]\n        return new_lrs\n\n\nclass SquareRootAnnealing(WarmupPolicy):\n\n    def __init__(self,\n                 optimizer,\n                 *,\n                 max_steps,\n                 min_lr=0,\n                 last_epoch=-1,\n                 **kwargs):\n        super().__init__(optimizer=optimizer,\n                         max_steps=max_steps,\n                         last_epoch=last_epoch,\n                         min_lr=min_lr,\n                         **kwargs)\n\n    def _get_lr(self, step):\n        new_lrs = [\n            _squareroot_annealing(initial_lr=initial_lr,\n                                  step=step,\n                                  max_steps=self.max_steps,\n                                  min_lr=self.min_lr)\n            for initial_lr in self.base_lrs\n        ]\n        return new_lrs\n\n\nclass CosineAnnealing(WarmupAnnealHoldPolicy):\n\n    def __init__(self,\n                 optimizer,\n                 *,\n                 max_steps,\n                 min_lr=0,\n                 last_epoch=-1,\n                 **kwargs):\n        super().__init__(optimizer=optimizer,\n                         max_steps=max_steps,\n                         last_epoch=last_epoch,\n                         min_lr=min_lr,\n                         **kwargs)\n\n    def _get_lr(self, step):\n        for initial_lr in self.base_lrs:\n            if initial_lr < self.min_lr:\n                raise ValueError(\n                    f\"{self} received an initial learning rate \"\n                    f\"that was lower than the minimum learning rate.\")\n\n        if self.constant_steps is None or self.constant_steps == 0:\n            new_lrs = [\n                _cosine_annealing(\n                    initial_lr=initial_lr,\n                    step=step - self.warmup_steps,\n                    max_steps=self.max_steps - self.warmup_steps,\n                    min_lr=self.min_lr,\n                ) for initial_lr in self.base_lrs\n            ]\n        else:\n            new_lrs = self._get_linear_warmup_with_cosine_annealing_lr(step)\n        return new_lrs\n\n    def _get_warmup_lr(self, step):\n        if self.constant_steps is None or self.constant_steps == 0:\n            return super()._get_warmup_lr(step)\n        else:\n            # Use linear warmup for the initial part.\n            return self._get_linear_warmup_with_cosine_annealing_lr(step)\n\n    def _get_constant_lr(self, step):\n        # Only called when `constant_steps` > 0.\n        return self._get_linear_warmup_with_cosine_annealing_lr(step)\n\n    def _get_linear_warmup_with_cosine_annealing_lr(self, step):\n        # Cosine Schedule for Megatron LM,\n        # slightly different warmup schedule + constant LR at the end.\n        new_lrs = [\n            _linear_warmup_with_cosine_annealing(\n                max_lr=self.base_lrs[0],\n                warmup_steps=self.warmup_steps,\n                step=step,\n                decay_steps=self.decay_steps,\n                min_lr=self.min_lr,\n            ) for _ in self.base_lrs\n        ]\n        return new_lrs\n\n\nclass NoamAnnealing(_LRScheduler):\n\n    def __init__(self,\n                 optimizer,\n                 *,\n                 d_model,\n                 warmup_steps=None,\n                 warmup_ratio=None,\n                 max_steps=None,\n                 min_lr=0.0,\n                 last_epoch=-1):\n        self._normalize = d_model**(-0.5)\n        assert not (warmup_steps is not None and warmup_ratio is not None), \\\n            \"Either use particular number of step or ratio\"\n        assert warmup_ratio is None or max_steps is not None, \\\n            \"If there is a ratio, there should be a total steps\"\n\n        # It is necessary to assign all attributes *before* __init__,\n        # as class is wrapped by an inner class.\n        self.max_steps = max_steps\n        if warmup_steps is not None:\n            self.warmup_steps = warmup_steps\n        elif warmup_ratio is not None:\n            self.warmup_steps = int(warmup_ratio * max_steps)\n        else:\n            self.warmup_steps = 0\n\n        self.min_lr = min_lr\n        super().__init__(optimizer, last_epoch)\n\n    def get_lr(self):\n        if not self._get_lr_called_within_step:\n            warnings.warn(\n                \"To get the last learning rate computed \"\n                \"by the scheduler, please use `get_last_lr()`.\",\n                UserWarning,\n                stacklevel=2)\n\n        step = max(1, self.last_epoch)\n\n        for initial_lr in self.base_lrs:\n            if initial_lr < self.min_lr:\n                raise ValueError(\n                    f\"{self} received an initial learning rate \"\n                    f\"that was lower than the minimum learning rate.\")\n\n        new_lrs = [\n            self._noam_annealing(initial_lr=initial_lr, step=step)\n            for initial_lr in self.base_lrs\n        ]\n        return new_lrs\n\n    def _noam_annealing(self, initial_lr, step):\n        if self.warmup_steps > 0:\n            mult = self._normalize * min(step**(-0.5),\n                                         step * (self.warmup_steps**(-1.5)))\n        else:\n            mult = self._normalize * step**(-0.5)\n\n        out_lr = initial_lr * mult\n        if step > self.warmup_steps:\n            out_lr = max(out_lr, self.min_lr)\n        return out_lr\n\n\nclass NoamHoldAnnealing(WarmupHoldPolicy):\n\n    def __init__(self,\n                 optimizer,\n                 *,\n                 max_steps,\n                 decay_rate=0.5,\n                 min_lr=0.0,\n                 last_epoch=-1,\n                 **kwargs):\n        \"\"\"\n        From Nemo:\n        Implementation of the Noam Hold Annealing policy\n        from the SqueezeFormer paper.\n\n        Unlike NoamAnnealing, the peak learning rate\n        can be explicitly set for this scheduler.\n        The schedule first performs linear warmup,\n        then holds the peak LR, then decays with some schedule for\n        the remainder of the steps.\n        Therefore the min-lr is still dependent\n        on the hyper parameters selected.\n\n        It's schedule is determined by three factors-\n\n        Warmup Steps: Initial stage, where linear warmup\n            occurs uptil the peak LR is reached. Unlike NoamAnnealing,\n            the peak LR is explicitly stated here instead of a scaling factor.\n\n        Hold Steps: Intermediate stage, where the peak LR\n            is maintained for some number of steps. In this region,\n            the high peak LR allows the model to converge faster\n            if training is stable. However the high LR\n            may also cause instability during training.\n            Should usually be a significant fraction of training\n            steps (around 30-40% of the entire training steps).\n\n        Decay Steps: Final stage, where the LR rapidly decays\n            with some scaling rate (set by decay rate).\n            To attain Noam decay, use 0.5,\n            for Squeezeformer recommended decay, use 1.0.\n            The fast decay after prolonged high LR during\n            hold phase allows for rapid convergence.\n\n        References:\n            - [Squeezeformer:\n            An Efficient Transformer for Automatic Speech Recognition]\n            (https://arxiv.org/abs/2206.00888)\n\n        Args:\n            optimizer: Pytorch compatible Optimizer object.\n            warmup_steps: Number of training steps in warmup stage\n            warmup_ratio: Ratio of warmup steps to total steps\n            hold_steps: Number of training steps to\n                        hold the learning rate after warm up\n            hold_ratio: Ratio of hold steps to total steps\n            max_steps: Total number of steps while training or `None` for\n                infinite training\n            decay_rate: Float value describing the polynomial decay\n                        after the hold period. Default value\n                        of 0.5 corresponds to Noam decay.\n            min_lr: Minimum learning rate.\n        \"\"\"\n        self.decay_rate = decay_rate\n        super().__init__(optimizer=optimizer,\n                         max_steps=max_steps,\n                         last_epoch=last_epoch,\n                         min_lr=min_lr,\n                         **kwargs)\n\n    def _get_lr(self, step):\n        if self.warmup_steps is None or self.warmup_steps == 0:\n            raise ValueError(\n                \"Noam scheduler cannot be used without warmup steps\")\n\n        if self.hold_steps > 0:\n            hold_steps = self.hold_steps - self.warmup_steps\n        else:\n            hold_steps = 0\n\n        new_lrs = [\n            _noam_hold_annealing(\n                initial_lr,\n                step=step,\n                warmup_steps=self.warmup_steps,\n                hold_steps=hold_steps,\n                decay_rate=self.decay_rate,\n                min_lr=self.min_lr,\n            ) for initial_lr in self.base_lrs\n        ]\n        return new_lrs\n\n    def set_step(self, step: int):\n        self.last_epoch = step\n\n\nclass ConstantLR(_LRScheduler):\n    \"\"\"The ConstantLR scheduler\n\n    This scheduler keeps a constant lr\n\n    \"\"\"\n\n    def __init__(\n        self,\n        optimizer: torch.optim.Optimizer,\n    ):\n        # __init__() must be invoked before setting field\n        # because step() is also invoked in __init__()\n        super().__init__(optimizer)\n\n    def get_lr(self):\n        return self.base_lrs\n\n    def set_step(self, step: int):\n        self.last_epoch = step\n"
  },
  {
    "path": "cosyvoice/utils/train_utils.py",
    "content": "# Copyright (c) 2021 Mobvoi Inc. (authors: Binbin Zhang)\n#               2023 Horizon Inc. (authors: Xingchen Song)\n#               2024 Alibaba Inc (authors: Xiang Lyu)\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\nimport logging\nimport os\nimport torch\nimport json\nimport re\nimport datetime\nimport yaml\n\nimport deepspeed\nimport torch.optim as optim\nimport torch.distributed as dist\n\nfrom torch.utils.tensorboard import SummaryWriter\nfrom torch.utils.data import DataLoader\nfrom torch.nn.utils import clip_grad_norm_\n\nfrom deepspeed.runtime.zero.stage_1_and_2 import estimate_zero2_model_states_mem_needs_all_live\n\nfrom cosyvoice.dataset.dataset import Dataset\nfrom cosyvoice.utils.scheduler import WarmupLR, NoamHoldAnnealing, ConstantLR\n\n\ndef init_distributed(args):\n    world_size = int(os.environ.get('WORLD_SIZE', 1))\n    local_rank = int(os.environ.get('LOCAL_RANK', 0))\n    rank = int(os.environ.get('RANK', 0))\n    logging.info('training on multiple gpus, this gpu {}'.format(local_rank) +\n                 ', rank {}, world_size {}'.format(rank, world_size))\n    if args.train_engine == 'torch_ddp':\n        torch.cuda.set_device(local_rank)\n        dist.init_process_group(args.dist_backend)\n    else:\n        deepspeed.init_distributed(dist_backend=args.dist_backend)\n    return world_size, local_rank, rank\n\n\ndef init_dataset_and_dataloader(args, configs, gan, dpo):\n    data_pipeline = configs['data_pipeline_gan'] if gan is True else configs['data_pipeline']\n    train_dataset = Dataset(args.train_data, data_pipeline=data_pipeline, mode='train', gan=gan, dpo=dpo, shuffle=True, partition=True)\n    cv_dataset = Dataset(args.cv_data, data_pipeline=data_pipeline, mode='dev', gan=gan, dpo=dpo, shuffle=False, partition=False)\n\n    # do not use persistent_workers=True, as whisper tokenizer opens tiktoken file each time when the for loop starts\n    train_data_loader = DataLoader(train_dataset,\n                                   batch_size=None,\n                                   pin_memory=args.pin_memory,\n                                   num_workers=args.num_workers,\n                                   prefetch_factor=args.prefetch)\n    cv_data_loader = DataLoader(cv_dataset,\n                                batch_size=None,\n                                pin_memory=args.pin_memory,\n                                num_workers=args.num_workers,\n                                prefetch_factor=args.prefetch)\n    return train_dataset, cv_dataset, train_data_loader, cv_data_loader\n\n\ndef check_modify_and_save_config(args, configs):\n    if args.train_engine == \"torch_ddp\":\n        configs['train_conf'][\"dtype\"] = 'bf16' if args.use_amp is True else 'fp32'\n    else:\n        with open(args.deepspeed_config, 'r') as fin:\n            ds_configs = json.load(fin)\n        if \"fp16\" in ds_configs and ds_configs[\"fp16\"][\"enabled\"]:\n            configs['train_conf'][\"dtype\"] = \"fp16\"\n        elif \"bf16\" in ds_configs and ds_configs[\"bf16\"][\"enabled\"]:\n            configs['train_conf'][\"dtype\"] = \"bf16\"\n        else:\n            configs['train_conf'][\"dtype\"] = \"fp32\"\n        assert ds_configs[\"train_micro_batch_size_per_gpu\"] == 1\n        # if use deepspeed, override ddp config\n        configs['train_conf']['save_per_step'] = int(configs['train_conf']['save_per_step'] *\n                                                     configs['train_conf']['accum_grad'] / ds_configs[\"gradient_accumulation_steps\"])\n        configs['train_conf']['accum_grad'] = ds_configs[\"gradient_accumulation_steps\"]\n        configs['train_conf']['grad_clip'] = ds_configs[\"gradient_clipping\"]\n        configs['train_conf']['log_interval'] = ds_configs[\"steps_per_print\"]\n    return configs\n\n\ndef wrap_cuda_model(args, model):\n    local_world_size = int(os.environ.get('LOCAL_WORLD_SIZE', 1))\n    world_size = int(os.environ.get('WORLD_SIZE', 1))\n    if args.train_engine == \"torch_ddp\":  # native pytorch ddp\n        assert (torch.cuda.is_available())\n        model.cuda()\n        model = torch.nn.parallel.DistributedDataParallel(model, find_unused_parameters=True)\n    else:\n        if int(os.environ.get('RANK', 0)) == 0:\n            logging.info(\"Estimating model states memory needs (zero2)...\")\n            estimate_zero2_model_states_mem_needs_all_live(\n                model,\n                num_gpus_per_node=local_world_size,\n                num_nodes=world_size // local_world_size)\n    return model\n\n\ndef init_optimizer_and_scheduler(args, configs, model, gan):\n    if gan is False:\n        if configs['train_conf']['optim'] == 'adam':\n            optimizer = optim.Adam(model.parameters(), **configs['train_conf']['optim_conf'])\n        elif configs['train_conf']['optim'] == 'adamw':\n            optimizer = optim.AdamW(model.parameters(), **configs['train_conf']['optim_conf'])\n        else:\n            raise ValueError(\"unknown optimizer: \" + configs['train_conf'])\n\n        if configs['train_conf']['scheduler'] == 'warmuplr':\n            scheduler_type = WarmupLR\n            scheduler = WarmupLR(optimizer, **configs['train_conf']['scheduler_conf'])\n        elif configs['train_conf']['scheduler'] == 'NoamHoldAnnealing':\n            scheduler_type = NoamHoldAnnealing\n            scheduler = NoamHoldAnnealing(optimizer, **configs['train_conf']['scheduler_conf'])\n        elif configs['train_conf']['scheduler'] == 'constantlr':\n            scheduler_type = ConstantLR\n            scheduler = ConstantLR(optimizer)\n        else:\n            raise ValueError(\"unknown scheduler: \" + configs['train_conf'])\n\n        # use deepspeed optimizer for speedup\n        if args.train_engine == \"deepspeed\":\n            def scheduler(opt):\n                return scheduler_type(opt, **configs['train_conf']['scheduler_conf'])\n            model, optimizer, _, scheduler = deepspeed.initialize(\n                args=args,\n                model=model,\n                optimizer=None,\n                lr_scheduler=scheduler,\n                model_parameters=model.parameters())\n\n        optimizer_d, scheduler_d = None, None\n\n    else:\n        # currently we wrap generator and discriminator in one model, so we cannot use deepspeed\n        if configs['train_conf']['optim'] == 'adam':\n            optimizer = optim.Adam(model.module.generator.parameters(), **configs['train_conf']['optim_conf'])\n        elif configs['train_conf']['optim'] == 'adamw':\n            optimizer = optim.AdamW(model.module.generator.parameters(), **configs['train_conf']['optim_conf'])\n        else:\n            raise ValueError(\"unknown optimizer: \" + configs['train_conf'])\n\n        if configs['train_conf']['scheduler'] == 'warmuplr':\n            scheduler_type = WarmupLR\n            scheduler = WarmupLR(optimizer, **configs['train_conf']['scheduler_conf'])\n        elif configs['train_conf']['scheduler'] == 'NoamHoldAnnealing':\n            scheduler_type = NoamHoldAnnealing\n            scheduler = NoamHoldAnnealing(optimizer, **configs['train_conf']['scheduler_conf'])\n        elif configs['train_conf']['scheduler'] == 'constantlr':\n            scheduler_type = ConstantLR\n            scheduler = ConstantLR(optimizer)\n        else:\n            raise ValueError(\"unknown scheduler: \" + configs['train_conf'])\n\n        if configs['train_conf']['optim_d'] == 'adam':\n            optimizer_d = optim.Adam(model.module.discriminator.parameters(), **configs['train_conf']['optim_conf_d'])\n        elif configs['train_conf']['optim_d'] == 'adamw':\n            optimizer_d = optim.AdamW(model.module.discriminator.parameters(), **configs['train_conf']['optim_conf_d'])\n        else:\n            raise ValueError(\"unknown optimizer: \" + configs['train_conf'])\n\n        if configs['train_conf']['scheduler_d'] == 'warmuplr':\n            scheduler_type = WarmupLR\n            scheduler_d = WarmupLR(optimizer_d, **configs['train_conf']['scheduler_d'])\n        elif configs['train_conf']['scheduler_d'] == 'NoamHoldAnnealing':\n            scheduler_type = NoamHoldAnnealing\n            scheduler_d = NoamHoldAnnealing(optimizer_d, **configs['train_conf']['scheduler_d'])\n        elif configs['train_conf']['scheduler'] == 'constantlr':\n            scheduler_type = ConstantLR\n            scheduler_d = ConstantLR(optimizer_d)\n        else:\n            raise ValueError(\"unknown scheduler: \" + configs['train_conf'])\n    return model, optimizer, scheduler, optimizer_d, scheduler_d\n\n\ndef init_summarywriter(args):\n    writer = None\n    if int(os.environ.get('RANK', 0)) == 0:\n        os.makedirs(args.model_dir, exist_ok=True)\n        writer = SummaryWriter(args.tensorboard_dir)\n    return writer\n\n\ndef save_model(model, model_name, info_dict):\n    rank = int(os.environ.get('RANK', 0))\n    model_dir = info_dict[\"model_dir\"]\n    save_model_path = os.path.join(model_dir, '{}.pt'.format(model_name))\n\n    if info_dict[\"train_engine\"] == \"torch_ddp\":\n        if rank == 0:\n            torch.save({**model.module.state_dict(), 'epoch': info_dict['epoch'], 'step': info_dict['step']}, save_model_path)\n    else:\n        with torch.no_grad():\n            model.save_checkpoint(save_dir=model_dir,\n                                  tag=model_name,\n                                  client_state=info_dict)\n    if rank == 0:\n        info_path = re.sub('.pt$', '.yaml', save_model_path)\n        info_dict['save_time'] = datetime.datetime.now().strftime('%d/%m/%Y %H:%M:%S')\n        with open(info_path, 'w') as fout:\n            data = yaml.dump(info_dict)\n            fout.write(data)\n        logging.info('[Rank {}] Checkpoint: save to checkpoint {}'.format(rank, save_model_path))\n\n\ndef cosyvoice_join(group_join, info_dict):\n    world_size = int(os.environ.get('WORLD_SIZE', 1))\n    local_rank = int(os.environ.get('LOCAL_RANK', 0))\n    rank = int(os.environ.get('RANK', 0))\n\n    if info_dict[\"batch_idx\"] != 0:\n        # we try to join all rank in both ddp and deepspeed mode, in case different rank has different lr\n        try:\n            dist.monitored_barrier(group=group_join,\n                                   timeout=group_join.options._timeout)\n            return False\n        except RuntimeError as e:\n            logging.info(\"Detected uneven workload distribution: {}\\n\".format(e) +\n                         \"Break current worker to manually join all workers, \" +\n                         \"world_size {}, current rank {}, current local_rank {}\\n\".\n                         format(world_size, rank, local_rank))\n            return True\n    else:\n        return False\n\n\ndef batch_forward(model, batch, scaler, info_dict, ref_model=None, dpo_loss=None):\n    device = int(os.environ.get('LOCAL_RANK', 0))\n\n    dtype = info_dict[\"dtype\"]\n    if dtype == \"fp16\":\n        dtype = torch.float16\n    elif dtype == \"bf16\":\n        dtype = torch.bfloat16\n    else:  # fp32\n        dtype = torch.float32\n\n    if info_dict['train_engine'] == 'torch_ddp':\n        autocast = torch.cuda.amp.autocast(enabled=scaler is not None, dtype=dtype)\n    else:\n        autocast = torch.cuda.amp.autocast(enabled=True, dtype=dtype, cache_enabled=False)\n\n    with autocast:\n        info_dict['loss_dict'] = model(batch, device)\n        if ref_model is not None and dpo_loss is not None:\n            chosen_logps = info_dict['loss_dict'][\"chosen_logps\"]\n            rejected_logps = info_dict['loss_dict'][\"rejected_logps\"]\n            sft_loss = info_dict['loss_dict']['loss']\n            with torch.no_grad():\n                ref_loss_dict = ref_model(batch, device)\n            reference_chosen_logps = ref_loss_dict[\"chosen_logps\"]\n            reference_rejected_logps = ref_loss_dict[\"rejected_logps\"]\n            preference_loss, chosen_reward, reject_reward = dpo_loss(\n                chosen_logps, rejected_logps, reference_chosen_logps, reference_rejected_logps\n            )\n            dpo_acc = (chosen_reward > reject_reward).float().mean()\n            info_dict['loss_dict'][\"loss\"] = preference_loss + sft_loss\n            info_dict['loss_dict'][\"sft_loss\"] = sft_loss\n            info_dict['loss_dict'][\"dpo_loss\"] = preference_loss\n            info_dict['loss_dict'][\"dpo_acc\"] = dpo_acc\n            info_dict['loss_dict'][\"chosen_reward\"] = chosen_reward.mean()\n            info_dict['loss_dict'][\"reject_reward\"] = reject_reward.mean()\n    return info_dict\n\n\ndef batch_backward(model, scaler, info_dict):\n    if info_dict[\"train_engine\"] == \"deepspeed\":\n        scaled_loss = model.backward(info_dict['loss_dict']['loss'])\n    else:\n        scaled_loss = info_dict['loss_dict']['loss'] / info_dict['accum_grad']\n        if scaler is not None:\n            scaler.scale(scaled_loss).backward()\n        else:\n            scaled_loss.backward()\n\n    info_dict['loss_dict']['loss'] = scaled_loss\n    return info_dict\n\n\ndef update_parameter_and_lr(model, optimizer, scheduler, scaler, info_dict):\n    grad_norm = 0.0\n    if info_dict['train_engine'] == \"deepspeed\":\n        info_dict[\"is_gradient_accumulation_boundary\"] = model.is_gradient_accumulation_boundary()\n        model.step()\n        grad_norm = model.get_global_grad_norm()\n    elif (info_dict['batch_idx'] + 1) % info_dict[\"accum_grad\"] == 0:\n        # Use mixed precision training\n        if scaler is not None:\n            scaler.unscale_(optimizer)\n            grad_norm = clip_grad_norm_(model.parameters(), info_dict['grad_clip'])\n            # We don't check grad here since that if the gradient\n            # has inf/nan values, scaler.step will skip\n            # optimizer.step().\n            if torch.isfinite(grad_norm):\n                scaler.step(optimizer)\n            else:\n                logging.warning('get infinite grad_norm, check your code/data if it appears frequently')\n            scaler.update()\n        else:\n            grad_norm = clip_grad_norm_(model.parameters(), info_dict['grad_clip'])\n            if torch.isfinite(grad_norm):\n                optimizer.step()\n            else:\n                logging.warning('get infinite grad_norm, check your code/data if it appears frequently')\n        optimizer.zero_grad()\n        scheduler.step()\n    info_dict[\"lr\"] = optimizer.param_groups[0]['lr']\n    info_dict[\"grad_norm\"] = grad_norm\n    return info_dict\n\n\ndef log_per_step(writer, info_dict):\n    tag = info_dict[\"tag\"]\n    epoch = info_dict.get('epoch', 0)\n    step = info_dict[\"step\"]\n    batch_idx = info_dict[\"batch_idx\"]\n    loss_dict = info_dict['loss_dict']\n    rank = int(os.environ.get('RANK', 0))\n\n    # only rank 0 write to tensorboard to avoid multi-process write\n    if writer is not None:\n        if (info_dict['train_engine'] == 'deepspeed' and info_dict['is_gradient_accumulation_boundary'] is True) or \\\n           (info_dict['train_engine'] == 'torch_ddp' and (info_dict['batch_idx'] + 1) % info_dict['accum_grad'] == 0):\n            for k in ['epoch', 'lr', 'grad_norm']:\n                writer.add_scalar('{}/{}'.format(tag, k), info_dict[k], step + 1)\n            for k, v in loss_dict.items():\n                writer.add_scalar('{}/{}'.format(tag, k), v, step + 1)\n\n    # TRAIN & CV, Shell log (stdout)\n    if (info_dict['batch_idx'] + 1) % info_dict['log_interval'] == 0:\n        log_str = '{} Batch {}/{} '.format(tag, epoch, batch_idx + 1)\n        for name, value in loss_dict.items():\n            log_str += '{} {:.6f} '.format(name, value)\n        if tag == \"TRAIN\":\n            log_str += 'lr {:.8f} grad_norm {:.6f}'.format(\n                info_dict[\"lr\"], info_dict['grad_norm'])\n        log_str += ' rank {}'.format(rank)\n        logging.debug(log_str)\n\n\ndef log_per_save(writer, info_dict):\n    tag = info_dict[\"tag\"]\n    epoch = info_dict[\"epoch\"]\n    step = info_dict[\"step\"]\n    loss_dict = info_dict[\"loss_dict\"]\n    lr = info_dict['lr']\n    rank = int(os.environ.get('RANK', 0))\n    logging.info(\n        'Epoch {} Step {} CV info lr {} {} rank {}'.format(\n            epoch, step + 1, lr, rank, ' '.join(['{} {}'.format(k, v) for k, v in loss_dict.items()])))\n\n    if writer is not None:\n        for k in ['epoch', 'lr']:\n            writer.add_scalar('{}/{}'.format(tag, k), info_dict[k], step + 1)\n        for k, v in loss_dict.items():\n            writer.add_scalar('{}/{}'.format(tag, k), v, step + 1)\n"
  },
  {
    "path": "cosyvoice/vllm/cosyvoice2.py",
    "content": "# SPDX-License-Identifier: Apache-2.0\n\n# Adapted from\n# https://github.com/huggingface/transformers/blob/v4.28.0/src/transformers/models/qwen2/modeling_qwen2.py\n# Copyright 2024 The Qwen team.\n# Copyright 2023 The vLLM team.\n# Copyright 2022 EleutherAI and the HuggingFace Inc. team. All rights reserved.\n#\n# This code is based on EleutherAI's GPT-NeoX library and the GPT-NeoX\n# and OPT implementations in this library. It has been modified from its\n# original forms to accommodate minor architectural differences compared\n# to GPT-NeoX and OPT used by the Meta AI team that trained the model.\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\"\"\"Inference-only Qwen2 model compatible with HuggingFace weights.\"\"\"\nfrom typing import Optional\nfrom packaging.version import parse as vparse\nimport vllm\n\n# vLLM-0.11.0+ only support V1 engine\nVLLM_V1_ENGINE_ONLY: bool = vparse(vllm.__version__) >= vparse(\"0.11.0\")\nif VLLM_V1_ENGINE_ONLY:\n    from vllm.v1.sample.metadata import SamplingMetadata\n\nfrom vllm.model_executor.models.qwen2 import *\n\n\nclass CosyVoice2ForCausalLM(nn.Module, SupportsLoRA, SupportsPP):\n    packed_modules_mapping = {\n        \"qkv_proj\": [\n            \"q_proj\",\n            \"k_proj\",\n            \"v_proj\",\n        ],\n        \"gate_up_proj\": [\n            \"gate_proj\",\n            \"up_proj\",\n        ],\n    }\n\n    def __init__(self, *, vllm_config: VllmConfig, prefix: str = \"\"):\n        super().__init__()\n        config = vllm_config.model_config.hf_config\n        quant_config = vllm_config.quant_config\n        lora_config = vllm_config.lora_config\n\n        self.config = config\n        self.lora_config = lora_config\n\n        self.quant_config = quant_config\n        self.model = Qwen2Model(vllm_config=vllm_config,\n                                prefix=maybe_prefix(prefix, \"model\"))\n\n        if get_pp_group().is_last_rank:\n            if config.tie_word_embeddings:\n                self.lm_head = self.model.embed_tokens\n            else:\n                self.lm_head = ParallelLMHead(config.vocab_size,\n                                              config.hidden_size,\n                                              True,\n                                              quant_config=quant_config,\n                                              prefix=maybe_prefix(\n                                                  prefix, \"lm_head\"))\n        else:\n            self.lm_head = PPMissingLayer()\n\n        self.logits_processor = LogitsProcessor(config.vocab_size)\n\n        self.make_empty_intermediate_tensors = (\n            self.model.make_empty_intermediate_tensors)\n\n    def get_input_embeddings(self, input_ids: torch.Tensor) -> torch.Tensor:\n        return self.model.get_input_embeddings(input_ids)\n\n    def forward(\n        self,\n        input_ids: torch.Tensor,\n        positions: torch.Tensor,\n        intermediate_tensors: Optional[IntermediateTensors] = None,\n        inputs_embeds: Optional[torch.Tensor] = None,\n    ) -> Union[torch.Tensor, IntermediateTensors]:\n        hidden_states = self.model(input_ids, positions, intermediate_tensors,\n                                   inputs_embeds)\n        return hidden_states\n\n    def compute_logits(\n        self,\n        hidden_states: torch.Tensor,\n        sampling_metadata: Optional[SamplingMetadata] = None,\n    ) -> Optional[torch.Tensor]:\n        if VLLM_V1_ENGINE_ONLY:\n            logits = self.logits_processor(self.lm_head, hidden_states,\n                                           self.lm_head.bias)\n        else:\n            logits = self.logits_processor(self.lm_head, hidden_states,\n                                           sampling_metadata, self.lm_head.bias)\n        return logits\n\n    def load_weights(self, weights: Iterable[tuple[str,\n                                                   torch.Tensor]]) -> set[str]:\n        loader = AutoWeightsLoader(\n            self,\n            skip_prefixes=([\"lm_head.\"]\n                           if self.config.tie_word_embeddings else None),\n        )\n        return loader.load_weights(weights)\n"
  },
  {
    "path": "docker/Dockerfile",
    "content": "FROM nvidia/cuda:12.4.1-cudnn-devel-ubuntu22.04\n\nARG VENV_NAME=\"cosyvoice\"\nENV VENV=$VENV_NAME\nENV LANG=C.UTF-8 LC_ALL=C.UTF-8\n\nENV DEBIAN_FRONTEND=noninteractive\nENV PYTHONUNBUFFERED=1\nSHELL [\"/bin/bash\", \"--login\", \"-c\"]\n\nRUN apt-get update -y --fix-missing\nRUN apt-get install -y git build-essential curl wget ffmpeg unzip git git-lfs sox libsox-dev && \\\n    apt-get clean && \\\n    git lfs install\n\n# ==================================================================\n# conda install and conda forge channel as default\n# ------------------------------------------------------------------\n# Install miniforge\nRUN wget --quiet https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh -O ~/miniforge.sh && \\\n    /bin/bash ~/miniforge.sh -b -p /opt/conda && \\\n    rm ~/miniforge.sh && \\\n    ln -s /opt/conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh && \\\n    echo \"source /opt/conda/etc/profile.d/conda.sh\" >> /opt/nvidia/entrypoint.d/100.conda.sh && \\\n    echo \"source /opt/conda/etc/profile.d/conda.sh\" >> ~/.bashrc && \\\n    echo \"conda activate ${VENV}\" >> /opt/nvidia/entrypoint.d/110.conda_default_env.sh && \\\n    echo \"conda activate ${VENV}\" >> $HOME/.bashrc\n\nENV PATH /opt/conda/bin:$PATH\n\nRUN conda config --add channels conda-forge && \\\n    conda config --set channel_priority strict\n# ------------------------------------------------------------------\n# ~conda\n# ==================================================================\n\nRUN conda create -y -n ${VENV} python=3.10\nENV CONDA_DEFAULT_ENV=${VENV}\nENV PATH /opt/conda/bin:/opt/conda/envs/${VENV}/bin:$PATH\n\nWORKDIR /workspace\n\nENV PYTHONPATH=\"${PYTHONPATH}:/workspace/CosyVoice:/workspace/CosyVoice/third_party/Matcha-TTS\"\n\nRUN git clone --recursive https://github.com/FunAudioLLM/CosyVoice.git\n\nRUN conda activate ${VENV} && conda install -y -c conda-forge pynini==2.1.5\nRUN conda activate ${VENV} && cd CosyVoice && \\\n    pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com --no-cache-dir\n\nWORKDIR /workspace/CosyVoice\n"
  },
  {
    "path": "example.py",
    "content": "import sys\nsys.path.append('third_party/Matcha-TTS')\nfrom cosyvoice.cli.cosyvoice import AutoModel\nimport torchaudio\n\n\ndef cosyvoice_example():\n    \"\"\" CosyVoice Usage, check https://fun-audio-llm.github.io/ for more details\n    \"\"\"\n    cosyvoice = AutoModel(model_dir='pretrained_models/CosyVoice-300M-SFT')\n    # sft usage\n    print(cosyvoice.list_available_spks())\n    # change stream=True for chunk stream inference\n    for i, j in enumerate(cosyvoice.inference_sft('你好，我是通义生成式语音大模型，请问有什么可以帮您的吗？', '中文女', stream=False)):\n        torchaudio.save('sft_{}.wav'.format(i), j['tts_speech'], cosyvoice.sample_rate)\n\n    cosyvoice = AutoModel(model_dir='pretrained_models/CosyVoice-300M')\n    # zero_shot usage\n    for i, j in enumerate(cosyvoice.inference_zero_shot('收到好友从远方寄来的生日礼物，那份意外的惊喜与深深的祝福让我心中充满了甜蜜的快乐，笑容如花儿般绽放。', '希望你以后能够做的比我还好呦。', './asset/zero_shot_prompt.wav')):\n        torchaudio.save('zero_shot_{}.wav'.format(i), j['tts_speech'], cosyvoice.sample_rate)\n    # cross_lingual usage, <|zh|><|en|><|ja|><|yue|><|ko|> for Chinese/English/Japanese/Cantonese/Korean\n    for i, j in enumerate(cosyvoice.inference_cross_lingual('<|en|>And then later on, fully acquiring that company. So keeping management in line, interest in line with the asset that\\'s coming into the family is a reason why sometimes we don\\'t buy the whole thing.',\n                                                            './asset/cross_lingual_prompt.wav')):\n        torchaudio.save('cross_lingual_{}.wav'.format(i), j['tts_speech'], cosyvoice.sample_rate)\n    # vc usage\n    for i, j in enumerate(cosyvoice.inference_vc('./asset/cross_lingual_prompt.wav', './asset/zero_shot_prompt.wav')):\n        torchaudio.save('vc_{}.wav'.format(i), j['tts_speech'], cosyvoice.sample_rate)\n\n    cosyvoice = AutoModel(model_dir='pretrained_models/CosyVoice-300M-Instruct')\n    # instruct usage, support <laughter></laughter><strong></strong>[laughter][breath]\n    for i, j in enumerate(cosyvoice.inference_instruct('在面对挑战时，他展现了非凡的<strong>勇气</strong>与<strong>智慧</strong>。', '中文男',\n                                                       'Theo \\'Crimson\\', is a fiery, passionate rebel leader. Fights with fervor for justice, but struggles with impulsiveness.<|endofprompt|>')):\n        torchaudio.save('instruct_{}.wav'.format(i), j['tts_speech'], cosyvoice.sample_rate)\n\n\ndef cosyvoice2_example():\n    \"\"\" CosyVoice2 Usage, check https://funaudiollm.github.io/cosyvoice2/ for more details\n    \"\"\"\n    cosyvoice = AutoModel(model_dir='pretrained_models/CosyVoice2-0.5B')\n\n    # NOTE if you want to reproduce the results on https://funaudiollm.github.io/cosyvoice2, please add text_frontend=False during inference\n    # zero_shot usage\n    for i, j in enumerate(cosyvoice.inference_zero_shot('收到好友从远方寄来的生日礼物，那份意外的惊喜与深深的祝福让我心中充满了甜蜜的快乐，笑容如花儿般绽放。', '希望你以后能够做的比我还好呦。', './asset/zero_shot_prompt.wav')):\n        torchaudio.save('zero_shot_{}.wav'.format(i), j['tts_speech'], cosyvoice.sample_rate)\n\n    # save zero_shot spk for future usage\n    assert cosyvoice.add_zero_shot_spk('希望你以后能够做的比我还好呦。', './asset/zero_shot_prompt.wav', 'my_zero_shot_spk') is True\n    for i, j in enumerate(cosyvoice.inference_zero_shot('收到好友从远方寄来的生日礼物，那份意外的惊喜与深深的祝福让我心中充满了甜蜜的快乐，笑容如花儿般绽放。', '', '', zero_shot_spk_id='my_zero_shot_spk')):\n        torchaudio.save('zero_shot_{}.wav'.format(i), j['tts_speech'], cosyvoice.sample_rate)\n    cosyvoice.save_spkinfo()\n\n    # fine grained control, for supported control, check cosyvoice/tokenizer/tokenizer.py#L248\n    for i, j in enumerate(cosyvoice.inference_cross_lingual('在他讲述那个荒诞故事的过程中，他突然[laughter]停下来，因为他自己也被逗笑了[laughter]。', './asset/zero_shot_prompt.wav')):\n        torchaudio.save('fine_grained_control_{}.wav'.format(i), j['tts_speech'], cosyvoice.sample_rate)\n\n    # instruct usage\n    for i, j in enumerate(cosyvoice.inference_instruct2('收到好友从远方寄来的生日礼物，那份意外的惊喜与深深的祝福让我心中充满了甜蜜的快乐，笑容如花儿般绽放。', '用四川话说这句话<|endofprompt|>', './asset/zero_shot_prompt.wav')):\n        torchaudio.save('instruct_{}.wav'.format(i), j['tts_speech'], cosyvoice.sample_rate)\n\n    # bistream usage, you can use generator as input, this is useful when using text llm model as input\n    # NOTE you should still have some basic sentence split logic because llm can not handle arbitrary sentence length\n    def text_generator():\n        yield '收到好友从远方寄来的生日礼物，'\n        yield '那份意外的惊喜与深深的祝福'\n        yield '让我心中充满了甜蜜的快乐，'\n        yield '笑容如花儿般绽放。'\n    for i, j in enumerate(cosyvoice.inference_zero_shot(text_generator(), '希望你以后能够做的比我还好呦。', './asset/zero_shot_prompt.wav', stream=False)):\n        torchaudio.save('zero_shot_bistream_{}.wav'.format(i), j['tts_speech'], cosyvoice.sample_rate)\n\n\ndef cosyvoice3_example():\n    \"\"\" CosyVoice3 Usage, check https://funaudiollm.github.io/cosyvoice3/ for more details\n    \"\"\"\n    cosyvoice = AutoModel(model_dir='pretrained_models/Fun-CosyVoice3-0.5B')\n    # zero_shot usage\n    for i, j in enumerate(cosyvoice.inference_zero_shot('八百标兵奔北坡，北坡炮兵并排跑，炮兵怕把标兵碰，标兵怕碰炮兵炮。', 'You are a helpful assistant.<|endofprompt|>希望你以后能够做的比我还好呦。',\n                                                        './asset/zero_shot_prompt.wav', stream=False)):\n        torchaudio.save('zero_shot_{}.wav'.format(i), j['tts_speech'], cosyvoice.sample_rate)\n\n    # fine grained control, for supported control, check cosyvoice/tokenizer/tokenizer.py#L280\n    for i, j in enumerate(cosyvoice.inference_cross_lingual('You are a helpful assistant.<|endofprompt|>[breath]因为他们那一辈人[breath]在乡里面住的要习惯一点，[breath]邻居都很活络，[breath]嗯，都很熟悉。[breath]',\n                                                            './asset/zero_shot_prompt.wav', stream=False)):\n        torchaudio.save('fine_grained_control_{}.wav'.format(i), j['tts_speech'], cosyvoice.sample_rate)\n\n    # instruct usage, for supported control, check cosyvoice/utils/common.py#L28\n    for i, j in enumerate(cosyvoice.inference_instruct2('好少咯，一般系放嗰啲国庆啊，中秋嗰啲可能会咯。', 'You are a helpful assistant. 请用广东话表达。<|endofprompt|>',\n                                                        './asset/zero_shot_prompt.wav', stream=False)):\n        torchaudio.save('instruct_{}.wav'.format(i), j['tts_speech'], cosyvoice.sample_rate)\n    for i, j in enumerate(cosyvoice.inference_instruct2('收到好友从远方寄来的生日礼物，那份意外的惊喜与深深的祝福让我心中充满了甜蜜的快乐，笑容如花儿般绽放。', 'You are a helpful assistant. 请用尽可能快地语速说一句话。<|endofprompt|>',\n                                                        './asset/zero_shot_prompt.wav', stream=False)):\n        torchaudio.save('instruct_{}.wav'.format(i), j['tts_speech'], cosyvoice.sample_rate)\n\n    # hotfix usage\n    for i, j in enumerate(cosyvoice.inference_zero_shot('高管也通过电话、短信、微信等方式对报道[j][ǐ]予好评。', 'You are a helpful assistant.<|endofprompt|>希望你以后能够做的比我还好呦。',\n                                                        './asset/zero_shot_prompt.wav', stream=False)):\n        torchaudio.save('hotfix_{}.wav'.format(i), j['tts_speech'], cosyvoice.sample_rate)\n\n    # NOTE for Japanese usage, you must translate it to katakana.\n    # 歴史的世界においては、過去は単に過ぎ去ったものではない、プラトンのいう如く非有が有である。 -> レキシ テキ セカイ ニ オイ テ ワ、カコ ワ タンニ スギサッ タ モノ デ ワ ナイ、プラトン ノ イウ ゴトク ヒ ユー ガ ユー デ アル。\n    for i, j in enumerate(cosyvoice.inference_cross_lingual('You are a helpful assistant.<|endofprompt|>レキシ テキ セカイ ニ オイ テ ワ、カコ ワ タンニ スギサッ タ モノ デ ワ ナイ、プラトン ノ イウ ゴトク ヒ ユー ガ ユー デ アル。',\n                                                            './asset/zero_shot_prompt.wav', stream=False)):\n        torchaudio.save('japanese_{}.wav'.format(i), j['tts_speech'], cosyvoice.sample_rate)\n\n\ndef main():\n    # cosyvoice_example()\n    # cosyvoice2_example()\n    cosyvoice3_example()\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "examples/grpo/cosyvoice2/Dockerfile",
    "content": "FROM verlai/verl:app-verl0.4-vllm0.8.5-mcore0.12.2-te2.2\nCOPY requirements.txt /myworkspace/requirements.txt\nRUN pip install -r /myworkspace/requirements.txt\nRUN pip install -U nvidia-pytriton\nRUN git clone https://github.com/yuekaizhang/verl.git /myworkspace/verl -b thread && cd /myworkspace/verl && pip install --no-deps -e .\nRUN git clone https://github.com/yuekaizhang/PytritonSenseVoice.git /myworkspace/PytritonSenseVoice && cd /myworkspace/PytritonSenseVoice && pip install -e ."
  },
  {
    "path": "examples/grpo/cosyvoice2/README.md",
    "content": "# CosyVoice2 LLM Reinforcement Learning Recipe\n\nThis recipe demonstrates how to fine-tune the **CosyVoice2** large language model with reinforcement learning algorithms—specifically **GRPO**—using the [veRL](https://github.com/volcengine/verl) framework. Our experiments show that applying GRPO reduces the character error rate (CER) on the CosyVoice3 `zero_shot_zh` set from 4.08% to 3.36%.\n\n## Table of Contents\n\n- [Environment Setup](#environment-setup)\n- [Data Preparation](#data-preparation)\n- [Reward Function & ASR Server](#reward-function--asr-server)\n- [Training](#training)\n- [Evaluation](#evaluation)\n- [Export Model](#export-model)\n- [Results](#results)\n- [Acknowledgement](#acknowledgement)\n\n## Environment Setup\nWe recommend using the pre-built Docker image below. Alternatively, you can manually install the dependencies following the Dockerfile.\n```bash\ndocker pull soar97/verl:app-verl0.4-vllm0.8.5-mcore0.12.2-te2.2\n```\nIf Docker is not available, you can refer to `run.sh` `stage -2` to install the dependencies locally.\n\n## Data Preparation\n\n`prepare_data.py` expects a JSON/JSONL file with at least the following schema:\n\n```jsonc\n{\n  \"text\": \"An example sentence to be synthesized.\"\n}\n```\nYou can download the JSONL files from the metadata directory of the [SparkAudio/voxbox](https://huggingface.co/datasets/SparkAudio/voxbox/tree/main/metadata) dataset on Hugging Face.\n\nStage `0` converts raw JSONL files into the parquet format expected by veRL:\n\n```bash\nbash run.sh 0 0\n```\nCreate two JSONL files—`train.jsonl` and `test.jsonl`.\nThe script will then generate two Parquet files:\n\n```\ndata/parquet_tiny/train.parquet\ndata/parquet_tiny/test.parquet\n```\n\nEach sample is automatically wrapped into a CosyVoice2-style prompt so that the LLM learns to output CosyVoice2 speech tokens.\n\n\n## Reward Function & ASR Server\n\nTo compute rewards, we run a lightweight server that:\n\n1. Converts generated speech tokens back to a 16 kHz waveform with the **CosyVoice2** pretrained U-Net model.\n2. Transcribes the waveform with **SenseVoice** ASR.\n3. Calculates the pinyin-level error rate relative to the ground-truth text and maps it to a score between 0 and 1.\n\nStart the server (stage `1`) in a dedicated terminal or on a separate GPU:\n\n```bash\nbash run.sh 1 1\n# Triton server listens on ports 8000/8001/8002\n```\n\nThe custom reward implementation is located in [`reward_tts.py`](./reward_tts.py) and calls the server to obtain the reward score.\n\n## Training\n\nRun stage `2` to start GRPO training:\n\n```bash\nbash run.sh 2 2\n```\n\nKey CLI arguments passed to `verl.trainer.main_ppo`:\n\n* `algorithm.adv_estimator=grpo` – use GRPO instead of PPO.\n* `data.train_files=data/parquet_aishell3/train.parquet` and `data.val_files=data/parquet_aishell3/test.parquet`\n* `custom_reward_function.path=reward_tts.py` – custom reward function described above.\n\nAdjust `CUDA_VISIBLE_DEVICES`, batch sizes, and other hyperparameters to match your hardware.\n> [!TIP]\n> Note: the lm_head bias is disabled during training to make the model compatible with VLLM and Transformers' Qwen model.\n\n## Evaluation\n\nAfter training is complete, collect the sharded FSDP weights and export a Hugging Face-style checkpoint (stage `3`):\n\n```bash\nbash run.sh 3 3   # merges weights into $llm_path/merged_hf_model\n```\n\nYou can then evaluate the model on the CosyVoice3 zero-shot Chinese test set (stage `4`):\n\n```bash\nbash run.sh 4 4\n```\n\nThis command launches distributed inference via `infer_dataset.py` and computes WER with `scripts/compute_wer.sh`.\n\n> [!TIP]\n> The script also supports the Seed-TTS test set by setting `dataset=test_zh`.\n\n## Export Model\n\nTo use the RL-trained model with the official CosyVoice repository:\n\n```bash\nbash run.sh 5 5\n```\n\nThe script converts the Hugging Face checkpoint back into the format expected by the CosyVoice repository.\n> [!TIP]\n>  However, we observed a slight accuracy drop when using the RL-trained model after conversion, compared with the Hugging Face format.\n\n## Results\n\n| Model | Seed-TTS `test_zh` CER | CosyVoice3 `zero_shot_zh` CER | Comment |\n|-------|------------------------|------------------------------|---------|\n| CosyVoice2 LLM (official) | 1.45% | 4.08% | See the [paper](https://arxiv.org/abs/2412.10117) |\n| CosyVoice2 LLM + GRPO | 1.37% | **3.36%** | See the [decoding results](yuekai/official-cosyvoice-llm-grpo-aishell3), Hugging Face-format model |\n\n## Acknowledgement\n\nThis work was inspired by the implementation in [ch-tts-llasa-rl-grpo](https://github.com/channel-io/ch-tts-llasa-rl-grpo).\n"
  },
  {
    "path": "examples/grpo/cosyvoice2/huggingface_to_pretrained.py",
    "content": "\n# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION.  All rights reserved.\n# SPDX-License-Identifier: Apache-2.0\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\"\"\"\npython3 hf2pretrained.py --hf-cosyvoice2-llm-path /workspace/rl-exp/checkpoint-400 --output-path /workspace/CosyVoice2-0.5B/llm-new.pt\n\"\"\"\nfrom argparse import ArgumentParser\nimport torch\nfrom safetensors import safe_open\nfrom transformers import AutoTokenizer\n\n\ndef get_args():\n    parser = ArgumentParser()\n\n    parser.add_argument(\n        \"--hf-cosyvoice2-llm-path\",\n        type=str,\n        default=None,\n        help=\"The RL trained CosyVoice2 model path in HuggingFace format\",\n    )\n    parser.add_argument(\n        \"--output-path\",\n        type=str,\n        default=\"./llm.pt\",\n        help=\"The path to save the llm.pt\",\n    )\n    args = parser.parse_args()\n    return args\n\n\nif __name__ == \"__main__\":\n    args = get_args()\n\n    tokenizer = AutoTokenizer.from_pretrained(args.hf_cosyvoice2_llm_path)\n    speech_start_idx = tokenizer.convert_tokens_to_ids(\"<|s_0|>\")\n    cosyvoice2_token_size = 6561 + 3\n    llm_embedding_vocab_size = 2\n\n    hf_tensors = {}\n    with safe_open(f\"{args.hf_cosyvoice2_llm_path}/model.safetensors\", framework=\"pt\", device=\"cpu\") as f:\n        for k in f.keys():\n            if k.startswith(\"lm_head.bias\"):\n                # RL trained model disable bias for lm_head\n                continue\n            new_k = \"llm.model.\" + k\n            hf_tensors[new_k] = f.get_tensor(k)\n            if k.startswith(\"lm_head\"):\n                hf_tensors[\"llm_decoder.weight\"] = f.get_tensor(k)[speech_start_idx:speech_start_idx + cosyvoice2_token_size]\n                hf_tensors[\"llm_decoder.bias\"] = torch.zeros_like(hf_tensors[\"llm_decoder.weight\"][:, 0])\n            if k.startswith(\"model.embed_tokens\"):\n                hf_tensors[\"speech_embedding.weight\"] = f.get_tensor(k)[speech_start_idx:speech_start_idx + cosyvoice2_token_size]\n                hf_tensors[\"llm_embedding.weight\"] = f.get_tensor(k)[speech_start_idx + cosyvoice2_token_size:speech_start_idx + cosyvoice2_token_size + llm_embedding_vocab_size]\n\n        # use tie_word_embeddings=True\n        hf_tensors[\"llm.model.model.embed_tokens.weight\"] = hf_tensors[\"llm.model.model.embed_tokens.weight\"][:151936]\n        hf_tensors[\"llm.model.lm_head.weight\"] = hf_tensors[\"llm.model.model.embed_tokens.weight\"]\n\n    torch.save(hf_tensors, args.output_path)\n"
  },
  {
    "path": "examples/grpo/cosyvoice2/infer_dataset.py",
    "content": "# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION.  All rights reserved.\n# SPDX-License-Identifier: Apache-2.0\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\"\"\" Example Usage\ndataset=zero_shot_zh\noutput_dir=./outputs_rl_aishell3_step${step}_${dataset}_jit_trt_fp16_reward_tts\n\ntoken2wav_path=/workspace/CosyVoice2-0.5B\nCUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 \\\ntorchrun --nproc_per_node=8 \\\n    infer_dataset.py \\\n    --output-dir $output_dir \\\n    --llm-model-name-or-path $llm_path/merged_hf_model \\\n    --token2wav-path $token2wav_path \\\n    --split-name ${dataset} || exit 1\n\"\"\"\n\nimport argparse\nimport json\nimport os\nimport sys\nfrom pathlib import Path\n\nimport torch\nimport torch.distributed as dist\nimport torch.nn.functional as F\nimport torchaudio\nfrom cosyvoice.cli.cosyvoice import CosyVoice2\nfrom cosyvoice.utils.file_utils import load_wav\nfrom datasets import load_dataset\nfrom transformers import AutoTokenizer, AutoModelForCausalLM\nfrom torch.utils.data import DataLoader, Dataset, DistributedSampler\nfrom tqdm import tqdm\nimport soundfile as sf\nimport s3tokenizer\nfrom functools import partial\n\nsys.path.append(\"/workspace/CosyVoice/third_party/Matcha-TTS\")\ntry:\n    torch.multiprocessing.set_start_method(\"spawn\")\nexcept RuntimeError:\n    pass\n\n\nTEMPLATE = \"{% for message in messages %}{%- if message['role'] == 'user' %}{{- '<|im_start|>' + message['role'] + '\\n' + 'Convert the text to speech: ' + message['content'] + '<|im_end|>\\n'}}{%- elif message['role'] == 'assistant' %}{{- '<|im_start|>' + message['role'] + '\\n' + '<|SPEECH_GENERATION_START|>' + message['content']}}{%- endif %}{%- endfor %}\"  # noqa: E501\n\n\ndef audio_decode_cosyvoice2(\n    audio_tokens, prompt_text, prompt_speech_16k, codec_decoder\n):\n    \"\"\"\n    Generate audio from tokens with optional tone and prompt embedding.\n    \"\"\"\n    model_inputs_dict = codec_decoder.frontend.frontend_zero_shot(\n        \"empty\", prompt_text, prompt_speech_16k, 24000\n    )\n    tts_mel, _ = codec_decoder.model.flow.inference(\n        token=audio_tokens.to(codec_decoder.model.device),\n        token_len=torch.tensor([audio_tokens.shape[1]], dtype=torch.int32).to(\n            codec_decoder.model.device\n        ),\n        prompt_token=model_inputs_dict[\"flow_prompt_speech_token\"].to(\n            codec_decoder.model.device\n        ),\n        prompt_token_len=torch.tensor(\n            [model_inputs_dict[\"flow_prompt_speech_token_len\"]], dtype=torch.int32\n        ).to(codec_decoder.model.device),\n        prompt_feat=model_inputs_dict[\"prompt_speech_feat\"].to(\n            codec_decoder.model.device\n        ),\n        prompt_feat_len=model_inputs_dict[\"prompt_speech_feat_len\"].to(\n            codec_decoder.model.device\n        ),\n        embedding=model_inputs_dict[\"flow_embedding\"].to(codec_decoder.model.device),\n        finalize=True,\n    )\n\n    audio_hat, _ = codec_decoder.model.hift.inference(\n        speech_feat=tts_mel, cache_source=torch.zeros(1, 1, 0)\n    )\n\n    return audio_hat\n\n\ndef extract_speech_ids(speech_tokens_str):\n    \"\"\"Extract speech IDs from token strings like <|s_23456|>\"\"\"\n    speech_ids = []\n    for token_str in speech_tokens_str:\n        if token_str.startswith('<|s_') and token_str.endswith('|>'):\n            num_str = token_str[4:-2]\n            num = int(num_str)\n            speech_ids.append(num)\n        else:\n            print(f\"Unexpected token: {token_str}\")\n    return speech_ids\n\n\ndef convert_cosy2_tokens_to_speech_id_str(cosy2_tokens):\n    \"\"\"Convert CosyVoice2 tokens to speech IDs string like <|s_23456|>\"\"\"\n    speech_id_str = \"\"\n    for token in cosy2_tokens:\n        speech_id_str += f\"<|s_{token}|>\"\n    return speech_id_str\n\n\ndef get_args():\n    parser = argparse.ArgumentParser(description=\"Speech generation using LLM + CosyVoice2\")\n    parser.add_argument(\n        \"--split-name\",\n        type=str,\n        default=\"wenetspeech4tts\",\n        help=\"huggingface dataset split name, see yuekai/CV3-Eval, yuekai/seed_tts_cosy2\",\n    )\n    parser.add_argument(\n        \"--output-dir\", required=True, type=str, help=\"dir to save result\"\n    )\n    parser.add_argument(\n        \"--batch-size\",\n        default=1,\n        type=int,\n        help=\"batch size (per-device) for inference\",\n    )\n    parser.add_argument(\n        \"--num-workers\", type=int, default=1, help=\"workers for dataloader\"\n    )\n    parser.add_argument(\n        \"--prefetch\", type=int, default=5, help=\"prefetch for dataloader\"\n    )\n    parser.add_argument(\n        \"--llm-model-name-or-path\",\n        required=True,\n        type=str,\n        help=\"LLM model path (includes both model and tokenizer)\",\n    )\n    parser.add_argument(\n        \"--token2wav-path\",\n        required=True,\n        type=str,\n        help=\"CosyVoice2 token2wav model path\",\n    )\n    parser.add_argument(\n        \"--prompt-text\",\n        type=str,\n        default=None,\n        help=\"The prompt text for CosyVoice2\",\n    )\n    parser.add_argument(\n        \"--prompt-speech-path\",\n        type=str,\n        default=None,\n        help=\"The path to the prompt speech for CosyVoice2\",\n    )\n    parser.add_argument(\n        \"--top-p\",\n        type=float,\n        default=0.95,\n        help=\"top p for sampling\",\n    )\n    parser.add_argument(\n        \"--temperature\",\n        type=float,\n        default=0.8,\n        help=\"temperature for sampling\",\n    )\n    parser.add_argument(\n        \"--top-k\",\n        type=int,\n        default=50,\n        help=\"top k for sampling\",\n    )\n    args = parser.parse_args()\n    return args\n\n\ndef data_collator(batch, tokenizer, s3_tokenizer):\n    \"\"\"Simplified data collator for batch_size=1 processing\"\"\"\n    target_sample_rate = 16000  # CosyVoice2 uses 16kHz for prompt audio\n    device = s3_tokenizer.device if s3_tokenizer is not None else torch.device(\"cpu\")\n    input_ids_list, prompt_audio_list, prompt_text_list = [], [], []\n    mels, prompt_audio_cosy2tokens_list = [], []\n    for item in batch:\n        prompt_text, target_text = (\n            item[\"prompt_text\"],\n            item[\"target_text\"],\n        )\n        prompt_text_list.append(prompt_text)\n        # Combine prompt and target text\n        full_text = prompt_text + target_text\n\n        # get prompt audio for CosyVoice2 (convert to 16kHz)\n        ref_audio_org, ref_sr = (\n            item[\"prompt_audio\"][\"array\"],\n            item[\"prompt_audio\"][\"sampling_rate\"],\n        )\n        ref_audio_org = torch.from_numpy(ref_audio_org).float().unsqueeze(0)\n        # ref_audio_org = ref_audio_org.mean(dim=0, keepdim=True)\n        print(ref_audio_org.shape)\n\n        if ref_sr != target_sample_rate:\n            resampler = torchaudio.transforms.Resample(ref_sr, target_sample_rate)\n            ref_audio = resampler(ref_audio_org)\n        else:\n            ref_audio = ref_audio_org\n\n        prompt_audio_list.append(ref_audio)\n\n        if \"prompt_audio_cosy2_tokens\" in item:\n            prompt_audio_cosy2tokens = item[\"prompt_audio_cosy2_tokens\"]\n            prompt_audio_cosy2tokens_list.append(prompt_audio_cosy2tokens)\n        else:\n            # convert to float first\n            mels.append(s3tokenizer.log_mel_spectrogram(ref_audio.squeeze(0)))\n\n    if len(mels) > 0:\n        mels, mels_lens = s3tokenizer.padding(mels)\n        codes, codes_lens = s3_tokenizer.quantize(mels.to(device), mels_lens.to(device))\n        for i in range(len(codes)):\n            prompt_audio_cosy2tokens_list.append(codes[i, :codes_lens[i].item()])\n    for prompt_audio_cosy2tokens in prompt_audio_cosy2tokens_list:\n        prompt_audio_cosy2_id_str = convert_cosy2_tokens_to_speech_id_str(prompt_audio_cosy2tokens)\n        # Create chat template for LLM generation\n        chat = [\n            {\"role\": \"user\", \"content\": full_text},\n            {\"role\": \"assistant\", \"content\": prompt_audio_cosy2_id_str}\n        ]\n        if 'system' in tokenizer.chat_template:\n            tokenizer.chat_template = TEMPLATE\n        input_ids = tokenizer.apply_chat_template(\n            chat,\n            tokenize=True,\n            return_tensors='pt',\n            continue_final_message=True\n        )\n        input_ids_list.append(input_ids.squeeze(0))\n\n    # For batch_size=1, no need to pad\n    if len(input_ids_list) == 1:\n        input_ids = input_ids_list[0].unsqueeze(0)\n    else:\n        # Handle batch > 1 if needed\n        max_len = max([len(input_ids) for input_ids in input_ids_list])\n        input_ids_list = [\n            torch.cat([torch.full((max_len - len(input_ids),), tokenizer.pad_token_id), input_ids])\n            for input_ids in input_ids_list\n        ]\n        input_ids = torch.stack(input_ids_list)\n\n    ids = [item[\"id\"] for item in batch]\n\n    return {\n        \"input_ids\": input_ids,\n        \"ids\": ids,\n        \"prompt_text\": prompt_text_list,\n        \"prompt_audio_list\": prompt_audio_list,\n    }\n\n\ndef init_distributed():\n    world_size = int(os.environ.get(\"WORLD_SIZE\", 1))\n    local_rank = int(os.environ.get(\"LOCAL_RANK\", 0))\n    rank = int(os.environ.get(\"RANK\", 0))\n    print(\n        \"Inference on multiple gpus, this gpu {}\".format(local_rank)\n        + \", rank {}, world_size {}\".format(rank, world_size)\n    )\n    torch.cuda.set_device(local_rank)\n    dist.init_process_group(\"nccl\")\n    return world_size, local_rank, rank\n\n\ndef main():\n    args = get_args()\n    os.makedirs(args.output_dir, exist_ok=True)\n\n    assert torch.cuda.is_available()\n    world_size, local_rank, rank = init_distributed()\n    device = torch.device(f\"cuda:{local_rank}\")\n\n    # Load LLM model and tokenizer directly\n    tokenizer = AutoTokenizer.from_pretrained(args.llm_model_name_or_path)\n    model = AutoModelForCausalLM.from_pretrained(args.llm_model_name_or_path)\n    model.eval()\n    model.to(device)\n\n    cosyvoice_codec = CosyVoice2(\n        args.token2wav_path, load_jit=True, load_trt=True, fp16=True\n    )\n    if args.prompt_speech_path:\n        prompt_speech_16k = load_wav(args.prompt_speech_path, 16000)\n    else:\n        prompt_speech_16k = None\n    s3_tokenizer = s3tokenizer.load_model(\"speech_tokenizer_v2_25hz\").to(device) if 'zero' in args.split_name else None\n    dataset_name = \"yuekai/CV3-Eval\" if 'zero' in args.split_name else \"yuekai/seed_tts_cosy2\"\n    dataset = load_dataset(\n        dataset_name,\n        split=args.split_name,\n        trust_remote_code=True,\n    )\n\n    sampler = DistributedSampler(dataset, num_replicas=world_size, rank=rank)\n\n    dataloader = DataLoader(\n        dataset,\n        batch_size=args.batch_size,\n        sampler=sampler,\n        shuffle=False,\n        num_workers=args.num_workers,\n        prefetch_factor=args.prefetch,\n        collate_fn=partial(data_collator, tokenizer=tokenizer, s3_tokenizer=s3_tokenizer),\n    )\n\n    total_steps = len(dataset)\n\n    if rank == 0:\n        progress_bar = tqdm(total=total_steps, desc=\"Processing\", unit=\"wavs\")\n\n    for batch in dataloader:\n        with torch.no_grad():\n            input_ids = batch[\"input_ids\"].to(device)\n\n            # Generate speech tokens using LLM\n            outputs = model.generate(\n                input_ids,\n                max_new_tokens=2048,  # Max length for generation\n                do_sample=True,\n                top_p=args.top_p,\n                temperature=args.temperature,\n                top_k=args.top_k,\n            )\n\n            # Process each sample in the batch\n            for i in range(len(batch[\"ids\"])):\n                # Extract generated tokens (excluding input)\n                input_length = input_ids[i].shape[0]\n                generated_ids = outputs[i][input_length:-1]  # Remove last token if needed\n                speech_tokens_str = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)\n\n                # Extract speech IDs from token strings like <|s_23456|>\n                speech_ids = extract_speech_ids(speech_tokens_str)\n\n                if len(speech_ids) == 0:\n                    print(f\"Warning: No speech tokens generated for sample {batch['ids'][i]}, skipping\")\n                    continue\n\n                # Convert to tensor for CosyVoice2\n                audio_tokens = torch.tensor(speech_ids, dtype=torch.long, device=device).unsqueeze(0)\n\n                if args.prompt_text is not None:\n                    current_prompt_text = args.prompt_text\n                    current_prompt_audio = prompt_speech_16k\n                else:\n                    current_prompt_text = batch[\"prompt_text\"][i]\n                    current_prompt_audio = batch[\"prompt_audio_list\"][i]\n\n                if current_prompt_audio is not None:\n                    # Generate audio using CosyVoice2\n                    audio_hat = audio_decode_cosyvoice2(\n                        audio_tokens,\n                        current_prompt_text,\n                        current_prompt_audio,\n                        cosyvoice_codec,\n                    )\n\n                    # Convert to numpy and save\n                    generated_wave = audio_hat.squeeze(0).cpu().numpy()\n                    target_sample_rate = 24000\n\n                    utt = batch[\"ids\"][i]\n                    sf.write(f\"{args.output_dir}/{utt}.wav\", generated_wave, target_sample_rate)\n\n                    print(f\"Generated audio for sample {utt} with {len(speech_ids)} tokens\")\n                else:\n                    print(f\"Warning: No prompt audio available for sample {batch['ids'][i]}, skipping\")\n\n        if rank == 0:\n            progress_bar.update(world_size * len(batch[\"ids\"]))\n\n    if rank == 0:\n        progress_bar.close()\n\n    dist.barrier()\n    dist.destroy_process_group()\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "examples/grpo/cosyvoice2/prepare_data.py",
    "content": "# Copyright 2024 Bytedance Ltd. and/or its affiliates\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\"\"\"\nPreprocess the Text to Speech dataset to parquet format\n\"\"\"\n\nimport argparse\nimport os\nimport re\n\nimport datasets\n\nfrom verl.utils.hdfs_io import copy, makedirs\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"--train_file\", required=True, help=\"Path to training JSON/JSONL file\")\n    parser.add_argument(\"--test_file\", required=True, help=\"Path to test JSON/JSONL file\")\n    parser.add_argument(\"--local_dir\", default=None, required=True)\n    parser.add_argument(\"--hdfs_dir\", default=None)\n\n    args = parser.parse_args()\n\n    # Load datasets from local JSON files\n    train_dataset = datasets.load_dataset(\"json\", data_files=args.train_file)['train']\n    test_dataset = datasets.load_dataset(\"json\", data_files=args.test_file)['train']\n\n    # add a row to each data item that represents a unique id\n    def make_map_fn(split):\n        def process_fn(example, idx):\n            text = example.pop(\"text\")\n\n            # use cosyvoice2 official huggingface compatible checkpoint template\n            question = text\n            answer = \"\"\n\n            data = {\n                \"data_source\": f\"{args.train_file}_{args.test_file}\",  # Use file names as data source\n                \"prompt\": [\n                    {\n                        \"role\": \"user\",\n                        \"content\": question,\n                    },\n                    {\n                        \"role\": \"assistant\",\n                        \"content\": answer,\n                    },\n                ],\n                \"ability\": \"text-to-speech\",\n                \"reward_model\": {\"style\": \"rule\", \"ground_truth\": text},\n                \"extra_info\": {\n                    \"split\": split,\n                    \"index\": idx,\n                    \"text\": text,\n                },\n            }\n            return data\n\n        return process_fn\n\n    train_dataset = train_dataset.map(function=make_map_fn(\"train\"), with_indices=True)\n    test_dataset = test_dataset.map(function=make_map_fn(\"test\"), with_indices=True)\n\n    local_dir = args.local_dir\n    hdfs_dir = args.hdfs_dir\n\n    print(train_dataset)\n    print(test_dataset)\n    train_dataset.to_parquet(os.path.join(local_dir, \"train.parquet\"))\n    test_dataset.to_parquet(os.path.join(local_dir, \"test.parquet\"))\n\n    if hdfs_dir is not None:\n        makedirs(hdfs_dir)\n\n        copy(src=local_dir, dst=hdfs_dir)\n"
  },
  {
    "path": "examples/grpo/cosyvoice2/pretrained_to_huggingface.py",
    "content": "# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION.  All rights reserved.\n# SPDX-License-Identifier: Apache-2.0\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\"\"\"\nUsage: Instruct TTS\n  python3 infer.py \\\n    --token2wav-path /workspace/CosyVoice2-0.5B \\\n    --prompt-text \"吃燕窝就选燕之屋，本节目由26年专注高品质燕窝的燕之屋冠名播出。豆奶牛奶换着喝，营养更均衡，本节目由豆本豆豆奶特约播出。\" \\\n    --prompt-speech-path ./assets/prompt_audio.wav \\\n    --model-path ./transformers_cosyvoice2_llm \\\n    --input-text \"用四川话说<|endofprompt|>扁担长，板凳宽，扁担绑在板凳上。吃葡萄不吐葡萄皮，不吃葡萄倒吐葡萄皮。\"\n\"\"\"\nfrom cosyvoice.cli.cosyvoice import CosyVoice2\nimport sys\nfrom argparse import ArgumentParser\nfrom transformers import AutoTokenizer, AutoModelForCausalLM\nimport torch\n\nsys.path.append(\"/workspace/CosyVoice/third_party/Matcha-TTS\")\n\n\ndef get_args():\n    parser = ArgumentParser()\n\n    parser.add_argument(\n        \"--pretrained-cosyvoice2-path\",\n        type=str,\n        default=\"/workspace/CosyVoice2-0.5B\",\n        help=\"Token2Wav path, default to %(default)r\",\n    )\n    parser.add_argument(\n        \"--save-path\",\n        type=str,\n        default='./transformers_cosyvoice2_llm',\n        help=\"The path to save the model\",\n    )\n    args = parser.parse_args()\n    return args\n\n\nif __name__ == \"__main__\":\n    args = get_args()\n    cosy2_model = CosyVoice2(\n        args.pretrained_cosyvoice2_path, load_jit=False, load_trt=False, fp16=False\n    )\n\n    llm = cosy2_model.model.llm.llm.model\n\n    speech_embedding = cosy2_model.model.llm.speech_embedding\n    llm_decoder = cosy2_model.model.llm.llm_decoder\n    llm_embedding = cosy2_model.model.llm.llm_embedding\n\n    tokenizer = AutoTokenizer.from_pretrained(f\"{args.pretrained_cosyvoice2_path}/CosyVoice-BlankEN\")\n    special_tokens = {\n        'eos_token': '<|endoftext|>',\n        'pad_token': '<|endoftext|>',\n        'additional_special_tokens': [\n            '<|im_start|>', '<|im_end|>', '<|endofprompt|>',\n            '[breath]', '<strong>', '</strong>', '[noise]',\n            '[laughter]', '[cough]', '[clucking]', '[accent]',\n            '[quick_breath]',\n            \"<laughter>\", \"</laughter>\",\n            \"[hissing]\", \"[sigh]\", \"[vocalized-noise]\",\n            \"[lipsmack]\", \"[mn]\"\n        ]\n    }\n    tokenizer.add_special_tokens(special_tokens)\n\n    original_tokenizer_vocab_size = len(tokenizer)\n    cosyvoice2_token_size = 6561\n    new_tokens = [f\"<|s_{i}|>\" for i in range(cosyvoice2_token_size)] + [\n        \"<|eos1|>\", \"<|eos2|>\", \"<|eos3|>\", \"<|sos|>\", \"<|task_id|>\"\n    ]\n    num_added_tokens = tokenizer.add_tokens(new_tokens)\n\n    llm.resize_token_embeddings(len(tokenizer), pad_to_multiple_of=128)\n    vocab_size = llm.get_input_embeddings().weight.shape[0]\n\n    feature_size = speech_embedding.embedding_dim\n    new_lm_head = torch.nn.Linear(in_features=feature_size, out_features=vocab_size, bias=True)\n\n    with torch.no_grad():\n        # set the weight and bias of the new lm_head to 0\n        new_lm_head.weight.data.zero_()\n        # make bias value -inf\n        new_lm_head.bias.data.fill_(-float('inf'))\n        new_lm_head.weight[original_tokenizer_vocab_size:original_tokenizer_vocab_size + cosyvoice2_token_size + 3] = llm_decoder.weight\n        new_lm_head.bias[original_tokenizer_vocab_size:original_tokenizer_vocab_size + cosyvoice2_token_size + 3] = llm_decoder.bias\n\n    llm.lm_head = new_lm_head\n    input_embeddings = llm.get_input_embeddings()\n\n    with torch.no_grad():\n        input_embeddings.weight[original_tokenizer_vocab_size:original_tokenizer_vocab_size + cosyvoice2_token_size + 3] = speech_embedding.weight\n        input_embeddings.weight[original_tokenizer_vocab_size + cosyvoice2_token_size + 3:original_tokenizer_vocab_size + cosyvoice2_token_size + 3 + 2] = llm_embedding.weight\n\n    eos_token_ids = [original_tokenizer_vocab_size + cosyvoice2_token_size,\n                     original_tokenizer_vocab_size + cosyvoice2_token_size + 1,\n                     original_tokenizer_vocab_size + cosyvoice2_token_size + 2]\n    llm.generation_config.eos_token_id = eos_token_ids\n    llm.generation_config.temperature = 1.0\n    llm.generation_config.top_p = 0.8\n    llm.generation_config.top_k = 25\n\n    llm.config.eos_token_id = original_tokenizer_vocab_size + cosyvoice2_token_size\n    llm.config.vocab_size = vocab_size\n    llm.config.tie_word_embeddings = False\n    llm.config.use_bias = True\n    llm.to(torch.bfloat16)\n    llm.save_pretrained(args.save_path)\n\n    TEMPLATE = (\n        \"{%- for message in messages %}\"\n        \"{%- if message['role'] == 'user' %}\"\n        \"{{- '<|sos|>' + message['content'] + '<|task_id|>' }}\"\n        \"{%- elif message['role'] == 'assistant' %}\"\n        \"{{- message['content']}}\"\n        \"{%- endif %}\"\n        \"{%- endfor %}\"\n    )\n    tokenizer.chat_template = TEMPLATE\n    tokenizer.save_pretrained(args.save_path)\n"
  },
  {
    "path": "examples/grpo/cosyvoice2/requirements.txt",
    "content": "conformer==0.3.2\ndiffusers==0.29.0\ngdown==5.1.0\ngradio\nhydra-core==1.3.2\nHyperPyYAML==1.2.2\ninflect==7.3.1\nlibrosa==0.10.2\nlightning==2.2.4\nmatplotlib==3.7.5\nmodelscope==1.15.0\nnetworkx==3.1\nomegaconf==2.3.0\nonnx==1.16.0\nonnxruntime-gpu==1.18.0\nprotobuf==4.25\npydantic==2.7.0\npyworld==0.3.4\nrich==13.7.1\nsoundfile==0.12.1\ntensorboard==2.14.0\nwget==3.2\nWeTextProcessing==1.0.3\ns3tokenizer\ntensorrt\nsherpa_onnx\njiwer\nzhon\nnumpy==1.25.2\npypinyin\nopenai-whisper"
  },
  {
    "path": "examples/grpo/cosyvoice2/reward_tts.py",
    "content": "# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION.  All rights reserved.\n# SPDX-License-Identifier: Apache-2.0\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\"\"\"\nReward calculation for CosyVoice2-0.5B.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport re\nimport json\nimport time\nimport argparse\nfrom typing import List\n\nimport numpy as np\nimport requests\n\n\nREWARD_SERVER_URL = \"http://localhost:8000/v2/models/token2wav_asr/infer\"\n\n\ndef _parse_ids(token_str: str) -> List[int]:\n    return [int(t) for t in re.findall(r\"<\\|s_(\\d+)\\|>\", token_str)]\n\n\ndef _remote_reward(tokens: List[int], ground_truth: str, timeout: float = 200.0) -> float:\n    \"\"\"Send token IDs and ground-truth text to the Triton server and get reward.\"\"\"\n\n    tokens_arr = np.array(tokens, dtype=np.int32).reshape(1, -1)\n    lens_arr = np.array([[tokens_arr.shape[1]]], dtype=np.int32)\n\n    gt_arr = np.array([ground_truth.encode(\"utf-8\")], dtype=object)\n\n    payload = {\n        \"inputs\": [\n            {\n                \"name\": \"TOKENS\",\n                \"shape\": list(tokens_arr.shape),\n                \"datatype\": \"INT32\",\n                \"data\": tokens_arr.tolist(),\n            },\n            {\n                \"name\": \"TOKEN_LENS\",\n                \"shape\": list(lens_arr.shape),\n                \"datatype\": \"INT32\",\n                \"data\": lens_arr.tolist(),\n            },\n            {\n                \"name\": \"GT_TEXT\",\n                \"shape\": [1, 1],\n                \"datatype\": \"BYTES\",\n                \"data\": [ground_truth],\n            },\n        ]\n    }\n    rsp = requests.post(\n        REWARD_SERVER_URL,\n        headers={\"Content-Type\": \"application/json\"},\n        json=payload,\n        timeout=timeout,\n        verify=False,\n        params={\"request_id\": \"0\"},\n    )\n    rsp.raise_for_status()\n    result = rsp.json()\n\n    try:\n        # Reward is returned as the first output\n        return float(result[\"outputs\"][0][\"data\"][0])\n    except (KeyError, IndexError, TypeError):\n        return 0.0\n\n\ndef compute_score(\n    data_source: str,\n    solution_str: str,\n    ground_truth: str,\n    extra_info: dict | None = None,\n    *,\n    debug_dump: bool = False,\n) -> float:\n    \"\"\"Return reward in [0, 1] using the Triton ASR service.\n\n    The reward is based on the pinyin-level WER between the ASR transcript\n    produced from *solution_str* and the provided *ground_truth* text.\n    \"\"\"\n\n    # Decode token IDs\n    ids = _parse_ids(solution_str)\n\n    # Query remote server for reward\n    try:\n        reward = _remote_reward(ids, ground_truth)\n    except Exception as e:\n        reward = 0.0\n\n    if debug_dump:\n        print(\n            f\"\\033[92m[{data_source}] Remote reward: {reward:.4f}\\033[0m\"\n        )\n\n    return reward\n\n\n# CLI quick test\nif __name__ == \"__main__\":\n    import sys\n\n    def get_args():\n        \"\"\"Parse command line arguments.\"\"\"\n        parser = argparse.ArgumentParser(\n            description=\"Test TTS CER scoring with data from JSONL file\",\n            formatter_class=argparse.ArgumentDefaultsHelpFormatter\n        )\n\n        parser.add_argument(\n            \"--input\", \"-i\",\n            type=str,\n            default=\"data/emilia_zh-cosy-tiny-test.jsonl\",\n            help=\"Path to input JSONL file\"\n        )\n\n        parser.add_argument(\n            \"--max-samples\", \"-n\",\n            type=int,\n            default=None,\n            help=\"Maximum number of samples to process (default: all)\"\n        )\n\n        parser.add_argument(\n            \"--no-interactive\",\n            action=\"store_true\",\n            help=\"Run in non-interactive mode (process all samples without prompts)\"\n        )\n\n        parser.add_argument(\n            \"--debug\",\n            action=\"store_true\",\n            help=\"Enable debug mode\"\n        )\n\n        return parser.parse_args()\n\n    def load_jsonl(file_path: str):\n        \"\"\"Load data from jsonl file.\"\"\"\n        data = []\n        with open(file_path, 'r', encoding='utf-8') as f:\n            for line in f:\n                data.append(json.loads(line.strip()))\n        return data\n\n    def code_to_solution_str(code_list: List[int]) -> str:\n        \"\"\"Convert code list to solution string format.\"\"\"\n        return ''.join([f\"<|s_{code}|>\" for code in code_list])\n\n    # Parse command line arguments\n    args = get_args()\n\n    try:\n        # Load data from jsonl file\n        print(f\"Loading data from: {args.input}\")\n        data_list = load_jsonl(args.input)\n        print(f\"Loaded {len(data_list)} samples\")\n\n        # Limit samples if specified\n        if args.max_samples is not None:\n            data_list = data_list[:args.max_samples]\n            print(f\"Processing first {len(data_list)} samples (limited by --max-samples)\")\n\n        # Process each sample\n        begin_time = time.time()\n        for i, sample in enumerate(data_list):\n            print(f\"\\n--- Sample {i+1}/{len(data_list)} ---\")\n            print(f\"Index: {sample.get('index', 'unknown')}\")\n            print(f\"Text: {sample['text']}\")\n\n            # Extract required fields\n            code_list = sample['code']\n            ground_truth = sample['text']\n            data_source = sample.get('index', f'sample_{i}')  # Use index as data_source\n\n            # Convert code list to solution string\n            solution_str = code_to_solution_str(code_list)\n            print(f\"Solution tokens: {len(code_list)} tokens\")\n            if args.debug:\n                print(f\"Solution string: {solution_str}\")\n            else:\n                print(f\"Solution string preview: {solution_str[:100]}...\" if len(solution_str) > 100 else f\"Solution string: {solution_str}\")\n\n            # Call compute_score function\n            try:\n                score = compute_score(\n                    data_source=data_source,\n                    solution_str=solution_str,\n                    ground_truth=ground_truth,\n                    extra_info=None,\n                    debug_dump=args.debug\n                )\n                print(f\"Final Score: {score:.4f}\")\n            except Exception as e:\n                print(f\"Error computing score: {e}\")\n\n            # Ask user if they want to continue (for interactive mode)\n            if not args.no_interactive and i < len(data_list) - 1:\n                try:\n                    response = input(\"\\nPress Enter to continue or 'q' to quit: \").strip().lower()\n                    if response == 'q':\n                        break\n                except KeyboardInterrupt:\n                    print(\"\\nStopped by user\")\n                    break\n\n        print(f\"\\nProcessed {min(i+1, len(data_list))} samples\")\n        end_time = time.time()\n        print(f\"Time taken: {end_time - begin_time} seconds\")\n    except FileNotFoundError:\n        print(f\"Error: File not found - {args.input}\")\n        print(\"Please check the file path or use --input to specify correct path\")\n        print(\"Run with --help for usage information\")\n    except Exception as e:\n        print(f\"Error: {e}\")\n"
  },
  {
    "path": "examples/grpo/cosyvoice2/run.sh",
    "content": "#!/usr/bin/env bash\n\nset -eou pipefail\n\nstage=-1\nstop_stage=4\n\nlog() {\n  # This function is from espnet\n  local fname=${BASH_SOURCE[1]##*/}\n  echo -e \"$(date '+%Y-%m-%d %H:%M:%S') (${fname}:${BASH_LINENO[0]}:${FUNCNAME[1]}) $*\"\n}\n\nexport PYTHONPATH=/workspace/CosyVoice\nmodel_scope_model_path=./CosyVoice2-0.5B\nsft_model_path=./transformers_cosyvoice2_llm\n\nif [ $stage -le -2 ] && [ $stop_stage -ge -2 ]; then\n  log \"stage -2: install dependencies locally if pre-built docker image is not available\"\n  conda create -n cosyvoice2 python=3.10 -y\n  conda activate cosyvoice2\n    # install verl\n  git clone https://github.com/yuekaizhang/verl.git -b thread\n  cd verl\n  USE_MEGATRON=0 bash scripts/install_vllm_sglang_mcore.sh\n  pip install --no-deps -e .\n  cd -\n  # install requirements\n  pip install -r requirements.txt\n  pip install -U nvidia-pytriton\n  git clone https://github.com/yuekaizhang/PytritonSenseVoice.git && cd PytritonSenseVoice && pip install -e .\nfi\n\nif [ $stage -le -1 ] && [ $stop_stage -ge -1 ]; then\n  log \"stage -1: download official CosyVoice2-0.5B LLM model and convert to huggingface compatible checkpoint\"\n  modelscope download --model iic/CosyVoice2-0.5B --local_dir $model_scope_model_path\n  python3 pretrained_to_huggingface.py \\\n    --pretrained-cosyvoice2-path $model_scope_model_path \\\n    --save-path $sft_model_path\n\n  # Or, you could use the following command to download the huggingface compatible checkpoint\n  # huggingface-cli download --local-dir $sft_model_path yuekai/cosyvoice2_llm\n\n  # Note: we remove the lm_head's bias to make it compatible with the Qwen2.5-0.5B model in Transformers.\nfi\n\ndata_dir=data/parquet_aishell3\nif [ $stage -le 0 ] && [ $stop_stage -ge 0 ]; then\n  log \"stage 0: prepare data into verl format\"\n  mkdir -p $data_dir\n  wget -O data/aishell-3.jsonl https://huggingface.co/datasets/SparkAudio/voxbox/resolve/main/metadata/aishell-3.jsonl\n  # total 88035 samples\n  head -n 80000 data/aishell-3.jsonl > data/train.jsonl\n  tail -n 100 data/aishell-3.jsonl > data/test.jsonl\n  python prepare_data.py \\\n    --train_file data/train.jsonl \\\n    --test_file data/test.jsonl \\\n    --local_dir $data_dir\nfi\n\nif [ $stage -le 1 ] && [ $stop_stage -ge 1 ]; then\n  log \"stage 1: start token2wav asr server for reward function\"\n  python3 token2wav_asr_server.py --number-of-devices 8\nfi\n\nexp_name=official_llm_aishell3_grpo\nif [ $stage -le 2 ] && [ $stop_stage -ge 2 ]; then\n  log \"stage 2: grpo train\"\n  export CUDA_VISIBLE_DEVICES=\"0,1,2,3,4,5,6,7\"\n  export MKL_SERVICE_FORCE_INTEL=TRUE\n  n_gpus_per_node=8\n  micro_batch_size=4\n  train_batch_size=32\n  python3 -m verl.trainer.main_ppo \\\n      algorithm.adv_estimator=grpo \\\n      data.train_files=$data_dir/train.parquet \\\n      data.val_files=$data_dir/test.parquet \\\n      data.train_batch_size=$train_batch_size \\\n      data.max_prompt_length=1024 \\\n      data.max_response_length=512 \\\n      data.truncation='error' \\\n      actor_rollout_ref.model.use_remove_padding=False \\\n      actor_rollout_ref.model.path=$sft_model_path \\\n      actor_rollout_ref.actor.optim.lr=1e-6 \\\n      actor_rollout_ref.actor.ppo_mini_batch_size=32 \\\n      actor_rollout_ref.actor.ppo_micro_batch_size_per_gpu=$micro_batch_size \\\n      actor_rollout_ref.actor.use_kl_loss=False \\\n      actor_rollout_ref.model.enable_gradient_checkpointing=True \\\n      actor_rollout_ref.actor.fsdp_config.param_offload=False \\\n      actor_rollout_ref.actor.fsdp_config.optimizer_offload=False \\\n      actor_rollout_ref.rollout.log_prob_micro_batch_size_per_gpu=$micro_batch_size \\\n      actor_rollout_ref.rollout.tensor_model_parallel_size=1 \\\n      actor_rollout_ref.rollout.name=vllm \\\n      actor_rollout_ref.rollout.gpu_memory_utilization=0.6 \\\n      actor_rollout_ref.rollout.do_sample=true \\\n      actor_rollout_ref.rollout.temperature=0.8 \\\n      actor_rollout_ref.rollout.top_p=0.95 \\\n      actor_rollout_ref.rollout.top_k=25 \\\n      actor_rollout_ref.rollout.n=4 \\\n      actor_rollout_ref.rollout.val_kwargs.do_sample=true \\\n      actor_rollout_ref.rollout.val_kwargs.temperature=0.8 \\\n      actor_rollout_ref.rollout.val_kwargs.top_p=0.95 \\\n      actor_rollout_ref.rollout.val_kwargs.top_k=25 \\\n      reward_model.reward_manager=prime \\\n      custom_reward_function.path=reward_tts.py \\\n      custom_reward_function.name=compute_score \\\n      trainer.project_name='cosyvoice2_grpo' \\\n      trainer.experiment_name=$exp_name \\\n      trainer.logger=['console','wandb'] \\\n      trainer.n_gpus_per_node=$n_gpus_per_node \\\n      trainer.nnodes=1 \\\n      trainer.save_freq=100 \\\n      trainer.test_freq=100 \\\n      trainer.resume_mode='auto' \\\n      trainer.total_epochs=1 \\\n      trainer.val_before_train=False\nfi\n\nsteps=(100 200 300 400 500)\nfor step in ${steps[@]}; do\nllm_path=./checkpoints/cosyvoice2_grpo/$exp_name/global_step_${step}\nif [ $stage -le 3 ] && [ $stop_stage -ge 3 ]; then\n  log \"stage 3: merge the model\"\n  python -m verl.model_merger merge \\\n      --backend fsdp \\\n      --local_dir $llm_path/actor \\\n      --target_dir $llm_path/merged_hf_model || exit 1\nfi\n\nif [ $stage -le 4 ] && [ $stop_stage -ge 4 ]; then\n  log \"stage 4: Test the model\"\n  dataset=zero_shot_zh # from CosyVoice3 test set\n  # dataset=test_zh # from seed_tts test set\n  output_dir=./outputs_${exp_name}_${step}_${dataset}\n\n  token2wav_path=/workspace/CosyVoice2-0.5B\n  model_path=$llm_path/merged_hf_model\n\n  CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 \\\n  torchrun --nproc_per_node=8 \\\n      infer_dataset.py \\\n        --output-dir $output_dir \\\n        --llm-model-name-or-path $model_path \\\n        --token2wav-path $token2wav_path \\\n        --split-name ${dataset} || exit 1\n\n  bash scripts/compute_wer.sh $output_dir ${dataset}\nfi\ndone\n\nif [ $stage -le 5 ] && [ $stop_stage -ge 5 ]; then\n  log \"stage 5: Convert the RL trained model to CosyVoice repo format\"\n  python3 huggingface_to_pretrained.py \\\n    --hf-cosyvoice2-llm-path $llm_path/merged_hf_model \\\n    --output-path /workspace/CosyVoice2-0.5B/llm-new.pt\n  # You need to manually move the llm-new.pt to overwrite /workspace/CosyVoice2-0.5B/llm.pt\n  # However, we found that the RL trained model accuracy would slightly drop after this conversion.\n  # Please be careful or use the huggingface format inference code.\nfi"
  },
  {
    "path": "examples/grpo/cosyvoice2/scripts/compute_wer.sh",
    "content": "wav_dir=$1\nwav_files=$(ls $wav_dir/*.wav)\n# if wav_files is empty, then exit\nif [ -z \"$wav_files\" ]; then\n    exit 1\nfi\nsplit_name=$2\nmodel_path=models/sherpa-onnx-paraformer-zh-2023-09-14\n\nif [ ! -d $model_path ]; then\n    pip install sherpa-onnx\n    wget -nc https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-paraformer-zh-2023-09-14.tar.bz2\n    mkdir models\n    tar xvf sherpa-onnx-paraformer-zh-2023-09-14.tar.bz2 -C models\nfi\n\npython3 scripts/offline-decode-files.py  \\\n    --tokens=$model_path/tokens.txt \\\n    --paraformer=$model_path/model.int8.onnx \\\n    --num-threads=2 \\\n    --decoding-method=greedy_search \\\n    --debug=false \\\n    --sample-rate=24000 \\\n    --log-dir $wav_dir \\\n    --feature-dim=80 \\\n    --split-name $split_name \\\n    --name sherpa_onnx \\\n    $wav_files\n\n# python3 scripts/paraformer-pytriton-client.py  \\\n#     --log-dir $wav_dir \\\n#     --split-name $split_name \\\n#     $wav_files"
  },
  {
    "path": "examples/grpo/cosyvoice2/scripts/offline-decode-files.py",
    "content": "# Copyright (c)  2023 by manyeyes\n# Copyright (c)  2023  Xiaomi Corporation\n\n\"\"\"\nThis file demonstrates how to use sherpa-onnx Python API to transcribe\nfile(s) with a non-streaming model.\n\n(1) For paraformer\n\n    ./python-api-examples/offline-decode-files.py  \\\n      --tokens=/path/to/tokens.txt \\\n      --paraformer=/path/to/paraformer.onnx \\\n      --num-threads=2 \\\n      --decoding-method=greedy_search \\\n      --debug=false \\\n      --sample-rate=16000 \\\n      --feature-dim=80 \\\n      /path/to/0.wav \\\n      /path/to/1.wav\n\n(2) For transducer models from icefall\n\n    ./python-api-examples/offline-decode-files.py  \\\n      --tokens=/path/to/tokens.txt \\\n      --encoder=/path/to/encoder.onnx \\\n      --decoder=/path/to/decoder.onnx \\\n      --joiner=/path/to/joiner.onnx \\\n      --num-threads=2 \\\n      --decoding-method=greedy_search \\\n      --debug=false \\\n      --sample-rate=16000 \\\n      --feature-dim=80 \\\n      /path/to/0.wav \\\n      /path/to/1.wav\n\n(3) For CTC models from NeMo\n\npython3 ./python-api-examples/offline-decode-files.py \\\n  --tokens=./sherpa-onnx-nemo-ctc-en-citrinet-512/tokens.txt \\\n  --nemo-ctc=./sherpa-onnx-nemo-ctc-en-citrinet-512/model.onnx \\\n  --num-threads=2 \\\n  --decoding-method=greedy_search \\\n  --debug=false \\\n  ./sherpa-onnx-nemo-ctc-en-citrinet-512/test_wavs/0.wav \\\n  ./sherpa-onnx-nemo-ctc-en-citrinet-512/test_wavs/1.wav \\\n  ./sherpa-onnx-nemo-ctc-en-citrinet-512/test_wavs/8k.wav\n\n(4) For Whisper models\n\npython3 ./python-api-examples/offline-decode-files.py \\\n  --whisper-encoder=./sherpa-onnx-whisper-base.en/base.en-encoder.int8.onnx \\\n  --whisper-decoder=./sherpa-onnx-whisper-base.en/base.en-decoder.int8.onnx \\\n  --tokens=./sherpa-onnx-whisper-base.en/base.en-tokens.txt \\\n  --whisper-task=transcribe \\\n  --num-threads=1 \\\n  ./sherpa-onnx-whisper-base.en/test_wavs/0.wav \\\n  ./sherpa-onnx-whisper-base.en/test_wavs/1.wav \\\n  ./sherpa-onnx-whisper-base.en/test_wavs/8k.wav\n\n(5) For CTC models from WeNet\n\npython3 ./python-api-examples/offline-decode-files.py \\\n  --wenet-ctc=./sherpa-onnx-zh-wenet-wenetspeech/model.onnx \\\n  --tokens=./sherpa-onnx-zh-wenet-wenetspeech/tokens.txt \\\n  ./sherpa-onnx-zh-wenet-wenetspeech/test_wavs/0.wav \\\n  ./sherpa-onnx-zh-wenet-wenetspeech/test_wavs/1.wav \\\n  ./sherpa-onnx-zh-wenet-wenetspeech/test_wavs/8k.wav\n\n(6) For tdnn models of the yesno recipe from icefall\n\npython3 ./python-api-examples/offline-decode-files.py \\\n  --sample-rate=8000 \\\n  --feature-dim=23 \\\n  --tdnn-model=./sherpa-onnx-tdnn-yesno/model-epoch-14-avg-2.onnx \\\n  --tokens=./sherpa-onnx-tdnn-yesno/tokens.txt \\\n  ./sherpa-onnx-tdnn-yesno/test_wavs/0_0_0_1_0_0_0_1.wav \\\n  ./sherpa-onnx-tdnn-yesno/test_wavs/0_0_1_0_0_0_1_0.wav \\\n  ./sherpa-onnx-tdnn-yesno/test_wavs/0_0_1_0_0_1_1_1.wav\n\nPlease refer to\nhttps://k2-fsa.github.io/sherpa/onnx/index.html\nto install sherpa-onnx and to download non-streaming pre-trained models\nused in this file.\n\"\"\"\nimport argparse\nimport time\nimport wave\nfrom pathlib import Path\nfrom typing import List, Tuple, Dict, Iterable, TextIO, Union\n\nimport numpy as np\nimport sherpa_onnx\nimport soundfile as sf\nfrom datasets import load_dataset\nimport logging\nfrom collections import defaultdict\nimport kaldialign\nfrom zhon.hanzi import punctuation\nimport string\npunctuation_all = punctuation + string.punctuation\nPathlike = Union[str, Path]\n\n\ndef remove_punctuation(text: str) -> str:\n    for x in punctuation_all:\n        if x == '\\'':\n            continue\n        text = text.replace(x, '')\n    return text\n\n\ndef store_transcripts(\n    filename: Pathlike, texts: Iterable[Tuple[str, str, str]], char_level: bool = False\n) -> None:\n    \"\"\"Save predicted results and reference transcripts to a file.\n\n    Args:\n      filename:\n        File to save the results to.\n      texts:\n        An iterable of tuples. The first element is the cur_id, the second is\n        the reference transcript and the third element is the predicted result.\n        If it is a multi-talker ASR system, the ref and hyp may also be lists of\n        strings.\n    Returns:\n      Return None.\n    \"\"\"\n    with open(filename, \"w\", encoding=\"utf8\") as f:\n        for cut_id, ref, hyp in texts:\n            if char_level:\n                ref = list(\"\".join(ref))\n                hyp = list(\"\".join(hyp))\n            print(f\"{cut_id}:\\tref={ref}\", file=f)\n            print(f\"{cut_id}:\\thyp={hyp}\", file=f)\n\n\ndef write_error_stats(\n    f: TextIO,\n    test_set_name: str,\n    results: List[Tuple[str, str]],\n    enable_log: bool = True,\n    compute_CER: bool = False,\n    sclite_mode: bool = False,\n) -> float:\n    \"\"\"Write statistics based on predicted results and reference transcripts.\n\n    It will write the following to the given file:\n\n        - WER\n        - number of insertions, deletions, substitutions, corrects and total\n          reference words. For example::\n\n              Errors: 23 insertions, 57 deletions, 212 substitutions, over 2606\n              reference words (2337 correct)\n\n        - The difference between the reference transcript and predicted result.\n          An instance is given below::\n\n            THE ASSOCIATION OF (EDISON->ADDISON) ILLUMINATING COMPANIES\n\n          The above example shows that the reference word is `EDISON`,\n          but it is predicted to `ADDISON` (a substitution error).\n\n          Another example is::\n\n            FOR THE FIRST DAY (SIR->*) I THINK\n\n          The reference word `SIR` is missing in the predicted\n          results (a deletion error).\n      results:\n        An iterable of tuples. The first element is the cut_id, the second is\n        the reference transcript and the third element is the predicted result.\n      enable_log:\n        If True, also print detailed WER to the console.\n        Otherwise, it is written only to the given file.\n    Returns:\n      Return None.\n    \"\"\"\n    subs: Dict[Tuple[str, str], int] = defaultdict(int)\n    ins: Dict[str, int] = defaultdict(int)\n    dels: Dict[str, int] = defaultdict(int)\n\n    # `words` stores counts per word, as follows:\n    #   corr, ref_sub, hyp_sub, ins, dels\n    words: Dict[str, List[int]] = defaultdict(lambda: [0, 0, 0, 0, 0])\n    num_corr = 0\n    ERR = \"*\"\n\n    if compute_CER:\n        for i, res in enumerate(results):\n            cut_id, ref, hyp = res\n            ref = list(\"\".join(ref))\n            hyp = list(\"\".join(hyp))\n            results[i] = (cut_id, ref, hyp)\n\n    for _cut_id, ref, hyp in results:\n        ali = kaldialign.align(ref, hyp, ERR, sclite_mode=sclite_mode)\n        for ref_word, hyp_word in ali:\n            if ref_word == ERR:\n                ins[hyp_word] += 1\n                words[hyp_word][3] += 1\n            elif hyp_word == ERR:\n                dels[ref_word] += 1\n                words[ref_word][4] += 1\n            elif hyp_word != ref_word:\n                subs[(ref_word, hyp_word)] += 1\n                words[ref_word][1] += 1\n                words[hyp_word][2] += 1\n            else:\n                words[ref_word][0] += 1\n                num_corr += 1\n    ref_len = sum([len(r) for _, r, _ in results])\n    sub_errs = sum(subs.values())\n    ins_errs = sum(ins.values())\n    del_errs = sum(dels.values())\n    tot_errs = sub_errs + ins_errs + del_errs\n    tot_err_rate = \"%.2f\" % (100.0 * tot_errs / ref_len)\n\n    if enable_log:\n        logging.info(\n            f\"[{test_set_name}] %WER {tot_errs / ref_len:.2%} \"\n            f\"[{tot_errs} / {ref_len}, {ins_errs} ins, \"\n            f\"{del_errs} del, {sub_errs} sub ]\"\n        )\n\n    print(f\"%WER = {tot_err_rate}\", file=f)\n    print(\n        f\"Errors: {ins_errs} insertions, {del_errs} deletions, \"\n        f\"{sub_errs} substitutions, over {ref_len} reference \"\n        f\"words ({num_corr} correct)\",\n        file=f,\n    )\n    print(\n        \"Search below for sections starting with PER-UTT DETAILS:, \"\n        \"SUBSTITUTIONS:, DELETIONS:, INSERTIONS:, PER-WORD STATS:\",\n        file=f,\n    )\n\n    print(\"\", file=f)\n    print(\"PER-UTT DETAILS: corr or (ref->hyp)  \", file=f)\n    for cut_id, ref, hyp in results:\n        ali = kaldialign.align(ref, hyp, ERR)\n        combine_successive_errors = True\n        if combine_successive_errors:\n            ali = [[[x], [y]] for x, y in ali]\n            for i in range(len(ali) - 1):\n                if ali[i][0] != ali[i][1] and ali[i + 1][0] != ali[i + 1][1]:\n                    ali[i + 1][0] = ali[i][0] + ali[i + 1][0]\n                    ali[i + 1][1] = ali[i][1] + ali[i + 1][1]\n                    ali[i] = [[], []]\n            ali = [\n                [\n                    list(filter(lambda a: a != ERR, x)),\n                    list(filter(lambda a: a != ERR, y)),\n                ]\n                for x, y in ali\n            ]\n            ali = list(filter(lambda x: x != [[], []], ali))\n            ali = [\n                [\n                    ERR if x == [] else \" \".join(x),\n                    ERR if y == [] else \" \".join(y),\n                ]\n                for x, y in ali\n            ]\n\n        print(\n            f\"{cut_id}:\\t\"\n            + \" \".join(\n                (\n                    ref_word if ref_word == hyp_word else f\"({ref_word}->{hyp_word})\"\n                    for ref_word, hyp_word in ali\n                )\n            ),\n            file=f,\n        )\n\n    print(\"\", file=f)\n    print(\"SUBSTITUTIONS: count ref -> hyp\", file=f)\n\n    for count, (ref, hyp) in sorted([(v, k) for k, v in subs.items()], reverse=True):\n        print(f\"{count}   {ref} -> {hyp}\", file=f)\n\n    print(\"\", file=f)\n    print(\"DELETIONS: count ref\", file=f)\n    for count, ref in sorted([(v, k) for k, v in dels.items()], reverse=True):\n        print(f\"{count}   {ref}\", file=f)\n\n    print(\"\", file=f)\n    print(\"INSERTIONS: count hyp\", file=f)\n    for count, hyp in sorted([(v, k) for k, v in ins.items()], reverse=True):\n        print(f\"{count}   {hyp}\", file=f)\n\n    print(\"\", file=f)\n    print(\"PER-WORD STATS: word  corr tot_errs count_in_ref count_in_hyp\", file=f)\n    for _, word, counts in sorted(\n        [(sum(v[1:]), k, v) for k, v in words.items()], reverse=True\n    ):\n        (corr, ref_sub, hyp_sub, ins, dels) = counts\n        tot_errs = ref_sub + hyp_sub + ins + dels\n        ref_count = corr + ref_sub + dels\n        hyp_count = corr + hyp_sub + ins\n\n        print(f\"{word}   {corr} {tot_errs} {ref_count} {hyp_count}\", file=f)\n    return float(tot_err_rate)\n\n\ndef get_args():\n    parser = argparse.ArgumentParser(\n        formatter_class=argparse.ArgumentDefaultsHelpFormatter\n    )\n\n    parser.add_argument(\n        \"--tokens\",\n        type=str,\n        help=\"Path to tokens.txt\",\n    )\n\n    parser.add_argument(\n        \"--hotwords-file\",\n        type=str,\n        default=\"\",\n        help=\"\"\"\n        The file containing hotwords, one words/phrases per line, like\n        HELLO WORLD\n        你好世界\n        \"\"\",\n    )\n\n    parser.add_argument(\n        \"--hotwords-score\",\n        type=float,\n        default=1.5,\n        help=\"\"\"\n        The hotword score of each token for biasing word/phrase. Used only if\n        --hotwords-file is given.\n        \"\"\",\n    )\n\n    parser.add_argument(\n        \"--modeling-unit\",\n        type=str,\n        default=\"\",\n        help=\"\"\"\n        The modeling unit of the model, valid values are cjkchar, bpe, cjkchar+bpe.\n        Used only when hotwords-file is given.\n        \"\"\",\n    )\n\n    parser.add_argument(\n        \"--bpe-vocab\",\n        type=str,\n        default=\"\",\n        help=\"\"\"\n        The path to the bpe vocabulary, the bpe vocabulary is generated by\n        sentencepiece, you can also export the bpe vocabulary through a bpe model\n        by `scripts/export_bpe_vocab.py`. Used only when hotwords-file is given\n        and modeling-unit is bpe or cjkchar+bpe.\n        \"\"\",\n    )\n\n    parser.add_argument(\n        \"--encoder\",\n        default=\"\",\n        type=str,\n        help=\"Path to the encoder model\",\n    )\n\n    parser.add_argument(\n        \"--decoder\",\n        default=\"\",\n        type=str,\n        help=\"Path to the decoder model\",\n    )\n\n    parser.add_argument(\n        \"--joiner\",\n        default=\"\",\n        type=str,\n        help=\"Path to the joiner model\",\n    )\n\n    parser.add_argument(\n        \"--paraformer\",\n        default=\"\",\n        type=str,\n        help=\"Path to the model.onnx from Paraformer\",\n    )\n\n    parser.add_argument(\n        \"--nemo-ctc\",\n        default=\"\",\n        type=str,\n        help=\"Path to the model.onnx from NeMo CTC\",\n    )\n\n    parser.add_argument(\n        \"--wenet-ctc\",\n        default=\"\",\n        type=str,\n        help=\"Path to the model.onnx from WeNet CTC\",\n    )\n\n    parser.add_argument(\n        \"--tdnn-model\",\n        default=\"\",\n        type=str,\n        help=\"Path to the model.onnx for the tdnn model of the yesno recipe\",\n    )\n\n    parser.add_argument(\n        \"--num-threads\",\n        type=int,\n        default=1,\n        help=\"Number of threads for neural network computation\",\n    )\n\n    parser.add_argument(\n        \"--whisper-encoder\",\n        default=\"\",\n        type=str,\n        help=\"Path to whisper encoder model\",\n    )\n\n    parser.add_argument(\n        \"--whisper-decoder\",\n        default=\"\",\n        type=str,\n        help=\"Path to whisper decoder model\",\n    )\n\n    parser.add_argument(\n        \"--whisper-language\",\n        default=\"\",\n        type=str,\n        help=\"\"\"It specifies the spoken language in the input audio file.\n        Example values: en, fr, de, zh, jp.\n        Available languages for multilingual models can be found at\n        https://github.com/openai/whisper/blob/main/whisper/tokenizer.py#L10\n        If not specified, we infer the language from the input audio file.\n        \"\"\",\n    )\n\n    parser.add_argument(\n        \"--whisper-task\",\n        default=\"transcribe\",\n        choices=[\"transcribe\", \"translate\"],\n        type=str,\n        help=\"\"\"For multilingual models, if you specify translate, the output\n        will be in English.\n        \"\"\",\n    )\n\n    parser.add_argument(\n        \"--whisper-tail-paddings\",\n        default=-1,\n        type=int,\n        help=\"\"\"Number of tail padding frames.\n        We have removed the 30-second constraint from whisper, so you need to\n        choose the amount of tail padding frames by yourself.\n        Use -1 to use a default value for tail padding.\n        \"\"\",\n    )\n\n    parser.add_argument(\n        \"--blank-penalty\",\n        type=float,\n        default=0.0,\n        help=\"\"\"\n        The penalty applied on blank symbol during decoding.\n        Note: It is a positive value that would be applied to logits like\n        this `logits[:, 0] -= blank_penalty` (suppose logits.shape is\n        [batch_size, vocab] and blank id is 0).\n        \"\"\",\n    )\n\n    parser.add_argument(\n        \"--decoding-method\",\n        type=str,\n        default=\"greedy_search\",\n        help=\"Valid values are greedy_search and modified_beam_search\",\n    )\n    parser.add_argument(\n        \"--debug\",\n        type=bool,\n        default=False,\n        help=\"True to show debug messages\",\n    )\n\n    parser.add_argument(\n        \"--sample-rate\",\n        type=int,\n        default=16000,\n        help=\"\"\"Sample rate of the feature extractor. Must match the one\n        expected  by the model. Note: The input sound files can have a\n        different sample rate from this argument.\"\"\",\n    )\n\n    parser.add_argument(\n        \"--feature-dim\",\n        type=int,\n        default=80,\n        help=\"Feature dimension. Must match the one expected by the model\",\n    )\n\n    parser.add_argument(\n        \"sound_files\",\n        type=str,\n        nargs=\"+\",\n        help=\"The input sound file(s) to decode. Each file must be of WAVE\"\n        \"format with a single channel, and each sample has 16-bit, \"\n        \"i.e., int16_t. \"\n        \"The sample rate of the file can be arbitrary and does not need to \"\n        \"be 16 kHz\",\n    )\n\n    parser.add_argument(\n        \"--name\",\n        type=str,\n        default=\"\",\n        help=\"The directory containing the input sound files to decode\",\n    )\n\n    parser.add_argument(\n        \"--log-dir\",\n        type=str,\n        default=\"\",\n        help=\"The directory containing the input sound files to decode\",\n    )\n\n    parser.add_argument(\n        \"--label\",\n        type=str,\n        default=None,\n        help=\"wav_base_name label\",\n    )\n\n    # Dataset related arguments for loading labels when label file is not provided\n    parser.add_argument(\n        \"--dataset-name\",\n        type=str,\n        default=\"yuekai/seed_tts_cosy2\",\n        help=\"Huggingface dataset name for loading labels\",\n    )\n\n    parser.add_argument(\n        \"--split-name\",\n        type=str,\n        default=\"wenetspeech4tts\",\n        help=\"Dataset split name for loading labels\",\n    )\n\n    return parser.parse_args()\n\n\ndef assert_file_exists(filename: str):\n    assert Path(filename).is_file(), (\n        f\"{filename} does not exist!\\n\"\n        \"Please refer to \"\n        \"https://k2-fsa.github.io/sherpa/onnx/pretrained_models/index.html to download it\"\n    )\n\n\ndef read_wave(wave_filename: str) -> Tuple[np.ndarray, int]:\n    \"\"\"\n    Args:\n      wave_filename:\n        Path to a wave file. It should be single channel and can be of type\n        32-bit floating point PCM. Its sample rate does not need to be 24kHz.\n\n    Returns:\n      Return a tuple containing:\n       - A 1-D array of dtype np.float32 containing the samples,\n         which are normalized to the range [-1, 1].\n       - Sample rate of the wave file.\n    \"\"\"\n\n    samples, sample_rate = sf.read(wave_filename, dtype=\"float32\")\n    assert (\n        samples.ndim == 1\n    ), f\"Expected single channel, but got {samples.ndim} channels.\"\n\n    samples_float32 = samples.astype(np.float32)\n\n    return samples_float32, sample_rate\n\n\ndef normalize_text_alimeeting(text: str) -> str:\n    \"\"\"\n    Text normalization similar to M2MeT challenge baseline.\n    See: https://github.com/yufan-aslp/AliMeeting/blob/main/asr/local/text_normalize.pl\n    \"\"\"\n    import re\n    text = text.replace('\\u00A0', '')  # test_hard\n    text = text.replace(\" \", \"\")\n    text = text.replace(\"<sil>\", \"\")\n    text = text.replace(\"<%>\", \"\")\n    text = text.replace(\"<->\", \"\")\n    text = text.replace(\"<$>\", \"\")\n    text = text.replace(\"<#>\", \"\")\n    text = text.replace(\"<_>\", \"\")\n    text = text.replace(\"<space>\", \"\")\n    text = text.replace(\"`\", \"\")\n    text = text.replace(\"&\", \"\")\n    text = text.replace(\",\", \"\")\n    if re.search(\"[a-zA-Z]\", text):\n        text = text.upper()\n    text = text.replace(\"Ａ\", \"A\")\n    text = text.replace(\"ａ\", \"A\")\n    text = text.replace(\"ｂ\", \"B\")\n    text = text.replace(\"ｃ\", \"C\")\n    text = text.replace(\"ｋ\", \"K\")\n    text = text.replace(\"ｔ\", \"T\")\n    text = text.replace(\"，\", \"\")\n    text = text.replace(\"丶\", \"\")\n    text = text.replace(\"。\", \"\")\n    text = text.replace(\"、\", \"\")\n    text = text.replace(\"？\", \"\")\n    text = remove_punctuation(text)\n    return text\n\n\ndef main():\n    args = get_args()\n    assert_file_exists(args.tokens)\n    assert args.num_threads > 0, args.num_threads\n\n    assert len(args.nemo_ctc) == 0, args.nemo_ctc\n    assert len(args.wenet_ctc) == 0, args.wenet_ctc\n    assert len(args.whisper_encoder) == 0, args.whisper_encoder\n    assert len(args.whisper_decoder) == 0, args.whisper_decoder\n    assert len(args.tdnn_model) == 0, args.tdnn_model\n\n    assert_file_exists(args.paraformer)\n\n    recognizer = sherpa_onnx.OfflineRecognizer.from_paraformer(\n        paraformer=args.paraformer,\n        tokens=args.tokens,\n        num_threads=args.num_threads,\n        sample_rate=args.sample_rate,\n        feature_dim=args.feature_dim,\n        decoding_method=args.decoding_method,\n        debug=args.debug,\n    )\n\n    print(\"Started!\")\n    start_time = time.time()\n\n    streams, results = [], []\n    total_duration = 0\n\n    for i, wave_filename in enumerate(args.sound_files):\n        assert_file_exists(wave_filename)\n        samples, sample_rate = read_wave(wave_filename)\n        duration = len(samples) / sample_rate\n        total_duration += duration\n        s = recognizer.create_stream()\n        s.accept_waveform(sample_rate, samples)\n\n        streams.append(s)\n        if i % 10 == 0:\n            recognizer.decode_streams(streams)\n            results += [s.result.text for s in streams]\n            streams = []\n            print(f\"Processed {i} files\")\n        # process the last batch\n    if streams:\n        recognizer.decode_streams(streams)\n        results += [s.result.text for s in streams]\n    end_time = time.time()\n    print(\"Done!\")\n\n    results_dict = {}\n    for wave_filename, result in zip(args.sound_files, results):\n        print(f\"{wave_filename}\\n{result}\")\n        print(\"-\" * 10)\n        wave_basename = Path(wave_filename).stem\n        results_dict[wave_basename] = result\n\n    elapsed_seconds = end_time - start_time\n    rtf = elapsed_seconds / total_duration\n    print(f\"num_threads: {args.num_threads}\")\n    print(f\"decoding_method: {args.decoding_method}\")\n    print(f\"Wave duration: {total_duration:.3f} s\")\n    print(f\"Elapsed time: {elapsed_seconds:.3f} s\")\n    print(\n        f\"Real time factor (RTF): {elapsed_seconds:.3f}/{total_duration:.3f} = {rtf:.3f}\"\n    )\n\n    # Load labels either from file or from dataset\n    labels_dict = {}\n\n    if args.label:\n        # Load labels from file (original functionality)\n        print(f\"Loading labels from file: {args.label}\")\n        with open(args.label, \"r\") as f:\n            for line in f:\n                # fields = line.strip().split(\" \")\n                # fields = [item for item in fields if item]\n                # assert len(fields) == 4\n                # prompt_text, prompt_audio, text, audio_path = fields\n\n                fields = line.strip().split(\"|\")\n                fields = [item for item in fields if item]\n                assert len(fields) == 4\n                audio_path, prompt_text, prompt_audio, text = fields\n                labels_dict[Path(audio_path).stem] = normalize_text_alimeeting(text)\n    else:\n        # Load labels from dataset (new functionality)\n        print(f\"Loading labels from dataset: {args.dataset_name}, split: {args.split_name}\")\n        if 'zero' in args.split_name:\n            dataset_name = \"yuekai/CV3-Eval\"\n        else:\n            dataset_name = \"yuekai/seed_tts_cosy2\"\n        dataset = load_dataset(\n            dataset_name,\n            split=args.split_name,\n            trust_remote_code=True,\n        )\n\n        for item in dataset:\n            audio_id = item[\"id\"]\n            labels_dict[audio_id] = normalize_text_alimeeting(item[\"target_text\"])\n\n        print(f\"Loaded {len(labels_dict)} labels from dataset\")\n\n    # Perform evaluation if labels are available\n    if labels_dict:\n\n        final_results = []\n        for key, value in results_dict.items():\n            if key in labels_dict:\n                final_results.append((key, labels_dict[key], value))\n            else:\n                print(f\"Warning: No label found for {key}, skipping...\")\n\n        if final_results:\n            store_transcripts(\n                filename=f\"{args.log_dir}/recogs-{args.name}.txt\", texts=final_results\n            )\n            with open(f\"{args.log_dir}/errs-{args.name}.txt\", \"w\") as f:\n                write_error_stats(f, \"test-set\", final_results, enable_log=True)\n\n            with open(f\"{args.log_dir}/errs-{args.name}.txt\", \"r\") as f:\n                print(f.readline())  # WER\n                print(f.readline())  # Detailed errors\n        else:\n            print(\"No matching labels found for evaluation\")\n    else:\n        print(\"No labels available for evaluation\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "examples/grpo/cosyvoice2/token2wav_asr_server.py",
    "content": "# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION.  All rights reserved.\n# SPDX-License-Identifier: Apache-2.0\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\"\"\"Pytriton server for token2wav conversion and ASR\"\"\"\n\nfrom datasets import load_dataset\nfrom cosyvoice.cli.cosyvoice import CosyVoice2\nfrom omnisense.models import OmniSenseVoiceSmall\nfrom pytriton.proxy.types import Request\nfrom pytriton.triton import Triton, TritonConfig\nfrom pytriton.model_config import DynamicBatcher, ModelConfig, Tensor\nfrom pytriton.decorators import batch\nimport argparse\nimport io\nimport logging\nfrom typing import Any, List\nimport numpy as np\nimport torch\nfrom scipy.signal import resample\nimport sys\nimport random\nimport re\nfrom jiwer import wer\nfrom pypinyin import lazy_pinyin, Style\nfrom tn.chinese.normalizer import Normalizer as ZhNormalizer\n\n# Chinese text normalizer (cached globally)\nzh_tn_model = ZhNormalizer(\n    cache_dir=\"./cache\",\n    remove_erhua=False,\n    remove_interjections=False,\n    remove_puncts=True,\n    overwrite_cache=True,\n)\n\n\nsys.path.append(\"/workspace/CosyVoice/third_party/Matcha-TTS\")\n\nlogger = logging.getLogger(\"token2wav_asr_server\")\n\n\nclass _ASR_Server:\n    \"\"\"Wraps a single OmniSenseVoiceSmall model instance for Triton.\"\"\"\n\n    def __init__(self, device_id: int):\n        self._model = OmniSenseVoiceSmall(\"iic/SenseVoiceSmall\", quantize=False, device_id=device_id)\n\n    @batch\n    def __call__(self, WAV: np.ndarray, WAV_LENS: np.ndarray, LANGUAGE: np.ndarray, TEXT_NORM: np.ndarray):\n        \"\"\"\n        WAV: np.ndarray, WAV_LENS: np.ndarray\n        LANGUAGE: np.ndarray, TEXTNORM: np.ndarray for backward compatibility, not used\n        See: https://github.com/modelscope/FunASR/tree/main/runtime/triton_gpu\n        \"\"\"\n        logger.debug(\"WAV: %s, WAV_LENS: %s, shapes: %s %s\", type(WAV), type(WAV_LENS), WAV.shape, WAV_LENS.shape)\n        wavs = [WAV[i, :WAV_LENS[i, 0]] for i in range(len(WAV))]\n\n        results = self._model.transcribe_single_batch(\n            wavs,\n            language=\"zh\",\n            textnorm=\"woitn\",\n        )\n        texts = [result.text for result in results]\n        transcripts = np.char.encode(np.array(texts).reshape(-1, 1), \"utf-8\")\n        return {\"TRANSCRIPTS\": transcripts}\n\n\ndef audio_decode_cosyvoice2(\n    audio_tokens, prompt_text, prompt_speech_16k, codec_decoder\n):\n    \"\"\"\n    Generate audio from tokens with optional tone and prompt embedding.\n    \"\"\"\n    model_inputs_dict = codec_decoder.frontend.frontend_zero_shot(\n        \"empty\", prompt_text, prompt_speech_16k, 24000\n    )\n    tts_mel, _ = codec_decoder.model.flow.inference(\n        token=audio_tokens.to(codec_decoder.model.device),\n        token_len=torch.tensor([audio_tokens.shape[1]], dtype=torch.int32).to(\n            codec_decoder.model.device\n        ),\n        prompt_token=model_inputs_dict[\"flow_prompt_speech_token\"].to(\n            codec_decoder.model.device\n        ),\n        prompt_token_len=torch.tensor(\n            [model_inputs_dict[\"flow_prompt_speech_token_len\"]], dtype=torch.int32\n        ).to(codec_decoder.model.device),\n        prompt_feat=model_inputs_dict[\"prompt_speech_feat\"].to(\n            codec_decoder.model.device\n        ),\n        prompt_feat_len=model_inputs_dict[\"prompt_speech_feat_len\"].to(\n            codec_decoder.model.device\n        ),\n        embedding=model_inputs_dict[\"flow_embedding\"].to(codec_decoder.model.device),\n        finalize=True,\n    )\n\n    audio_hat, _ = codec_decoder.model.hift.inference(\n        speech_feat=tts_mel, cache_source=torch.zeros(1, 1, 0)\n    )\n\n    return audio_hat\n\n\ndef get_random_prompt_from_dataset(dataset):\n    \"\"\"\n    Get random prompt text and speech from the pre-loaded dataset.\n    Returns (prompt_text, prompt_speech_16k)\n    \"\"\"\n    random_idx = random.randint(0, len(dataset) - 1)\n    sample = dataset[random_idx]\n\n    # Extract audio data\n    audio_data = sample[\"audio\"]\n    audio_array = audio_data[\"array\"]\n    sample_rate = audio_data[\"sampling_rate\"]\n\n    # Convert audio to 16kHz if needed\n    if sample_rate != 16000:\n        num_samples = int(len(audio_array) * (16000 / sample_rate))\n        audio_array = resample(audio_array, num_samples)\n\n    # Convert to torch tensor\n    prompt_speech_16k = torch.from_numpy(audio_array).float().unsqueeze(0)\n    prompt_text = sample[\"text\"]\n    # remove space in prompt_text\n    prompt_text = prompt_text.replace(\" \", \"\")\n    return prompt_text, prompt_speech_16k\n\n\nclass _Token2Wav_ASR:\n    \"\"\"Wraps a single OmniSenseVoiceSmall model instance for Triton.\"\"\"\n\n    def __init__(self, device_id: int):\n        self.asr_model = OmniSenseVoiceSmall(\"iic/SenseVoiceSmall\", quantize=False, device_id=device_id)\n        self.dataset = load_dataset(\"yuekai/aishell\", \"test\", trust_remote_code=True)[\"test\"]\n\n        # Make sure the CosyVoice2 decoder lives on the same GPU as the ASR model\n        # CosyVoice2 internally uses generic \"cuda\" device, so we first switch the\n        # current CUDA context to the desired card before the object is created.\n        # Afterwards, all parameters loaded with the generic \"cuda\" device will\n        # reside on this GPU.  We keep the selected id in `self.device_id` and\n        # will set the context again for every forward call to avoid race\n        # conditions when several instances are used in the same process.\n\n        self.device_id = device_id\n\n        # Construct the TTS codec decoder under the correct CUDA device context\n        with torch.cuda.device(self.device_id):\n            self.codec_decoder = CosyVoice2(\n                \"/workspace/CosyVoice2-0.5B\", load_jit=True, load_trt=True, fp16=True\n            )\n\n    @batch\n    def __call__(self, TOKENS: np.ndarray, TOKEN_LENS: np.ndarray, GT_TEXT: np.ndarray):\n        \"\"\"\n        WAV: np.ndarray, WAV_LENS: np.ndarray\n        LANGUAGE: np.ndarray, TEXTNORM: np.ndarray for backward compatibility, not used\n        See: https://github.com/modelscope/FunASR/tree/main/runtime/triton_gpu\n        \"\"\"\n        # Ensure the default CUDA device is set correctly for this invocation\n        torch.cuda.set_device(self.device_id)\n\n        if self.device_id == 0:\n            print(f\"device_id: {self.device_id}, TOKENS: {TOKENS.shape}, TOKEN_LENS: {TOKEN_LENS.shape}\")\n\n        tokens_list = [TOKENS[i, :TOKEN_LENS[i, 0]] for i in range(len(TOKENS))]\n\n        # Decode ground-truth text strings (BYTES → str)\n        if GT_TEXT.ndim == 2:\n            gt_texts = [GT_TEXT[i, 0].decode(\"utf-8\") for i in range(len(GT_TEXT))]\n        else:\n            gt_texts = [GT_TEXT[i].decode(\"utf-8\") for i in range(len(GT_TEXT))]\n\n        wavs = []\n        for tokens in tokens_list:\n            prompt_text, prompt_speech_16k = get_random_prompt_from_dataset(self.dataset)\n            audio_tokens = torch.tensor(tokens, dtype=torch.long, device=self.asr_model.device).unsqueeze(0)\n            audio_hat = audio_decode_cosyvoice2(\n                audio_tokens,\n                prompt_text,\n                prompt_speech_16k,\n                self.codec_decoder,\n            )\n            # resample to 16000 using soundfile\n            audio_hat = audio_hat.squeeze(0).float().cpu()\n            audio_hat = audio_hat.numpy()\n            num_samples = int(len(audio_hat) * (16000 / 24000))\n            audio_hat = resample(audio_hat, num_samples)\n            wavs.append(audio_hat)\n\n        results = self.asr_model.transcribe_single_batch(\n            wavs,\n            language=\"zh\",\n            textnorm=\"woitn\",\n        )\n        texts = [result.text for result in results]\n\n        # ---------------- Reward computation ----------------\n        rewards = []\n        for gt_text, hyp_text in zip(gt_texts, texts):\n            gt_norm = zh_tn_model.normalize(gt_text).lower()\n            hyp_norm = zh_tn_model.normalize(hyp_text).lower()\n\n            gt_pinyin = lazy_pinyin(\n                gt_norm,\n                style=Style.TONE3,\n                tone_sandhi=True,\n                neutral_tone_with_five=True,\n            )\n            hyp_pinyin = lazy_pinyin(\n                hyp_norm,\n                style=Style.TONE3,\n                tone_sandhi=True,\n                neutral_tone_with_five=True,\n            )\n\n            c = float(wer(\" \".join(gt_pinyin), \" \".join(hyp_pinyin)))\n            reward_val = 1.0 - np.tanh(3.0 * c)\n            reward_val = max(0.0, min(1.0, reward_val))\n            rewards.append(reward_val)\n            print(f\"gt_text: {gt_text}, hyp_text: {hyp_text}, reward_val: {reward_val}\")\n\n        transcripts = np.char.encode(np.array(texts).reshape(-1, 1), \"utf-8\")\n        rewards_arr = np.array(rewards, dtype=np.float32).reshape(-1, 1)\n\n        return {\"REWARDS\": rewards_arr, \"TRANSCRIPTS\": transcripts}\n\n\ndef _infer_function_factory(device_ids: List[int], model_name: str):\n    \"\"\"Creates a list of inference functions, one for each requested device ID.\"\"\"\n    infer_funcs = []\n    for device_id in device_ids:\n        if model_name == \"sensevoice\":\n            infer_funcs.append(_ASR_Server(device_id=device_id))\n        else:\n            infer_funcs.append(_Token2Wav_ASR(device_id=device_id))\n    return infer_funcs\n\n\ndef main():\n    parser = argparse.ArgumentParser(description=__doc__)\n    parser.add_argument(\n        \"--max-batch-size\",\n        type=int,\n        default=32,\n        help=\"Batch size of request.\",\n        required=False,\n    )\n    parser.add_argument(\n        \"--verbose\",\n        action=\"store_true\",\n        default=False,\n    )\n    parser.add_argument(\n        \"--number-of-instances-per-device\",\n        type=int,\n        default=1,\n        help=\"Number of model instances to load.\",\n        required=False,\n    )\n    parser.add_argument(\n        \"--number-of-devices\",\n        type=int,\n        default=8,\n        help=\"Number of devices to use.\",\n    )\n    parser.add_argument(\n        \"--model-name\",\n        type=str,\n        default=\"token2wav_asr\",\n        choices=[\"token2wav_asr\", \"sensevoice\"],\n        help=\"Model name.\",\n    )\n\n    args = parser.parse_args()\n\n    log_level = logging.DEBUG if args.verbose else logging.INFO\n    logging.basicConfig(level=log_level, format=\"%(asctime)s - %(levelname)s - %(name)s: %(message)s\")\n\n    triton_config = TritonConfig(\n        http_port=8000,\n        grpc_port=8001,\n        metrics_port=8002,\n    )\n\n    device_ids = list(range(args.number_of_devices))\n    device_ids = device_ids * args.number_of_instances_per_device\n\n    with Triton(config=triton_config) as triton:\n        logger.info(\"Loading SenseVoice model on device ids: %s\", device_ids)\n        if args.model_name == \"sensevoice\":\n            triton.bind(\n                model_name=\"sensevoice\",\n                infer_func=_infer_function_factory(device_ids, args.model_name),\n                inputs=[\n                    Tensor(name=\"WAV\", dtype=np.float32, shape=(-1,)),\n                    Tensor(name=\"WAV_LENS\", dtype=np.int32, shape=(-1,)),\n                    Tensor(name=\"LANGUAGE\", dtype=np.int32, shape=(-1,)),\n                    Tensor(name=\"TEXT_NORM\", dtype=np.int32, shape=(-1,)),\n                ],\n                outputs=[\n                    Tensor(name=\"TRANSCRIPTS\", dtype=bytes, shape=(-1,)),\n                ],\n                config=ModelConfig(\n                    max_batch_size=args.max_batch_size,\n                    batcher=DynamicBatcher(max_queue_delay_microseconds=10000),  # 10ms\n                ),\n                strict=True,\n            )\n        else:\n            triton.bind(\n                model_name=\"token2wav_asr\",\n                infer_func=_infer_function_factory(device_ids, args.model_name),\n                inputs=[\n                    Tensor(name=\"TOKENS\", dtype=np.int32, shape=(-1,)),\n                    Tensor(name=\"TOKEN_LENS\", dtype=np.int32, shape=(-1,)),\n                    Tensor(name=\"GT_TEXT\", dtype=bytes, shape=(-1,)),\n                ],\n                outputs=[\n                    Tensor(name=\"REWARDS\", dtype=np.float32, shape=(-1,)),\n                    Tensor(name=\"TRANSCRIPTS\", dtype=bytes, shape=(-1,)),\n                ],\n                config=ModelConfig(\n                    max_batch_size=args.max_batch_size,\n                    batcher=DynamicBatcher(max_queue_delay_microseconds=10000),  # 10ms\n                ),\n                strict=True,\n            )\n        logger.info(\"Serving inference\")\n        triton.serve()\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "examples/libritts/cosyvoice/conf/cosyvoice.yaml",
    "content": "# set random seed, so that you may reproduce your result.\n__set_seed1: !apply:random.seed [1986]\n__set_seed2: !apply:numpy.random.seed [1986]\n__set_seed3: !apply:torch.manual_seed [1986]\n__set_seed4: !apply:torch.cuda.manual_seed_all [1986]\n\n# fixed params\nsample_rate: 22050\ntext_encoder_input_size: 512\nllm_input_size: 1024\nllm_output_size: 1024\nspk_embed_dim: 192\n\n# model params\n# for all class/function included in this repo, we use !<name> or !<new> for intialization, so that user may find all corresponding class/function according to one single yaml.\n# for system/third_party class/function, we do not require this.\nllm: !new:cosyvoice.llm.llm.TransformerLM\n    text_encoder_input_size: !ref <text_encoder_input_size>\n    llm_input_size: !ref <llm_input_size>\n    llm_output_size: !ref <llm_output_size>\n    text_token_size: 51866 # change to 60515 if you want to train with CosyVoice-300M-25Hz recipe\n    speech_token_size: 4096\n    length_normalized_loss: True\n    lsm_weight: 0\n    spk_embed_dim: !ref <spk_embed_dim>\n    text_encoder: !new:cosyvoice.transformer.encoder.ConformerEncoder\n        input_size: !ref <text_encoder_input_size>\n        output_size: 1024\n        attention_heads: 16\n        linear_units: 4096\n        num_blocks: 6\n        dropout_rate: 0.1\n        positional_dropout_rate: 0.1\n        attention_dropout_rate: 0.0\n        normalize_before: True\n        input_layer: 'linear'\n        pos_enc_layer_type: 'rel_pos_espnet'\n        selfattention_layer_type: 'rel_selfattn'\n        use_cnn_module: False\n        macaron_style: False\n        use_dynamic_chunk: False\n        use_dynamic_left_chunk: False\n        static_chunk_size: 1\n    llm: !new:cosyvoice.transformer.encoder.TransformerEncoder\n        input_size: !ref <llm_input_size>\n        output_size: !ref <llm_output_size>\n        attention_heads: 16\n        linear_units: 4096\n        num_blocks: 14\n        dropout_rate: 0.1\n        positional_dropout_rate: 0.1\n        attention_dropout_rate: 0.0\n        input_layer: 'linear_legacy'\n        pos_enc_layer_type: 'rel_pos_espnet'\n        selfattention_layer_type: 'rel_selfattn'\n        static_chunk_size: 1\n    sampling: !name:cosyvoice.utils.common.ras_sampling\n        top_p: 0.8\n        top_k: 25\n        win_size: 10\n        tau_r: 0.1\n\nflow: !new:cosyvoice.flow.flow.MaskedDiffWithXvec\n    input_size: 512\n    output_size: 80\n    spk_embed_dim: !ref <spk_embed_dim>\n    output_type: 'mel'\n    vocab_size: 4096\n    input_frame_rate: 50 # change to 25 if you want to train with CosyVoice-300M-25Hz recipe\n    only_mask_loss: True\n    encoder: !new:cosyvoice.transformer.encoder.ConformerEncoder\n        output_size: 512\n        attention_heads: 8\n        linear_units: 2048\n        num_blocks: 6\n        dropout_rate: 0.1\n        positional_dropout_rate: 0.1\n        attention_dropout_rate: 0.1\n        normalize_before: True\n        input_layer: 'linear'\n        pos_enc_layer_type: 'rel_pos_espnet'\n        selfattention_layer_type: 'rel_selfattn'\n        input_size: 512\n        use_cnn_module: False\n        macaron_style: False\n    length_regulator: !new:cosyvoice.flow.length_regulator.InterpolateRegulator\n        channels: 80\n        sampling_ratios: [1, 1, 1, 1]\n    decoder: !new:cosyvoice.flow.flow_matching.ConditionalCFM\n        in_channels: 240\n        n_spks: 1\n        spk_emb_dim: 80\n        cfm_params: !new:omegaconf.DictConfig\n            content:\n                sigma_min: 1e-06\n                solver: 'euler'\n                t_scheduler: 'cosine'\n                training_cfg_rate: 0.2\n                inference_cfg_rate: 0.7\n                reg_loss_type: 'l1'\n        estimator: !new:cosyvoice.flow.decoder.ConditionalDecoder\n            in_channels: 320\n            out_channels: 80\n            channels: [256, 256]\n            dropout: 0.0\n            attention_head_dim: 64\n            n_blocks: 4\n            num_mid_blocks: 12\n            num_heads: 8\n            act_fn: 'gelu'\n\nhift: !new:cosyvoice.hifigan.generator.HiFTGenerator\n    in_channels: 80\n    base_channels: 512\n    nb_harmonics: 8\n    sampling_rate: !ref <sample_rate>\n    nsf_alpha: 0.1\n    nsf_sigma: 0.003\n    nsf_voiced_threshold: 10\n    upsample_rates: [8, 8]\n    upsample_kernel_sizes: [16, 16]\n    istft_params:\n        n_fft: 16\n        hop_len: 4\n    resblock_kernel_sizes: [3, 7, 11]\n    resblock_dilation_sizes: [[1, 3, 5], [1, 3, 5], [1, 3, 5]]\n    source_resblock_kernel_sizes: [7, 11]\n    source_resblock_dilation_sizes: [[1, 3, 5], [1, 3, 5]]\n    lrelu_slope: 0.1\n    audio_limit: 0.99\n    f0_predictor: !new:cosyvoice.hifigan.f0_predictor.ConvRNNF0Predictor\n        num_class: 1\n        in_channels: 80\n        cond_channels: 512\n\n# gan related module\nmel_spec_transform1: !name:matcha.utils.audio.mel_spectrogram\n    n_fft: 1024\n    num_mels: 80\n    sampling_rate: !ref <sample_rate>\n    hop_size: 256\n    win_size: 1024\n    fmin: 0\n    fmax: null\n    center: False\nhifigan: !new:cosyvoice.hifigan.hifigan.HiFiGan\n    generator: !ref <hift>\n    discriminator: !new:cosyvoice.hifigan.discriminator.MultipleDiscriminator\n        mpd: !new:matcha.hifigan.models.MultiPeriodDiscriminator\n        mrd: !new:cosyvoice.hifigan.discriminator.MultiResSpecDiscriminator\n    mel_spec_transform: [\n        !ref <mel_spec_transform1>\n    ]\n\n# processor functions\nparquet_opener: !name:cosyvoice.dataset.processor.parquet_opener\nget_tokenizer: !name:whisper.tokenizer.get_tokenizer # change to !name:cosyvoice.tokenizer.tokenizer.get_tokenizer if you want to train with CosyVoice-300M-25Hz recipe\n    multilingual: True\n    num_languages: 100\n    language: 'en'\n    task: 'transcribe'\nallowed_special: 'all'\ntokenize: !name:cosyvoice.dataset.processor.tokenize\n    get_tokenizer: !ref <get_tokenizer>\n    allowed_special: !ref <allowed_special>\nfilter: !name:cosyvoice.dataset.processor.filter\n    max_length: 40960\n    min_length: 0\n    token_max_length: 200\n    token_min_length: 1\nresample: !name:cosyvoice.dataset.processor.resample\n    resample_rate: !ref <sample_rate>\ntruncate: !name:cosyvoice.dataset.processor.truncate\n    truncate_length: 24576 # must be a multiplier of hop_size\nfeat_extractor: !name:matcha.utils.audio.mel_spectrogram\n    n_fft: 1024\n    num_mels: 80\n    sampling_rate: !ref <sample_rate>\n    hop_size: 256\n    win_size: 1024\n    fmin: 0\n    fmax: 8000\n    center: False\ncompute_fbank: !name:cosyvoice.dataset.processor.compute_fbank\n    feat_extractor: !ref <feat_extractor>\ncompute_f0: !name:cosyvoice.dataset.processor.compute_f0\n    sample_rate: !ref <sample_rate>\n    hop_size: 256\nparse_embedding: !name:cosyvoice.dataset.processor.parse_embedding\n    normalize: True\nshuffle: !name:cosyvoice.dataset.processor.shuffle\n    shuffle_size: 1000\nsort: !name:cosyvoice.dataset.processor.sort\n    sort_size: 500  # sort_size should be less than shuffle_size\nbatch: !name:cosyvoice.dataset.processor.batch\n    batch_type: 'dynamic'\n    max_frames_in_batch: 2000 # change to 1400 in gan train on v100 16g\npadding: !name:cosyvoice.dataset.processor.padding\n    use_spk_embedding: False # change to True during sft\n\n# dataset processor pipeline\ndata_pipeline: [\n    !ref <parquet_opener>,\n    !ref <tokenize>,\n    !ref <filter>,\n    !ref <resample>,\n    !ref <compute_fbank>,\n    !ref <parse_embedding>,\n    !ref <shuffle>,\n    !ref <sort>,\n    !ref <batch>,\n    !ref <padding>,\n]\ndata_pipeline_gan: [\n    !ref <parquet_opener>,\n    !ref <tokenize>,\n    !ref <filter>,\n    !ref <resample>,\n    !ref <truncate>,\n    !ref <compute_fbank>,\n    !ref <compute_f0>,\n    !ref <parse_embedding>,\n    !ref <shuffle>,\n    !ref <sort>,\n    !ref <batch>,\n    !ref <padding>,\n]\n\n# llm flow train conf\ntrain_conf:\n    optim: adam\n    optim_conf:\n        lr: 0.001 # change to 1e-5 during sft\n    scheduler: warmuplr # change to constantlr during sft\n    scheduler_conf:\n        warmup_steps: 2500\n    max_epoch: 200\n    grad_clip: 5\n    accum_grad: 2\n    log_interval: 100\n    save_per_step: -1\n\n# gan train conf\ntrain_conf_gan:\n    optim: adam\n    optim_conf:\n        lr: 0.0002 # use small lr for gan training\n    scheduler: constantlr\n    optim_d: adam\n    optim_conf_d:\n        lr: 0.0002 # use small lr for gan training\n    scheduler_d: constantlr\n    max_epoch: 200\n    grad_clip: 5\n    accum_grad: 1 # in gan training, accum_grad must be 1\n    log_interval: 100\n    save_per_step: -1"
  },
  {
    "path": "examples/libritts/cosyvoice/conf/ds_stage2.json",
    "content": "{\n  \"train_micro_batch_size_per_gpu\": 1,\n  \"gradient_accumulation_steps\": 1,\n  \"steps_per_print\": 100,\n  \"gradient_clipping\": 5,\n  \"fp16\": {\n    \"enabled\": false,\n    \"auto_cast\": false,\n    \"loss_scale\": 0,\n    \"initial_scale_power\": 16,\n    \"loss_scale_window\": 256,\n    \"hysteresis\": 2,\n    \"consecutive_hysteresis\": false,\n    \"min_loss_scale\": 1\n  },\n  \"bf16\": {\n    \"enabled\": false\n  },\n  \"zero_force_ds_cpu_optimizer\": false,\n  \"zero_optimization\": {\n    \"stage\": 2,\n    \"offload_optimizer\": {\n      \"device\": \"none\",\n      \"pin_memory\": true\n    },\n    \"allgather_partitions\": true,\n    \"allgather_bucket_size\": 5e8,\n    \"overlap_comm\": false,\n    \"reduce_scatter\": true,\n    \"reduce_bucket_size\": 5e8,\n    \"contiguous_gradients\" : true\n  },\n  \"optimizer\": {\n    \"type\": \"AdamW\",\n    \"params\": {\n        \"lr\": 0.001,\n        \"weight_decay\": 0.0001,\n        \"torch_adam\": true,\n        \"adam_w_mode\": true\n    }\n  }\n}"
  },
  {
    "path": "examples/libritts/cosyvoice/local/download_and_untar.sh",
    "content": "#!/bin/bash\n\n# Copyright   2014  Johns Hopkins University (author: Daniel Povey)\n# Apache 2.0\n\nremove_archive=false\n\nif [ \"$1\" == --remove-archive ]; then\n  remove_archive=true\n  shift\nfi\n\nif [ $# -ne 3 ]; then\n  echo \"Usage: $0 [--remove-archive] <data-base> <url-base> <corpus-part>\"\n  echo \"e.g.: $0 /export/a15/vpanayotov/data www.openslr.org/resources/11 dev-clean\"\n  echo \"With --remove-archive it will remove the archive after successfully un-tarring it.\"\n  echo \"<corpus-part> can be one of: dev-clean, test-clean, dev-other, test-other,\"\n  echo \"          train-clean-100, train-clean-360, train-other-500.\"\n  exit 1\nfi\n\ndata=$1\nurl=$2\npart=$3\n\nif [ ! -d \"$data\" ]; then\n  echo \"$0: no such directory $data\"\n  exit 1\nfi\n\npart_ok=false\nlist=\"dev-clean test-clean dev-other test-other train-clean-100 train-clean-360 train-other-500\"\nfor x in $list; do\n  if [ \"$part\" == $x ]; then part_ok=true; fi\ndone\nif ! $part_ok; then\n  echo \"$0: expected <corpus-part> to be one of $list, but got '$part'\"\n  exit 1\nfi\n\nif [ -z \"$url\" ]; then\n  echo \"$0: empty URL base.\"\n  exit 1\nfi\n\nif [ -f $data/LibriTTS/$part/.complete ]; then\n  echo \"$0: data part $part was already successfully extracted, nothing to do.\"\n  exit 0\nfi\n\n\n# sizes of the archive files in bytes.  This is some older versions.\nsizes_old=\"371012589 347390293 379743611 361838298 6420417880 23082659865 30626749128\"\n# sizes_new is the archive file sizes of the final release.  Some of these sizes are of\n# things we probably won't download.\nsizes_new=\"337926286 314305928 695964615 297279345 87960560420 33373768 346663984 328757843 6387309499 23049477885 30593501606\"\n\nif [ -f $data/$part.tar.gz ]; then\n  size=$(/bin/ls -l $data/$part.tar.gz | awk '{print $5}')\n  size_ok=false\n  for s in $sizes_old $sizes_new; do if [ $s == $size ]; then size_ok=true; fi; done\n  if ! $size_ok; then\n    echo \"$0: removing existing file $data/$part.tar.gz because its size in bytes $size\"\n    echo \"does not equal the size of one of the archives.\"\n    rm $data/$part.tar.gz\n  else\n    echo \"$data/$part.tar.gz exists and appears to be complete.\"\n  fi\nfi\n\nif [ ! -f $data/$part.tar.gz ]; then\n  if ! which wget >/dev/null; then\n    echo \"$0: wget is not installed.\"\n    exit 1\n  fi\n  full_url=$url/$part.tar.gz\n  echo \"$0: downloading data from $full_url.  This may take some time, please be patient.\"\n\n  if ! wget -P $data --no-check-certificate $full_url; then\n    echo \"$0: error executing wget $full_url\"\n    exit 1\n  fi\nfi\n\nif ! tar -C $data -xvzf $data/$part.tar.gz; then\n  echo \"$0: error un-tarring archive $data/$part.tar.gz\"\n  exit 1\nfi\n\ntouch $data/LibriTTS/$part/.complete\n\necho \"$0: Successfully downloaded and un-tarred $data/$part.tar.gz\"\n\nif $remove_archive; then\n  echo \"$0: removing $data/$part.tar.gz file since --remove-archive option was supplied.\"\n  rm $data/$part.tar.gz\nfi\n"
  },
  {
    "path": "examples/libritts/cosyvoice/local/prepare_data.py",
    "content": "import argparse\nimport logging\nimport glob\nimport os\nfrom tqdm import tqdm\n\n\nlogger = logging.getLogger()\n\n\ndef main():\n    wavs = list(glob.glob('{}/*/*/*wav'.format(args.src_dir)))\n\n    utt2wav, utt2text, utt2spk, spk2utt = {}, {}, {}, {}\n    for wav in tqdm(wavs):\n        txt = wav.replace('.wav', '.normalized.txt')\n        if not os.path.exists(txt):\n            logger.warning('{} do not exsist'.format(txt))\n            continue\n        with open(txt) as f:\n            content = ''.join(l.replace('\\n', '') for l in f.readline())\n        utt = os.path.basename(wav).replace('.wav', '')\n        spk = utt.split('_')[0]\n        utt2wav[utt] = wav\n        utt2text[utt] = content\n        utt2spk[utt] = spk\n        if spk not in spk2utt:\n            spk2utt[spk] = []\n        spk2utt[spk].append(utt)\n\n    with open('{}/wav.scp'.format(args.des_dir), 'w') as f:\n        for k, v in utt2wav.items():\n            f.write('{} {}\\n'.format(k, v))\n    with open('{}/text'.format(args.des_dir), 'w') as f:\n        for k, v in utt2text.items():\n            f.write('{} {}\\n'.format(k, v))\n    with open('{}/utt2spk'.format(args.des_dir), 'w') as f:\n        for k, v in utt2spk.items():\n            f.write('{} {}\\n'.format(k, v))\n    with open('{}/spk2utt'.format(args.des_dir), 'w') as f:\n        for k, v in spk2utt.items():\n            f.write('{} {}\\n'.format(k, ' '.join(v)))\n    if args.instruct != '':\n        with open('{}/instruct'.format(args.des_dir), 'w') as f:\n            for k, v in utt2text.items():\n                f.write('{} {}\\n'.format(k, args.instruct))\n    return\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser()\n    parser.add_argument('--src_dir',\n                        type=str)\n    parser.add_argument('--des_dir',\n                        type=str)\n    parser.add_argument('--instruct',\n                        type=str,\n                        default='')\n    args = parser.parse_args()\n    main()\n"
  },
  {
    "path": "examples/libritts/cosyvoice/local/prepare_reject_sample.py",
    "content": "import argparse\nimport logging\nimport os\nfrom tqdm import tqdm\nimport torch\nimport torchaudio\nfrom cosyvoice.cli.cosyvoice import CosyVoice2\nfrom cosyvoice.utils.file_utils import load_wav\n\n\nlogger = logging.getLogger()\n\n\ndef main():\n    cosyvoice = CosyVoice2(args.ref_model)\n\n    utt2wav, utt2text = {}, {}\n    with open('{}/wav.scp'.format(args.src_dir)) as f:\n        for l in f:\n            l = l.split('\\n')[0].split()\n            utt2wav[l[0]] = l[1]\n    with open('{}/text'.format(args.src_dir)) as f:\n        for l in f:\n            l = l.split('\\n')[0].split()\n            utt2text[l[0]] = ' '.join(l[1:])\n\n    os.makedirs('{}/wav'.format(args.des_dir), exist_ok=True)\n    with open('{}/wav.scp'.format(args.des_dir), 'w') as f:\n        for utt, wav in tqdm(utt2wav.items()):\n            prompt_speech_16k = load_wav(wav, 16000)\n            if prompt_speech_16k.shape[1] >= 30 * 16000:\n                continue\n            speech_list = []\n            for _, j in enumerate(cosyvoice.inference_zero_shot(utt2text[utt], utt2text[utt], prompt_speech_16k, stream=False, text_frontend=False)):\n                speech_list.append(j['tts_speech'])\n            negative_wav = os.path.abspath('{}/wav/{}'.format(args.des_dir, os.path.basename(wav)))\n            torchaudio.save(negative_wav, torch.concat(speech_list, dim=1), cosyvoice.sample_rate, backend='soundfile')\n            f.write('{} {}\\n'.format(utt, negative_wav))\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser()\n    parser.add_argument('--src_dir',\n                        type=str)\n    parser.add_argument('--des_dir',\n                        type=str)\n    parser.add_argument('--ref_model',\n                        type=str)\n    args = parser.parse_args()\n    main()\n"
  },
  {
    "path": "examples/libritts/cosyvoice/path.sh",
    "content": "# NOTE(kan-bayashi): Use UTF-8 in Python to avoid UnicodeDecodeError when LC_ALL=C\nexport PYTHONIOENCODING=UTF-8\nexport PYTHONPATH=../../../:../../../third_party/Matcha-TTS:$PYTHONPATH\n"
  },
  {
    "path": "examples/libritts/cosyvoice/run.sh",
    "content": "#!/bin/bash\n# Copyright 2024 Alibaba Inc. All Rights Reserved.\n. ./path.sh || exit 1;\n\nstage=-1\nstop_stage=3\n\ndata_url=www.openslr.org/resources/60\ndata_dir=/mnt/lyuxiang.lx/data/tts/openslr/libritts\npretrained_model_dir=../../../pretrained_models/CosyVoice-300M\n\nif [ ${stage} -le -1 ] && [ ${stop_stage} -ge -1 ]; then\n  echo \"Data Download\"\n  for part in dev-clean test-clean dev-other test-other train-clean-100 train-clean-360 train-other-500; do\n    local/download_and_untar.sh ${data_dir} ${data_url} ${part}\n  done\nfi\n\nif [ ${stage} -le 0 ] && [ ${stop_stage} -ge 0 ]; then\n  echo \"Data preparation, prepare wav.scp/text/utt2spk/spk2utt\"\n  for x in train-clean-100 train-clean-360 train-other-500 dev-clean dev-other test-clean test-other; do\n    mkdir -p data/$x\n    python local/prepare_data.py --src_dir $data_dir/LibriTTS/$x --des_dir data/$x\n  done\nfi\n\nif [ ${stage} -le 1 ] && [ ${stop_stage} -ge 1 ]; then\n  echo \"Extract campplus speaker embedding, you will get spk2embedding.pt and utt2embedding.pt in data/$x dir\"\n  for x in train-clean-100 train-clean-360 train-other-500 dev-clean dev-other test-clean test-other; do\n    ../../../tools/extract_embedding.py --dir data/$x \\\n      --onnx_path $pretrained_model_dir/campplus.onnx\n  done\nfi\n\nif [ ${stage} -le 2 ] && [ ${stop_stage} -ge 2 ]; then\n  echo \"Extract discrete speech token, you will get utt2speech_token.pt in data/$x dir\"\n  for x in train-clean-100 train-clean-360 train-other-500 dev-clean dev-other test-clean test-other; do\n    ../../../tools/extract_speech_token.py --dir data/$x \\\n      --onnx_path $pretrained_model_dir/speech_tokenizer_v1.onnx\n  done\nfi\n\nif [ ${stage} -le 3 ] && [ ${stop_stage} -ge 3 ]; then\n  echo \"Prepare required parquet format data, you should have prepared wav.scp/text/utt2spk/spk2utt/utt2embedding.pt/spk2embedding.pt/utt2speech_token.pt\"\n  for x in train-clean-100 train-clean-360 train-other-500 dev-clean dev-other test-clean test-other; do\n    mkdir -p data/$x/parquet\n    ../../../tools/make_parquet_list.py --num_utts_per_parquet 1000 \\\n      --num_processes 10 \\\n      --src_dir data/$x \\\n      --des_dir data/$x/parquet\n  done\nfi\n\n# train llm\nexport CUDA_VISIBLE_DEVICES=\"0,1,2,3\"\nnum_gpus=$(echo $CUDA_VISIBLE_DEVICES | awk -F \",\" '{print NF}')\njob_id=1986\ndist_backend=\"nccl\"\nnum_workers=2\nprefetch=100\ntrain_engine=torch_ddp\nif [ ${stage} -le 5 ] && [ ${stop_stage} -ge 5 ]; then\n  echo \"Run train. We only support llm traning for now\"\n  if [ $train_engine == 'deepspeed' ]; then\n    echo \"Notice deepspeed has its own optimizer config. Modify conf/ds_stage2.json if necessary\"\n  fi\n  cat data/{train-clean-100,train-clean-360,train-other-500}/parquet/data.list > data/train.data.list\n  cat data/{dev-clean,dev-other}/parquet/data.list > data/dev.data.list\n  for model in llm flow hifigan; do\n    torchrun --nnodes=1 --nproc_per_node=$num_gpus \\\n        --rdzv_id=$job_id --rdzv_backend=\"c10d\" --rdzv_endpoint=\"localhost:1234\" \\\n      ../../../cosyvoice/bin/train.py \\\n      --train_engine $train_engine \\\n      --config conf/cosyvoice.yaml \\\n      --train_data data/train.data.list \\\n      --cv_data data/dev.data.list \\\n      --model $model \\\n      --checkpoint $pretrained_model_dir/$model.pt \\\n      --model_dir `pwd`/exp/cosyvoice/$model/$train_engine \\\n      --tensorboard_dir `pwd`/tensorboard/cosyvoice/$model/$train_engine \\\n      --ddp.dist_backend $dist_backend \\\n      --num_workers ${num_workers} \\\n      --prefetch ${prefetch} \\\n      --pin_memory \\\n      --use_amp \\\n      --deepspeed_config ./conf/ds_stage2.json \\\n      --deepspeed.save_states model+optimizer\n  done\nfi\n\n# average model\naverage_num=5\nif [ ${stage} -le 6 ] && [ ${stop_stage} -ge 6 ]; then\n  for model in llm flow hifigan; do\n    decode_checkpoint=`pwd`/exp/cosyvoice/$model/$train_engine/${model}.pt\n    echo \"do model average and final checkpoint is $decode_checkpoint\"\n    python cosyvoice/bin/average_model.py \\\n      --dst_model $decode_checkpoint \\\n      --src_path `pwd`/exp/cosyvoice/$model/$train_engine  \\\n      --num ${average_num} \\\n      --val_best\n  done\nfi\n\nif [ ${stage} -le 7 ] && [ ${stop_stage} -ge 7 ]; then\n  echo \"Export your model for inference speedup. Remember copy your llm or flow model to model_dir\"\n  python cosyvoice/bin/export_jit.py --model_dir $pretrained_model_dir\n  python cosyvoice/bin/export_onnx.py --model_dir $pretrained_model_dir\nfi"
  },
  {
    "path": "examples/libritts/cosyvoice/tts_text.json",
    "content": "{\n  \"1089_134686_000002_000000\": [\n    \"hello, my name is Jack. What is your name?\"\n  ]\n}"
  },
  {
    "path": "examples/libritts/cosyvoice2/conf/cosyvoice2.yaml",
    "content": "# set random seed, so that you may reproduce your result.\n__set_seed1: !apply:random.seed [1986]\n__set_seed2: !apply:numpy.random.seed [1986]\n__set_seed3: !apply:torch.manual_seed [1986]\n__set_seed4: !apply:torch.cuda.manual_seed_all [1986]\n\n# fixed params\nsample_rate: 24000\nllm_input_size: 896\nllm_output_size: 896\nspk_embed_dim: 192\nqwen_pretrain_path: ''\ntoken_frame_rate: 25\ntoken_mel_ratio: 2\n\n# stream related params\nchunk_size: 25 # streaming inference chunk size, in token\nnum_decoding_left_chunks: -1 # streaming inference flow decoder left chunk size, <0 means use all left chunks\n\n# model params\n# for all class/function included in this repo, we use !<name> or !<new> for intialization, so that user may find all corresponding class/function according to one single yaml.\n# for system/third_party class/function, we do not require this.\nllm: !new:cosyvoice.llm.llm.Qwen2LM\n    llm_input_size: !ref <llm_input_size>\n    llm_output_size: !ref <llm_output_size>\n    speech_token_size: 6561\n    length_normalized_loss: True\n    lsm_weight: 0\n    mix_ratio: [5, 15]\n    llm: !new:cosyvoice.llm.llm.Qwen2Encoder\n        pretrain_path: !ref <qwen_pretrain_path>\n    sampling: !name:cosyvoice.utils.common.ras_sampling\n        top_p: 0.8\n        top_k: 25\n        win_size: 10\n        tau_r: 0.1\n\nflow: !new:cosyvoice.flow.flow.CausalMaskedDiffWithXvec\n    input_size: 512\n    output_size: 80\n    spk_embed_dim: !ref <spk_embed_dim>\n    output_type: 'mel'\n    vocab_size: 6561\n    input_frame_rate: !ref <token_frame_rate>\n    only_mask_loss: True\n    token_mel_ratio: !ref <token_mel_ratio>\n    pre_lookahead_len: 3\n    encoder: !new:cosyvoice.transformer.upsample_encoder.UpsampleConformerEncoder\n        output_size: 512\n        attention_heads: 8\n        linear_units: 2048\n        num_blocks: 6\n        dropout_rate: 0.1\n        positional_dropout_rate: 0.1\n        attention_dropout_rate: 0.1\n        normalize_before: True\n        input_layer: 'linear'\n        pos_enc_layer_type: 'rel_pos_espnet'\n        selfattention_layer_type: 'rel_selfattn'\n        input_size: 512\n        use_cnn_module: False\n        macaron_style: False\n        static_chunk_size: !ref <chunk_size>\n    decoder: !new:cosyvoice.flow.flow_matching.CausalConditionalCFM\n        in_channels: 240\n        n_spks: 1\n        spk_emb_dim: 80\n        cfm_params: !new:omegaconf.DictConfig\n            content:\n                sigma_min: 1e-06\n                solver: 'euler'\n                t_scheduler: 'cosine'\n                training_cfg_rate: 0.2\n                inference_cfg_rate: 0.7\n                reg_loss_type: 'l1'\n        estimator: !new:cosyvoice.flow.decoder.CausalConditionalDecoder\n            in_channels: 320\n            out_channels: 80\n            channels: [256]\n            dropout: 0.0\n            attention_head_dim: 64\n            n_blocks: 4\n            num_mid_blocks: 12\n            num_heads: 8\n            act_fn: 'gelu'\n            static_chunk_size: !ref <chunk_size> * <token_mel_ratio>\n            num_decoding_left_chunks: !ref <num_decoding_left_chunks>\n\nhift: !new:cosyvoice.hifigan.generator.HiFTGenerator\n    in_channels: 80\n    base_channels: 512\n    nb_harmonics: 8\n    sampling_rate: !ref <sample_rate>\n    nsf_alpha: 0.1\n    nsf_sigma: 0.003\n    nsf_voiced_threshold: 10\n    upsample_rates: [8, 5, 3]\n    upsample_kernel_sizes: [16, 11, 7]\n    istft_params:\n        n_fft: 16\n        hop_len: 4\n    resblock_kernel_sizes: [3, 7, 11]\n    resblock_dilation_sizes: [[1, 3, 5], [1, 3, 5], [1, 3, 5]]\n    source_resblock_kernel_sizes: [7, 7, 11]\n    source_resblock_dilation_sizes: [[1, 3, 5], [1, 3, 5], [1, 3, 5]]\n    lrelu_slope: 0.1\n    audio_limit: 0.99\n    f0_predictor: !new:cosyvoice.hifigan.f0_predictor.ConvRNNF0Predictor\n        num_class: 1\n        in_channels: 80\n        cond_channels: 512\n\n# gan related module\nmel_spec_transform1: !name:matcha.utils.audio.mel_spectrogram\n    n_fft: 1920\n    num_mels: 80\n    sampling_rate: !ref <sample_rate>\n    hop_size: 480\n    win_size: 1920\n    fmin: 0\n    fmax: null\n    center: False\nhifigan: !new:cosyvoice.hifigan.hifigan.HiFiGan\n    generator: !ref <hift>\n    discriminator: !new:cosyvoice.hifigan.discriminator.MultipleDiscriminator\n        mpd: !new:matcha.hifigan.models.MultiPeriodDiscriminator\n        mrd: !new:cosyvoice.hifigan.discriminator.MultiResSpecDiscriminator\n    mel_spec_transform: [\n        !ref <mel_spec_transform1>\n    ]\n\n# processor functions\nparquet_opener: !name:cosyvoice.dataset.processor.parquet_opener\nget_tokenizer: !name:cosyvoice.tokenizer.tokenizer.get_qwen_tokenizer\n    token_path: !ref <qwen_pretrain_path>\n    skip_special_tokens: True\nallowed_special: 'all'\ntokenize: !name:cosyvoice.dataset.processor.tokenize\n    get_tokenizer: !ref <get_tokenizer>\n    allowed_special: !ref <allowed_special>\nfilter: !name:cosyvoice.dataset.processor.filter\n    max_length: 6000\n    min_length: 100\n    token_max_length: 200\n    token_min_length: 1\nresample: !name:cosyvoice.dataset.processor.resample\n    resample_rate: !ref <sample_rate>\ntruncate: !name:cosyvoice.dataset.processor.truncate\n    truncate_length: 24480 # must be a multiplier of hop_size\nfeat_extractor: !name:matcha.utils.audio.mel_spectrogram\n    n_fft: 1920\n    num_mels: 80\n    sampling_rate: !ref <sample_rate>\n    hop_size: 480\n    win_size: 1920\n    fmin: 0\n    fmax: 8000\n    center: False\ncompute_fbank: !name:cosyvoice.dataset.processor.compute_fbank\n    feat_extractor: !ref <feat_extractor>\n    num_frames: 960\ncompute_whisper_fbank: !name:cosyvoice.dataset.processor.compute_whisper_fbank\n    num_frames: 960\ncompute_f0: !name:cosyvoice.dataset.processor.compute_f0\n    sample_rate: !ref <sample_rate>\n    hop_size: 480\nparse_embedding: !name:cosyvoice.dataset.processor.parse_embedding\n    normalize: True\nshuffle: !name:cosyvoice.dataset.processor.shuffle\n    shuffle_size: 1000\nsort: !name:cosyvoice.dataset.processor.sort\n    sort_size: 500  # sort_size should be less than shuffle_size\nbatch: !name:cosyvoice.dataset.processor.batch\n    batch_type: 'dynamic'\n    max_frames_in_batch: 2000\npadding: !name:cosyvoice.dataset.processor.padding\n    use_spk_embedding: False # change to True during sft\n\n\n# dataset processor pipeline\ndata_pipeline: [\n    !ref <parquet_opener>,\n    !ref <tokenize>,\n    !ref <filter>,\n    !ref <resample>,\n    !ref <compute_fbank>,\n    !ref <parse_embedding>,\n    !ref <compute_whisper_fbank>,\n    !ref <shuffle>,\n    !ref <sort>,\n    !ref <batch>,\n    !ref <padding>,\n]\ndata_pipeline_gan: [\n    !ref <parquet_opener>,\n    !ref <tokenize>,\n    !ref <filter>,\n    !ref <resample>,\n    !ref <truncate>,\n    !ref <compute_fbank>,\n    !ref <compute_f0>,\n    !ref <parse_embedding>,\n    !ref <shuffle>,\n    !ref <sort>,\n    !ref <batch>,\n    !ref <padding>,\n]\n\n# llm flow train conf\ntrain_conf:\n    optim: adam\n    optim_conf:\n        lr: 1e-5 # change to 1e-5 during sft\n    scheduler: constantlr # change to constantlr during sft\n    scheduler_conf:\n        warmup_steps: 2500\n    max_epoch: 200\n    grad_clip: 5\n    accum_grad: 2\n    log_interval: 100\n    save_per_step: -1\n\n# gan train conf\ntrain_conf_gan:\n    optim: adam\n    optim_conf:\n        lr: 0.0002 # use small lr for gan training\n    scheduler: constantlr\n    optim_d: adam\n    optim_conf_d:\n        lr: 0.0002 # use small lr for gan training\n    scheduler_d: constantlr\n    max_epoch: 200\n    grad_clip: 5\n    accum_grad: 1 # in gan training, accum_grad must be 1\n    log_interval: 100\n    save_per_step: -1"
  },
  {
    "path": "examples/libritts/cosyvoice2/conf/ds_stage2.json",
    "content": "{\n  \"train_micro_batch_size_per_gpu\": 1,\n  \"gradient_accumulation_steps\": 1,\n  \"steps_per_print\": 100,\n  \"gradient_clipping\": 5,\n  \"fp16\": {\n    \"enabled\": false,\n    \"auto_cast\": false,\n    \"loss_scale\": 0,\n    \"initial_scale_power\": 16,\n    \"loss_scale_window\": 256,\n    \"hysteresis\": 2,\n    \"consecutive_hysteresis\": false,\n    \"min_loss_scale\": 1\n  },\n  \"bf16\": {\n    \"enabled\": false\n  },\n  \"zero_force_ds_cpu_optimizer\": false,\n  \"zero_optimization\": {\n    \"stage\": 2,\n    \"offload_optimizer\": {\n      \"device\": \"none\",\n      \"pin_memory\": true\n    },\n    \"allgather_partitions\": true,\n    \"allgather_bucket_size\": 5e8,\n    \"overlap_comm\": false,\n    \"reduce_scatter\": true,\n    \"reduce_bucket_size\": 5e8,\n    \"contiguous_gradients\" : true\n  },\n  \"optimizer\": {\n    \"type\": \"AdamW\",\n    \"params\": {\n        \"lr\": 0.001,\n        \"weight_decay\": 0.0001,\n        \"torch_adam\": true,\n        \"adam_w_mode\": true\n    }\n  }\n}"
  },
  {
    "path": "examples/libritts/cosyvoice2/run.sh",
    "content": "#!/bin/bash\n# Copyright 2024 Alibaba Inc. All Rights Reserved.\n. ./path.sh || exit 1;\n\nstage=-1\nstop_stage=3\n\ndata_url=www.openslr.org/resources/60\ndata_dir=/mnt/lyuxiang.lx/data/tts/openslr/libritts\npretrained_model_dir=../../../pretrained_models/CosyVoice2-0.5B\n\nif [ ${stage} -le -1 ] && [ ${stop_stage} -ge -1 ]; then\n  echo \"Data Download\"\n  for part in dev-clean test-clean dev-other test-other train-clean-100 train-clean-360 train-other-500; do\n    local/download_and_untar.sh ${data_dir} ${data_url} ${part}\n  done\nfi\n\nif [ ${stage} -le 0 ] && [ ${stop_stage} -ge 0 ]; then\n  echo \"Data preparation, prepare wav.scp/text/utt2spk/spk2utt\"\n  for x in train-clean-100 train-clean-360 train-other-500 dev-clean dev-other test-clean test-other; do\n    mkdir -p data/$x\n    python local/prepare_data.py --src_dir $data_dir/LibriTTS/$x --des_dir data/$x\n  done\nfi\n\n# NOTE embedding/token extraction is not necessary now as we support online feature extraction, but training speed will be influenced\nif [ ${stage} -le 1 ] && [ ${stop_stage} -ge 1 ]; then\n  echo \"Extract campplus speaker embedding, you will get spk2embedding.pt and utt2embedding.pt in data/$x dir\"\n  for x in train-clean-100 train-clean-360 train-other-500 dev-clean dev-other test-clean test-other; do\n    tools/extract_embedding.py --dir data/$x \\\n      --onnx_path $pretrained_model_dir/campplus.onnx\n  done\nfi\n\nif [ ${stage} -le 2 ] && [ ${stop_stage} -ge 2 ]; then\n  echo \"Extract discrete speech token, you will get utt2speech_token.pt in data/$x dir\"\n  for x in train-clean-100 train-clean-360 train-other-500 dev-clean dev-other test-clean test-other; do\n    tools/extract_speech_token.py --dir data/$x \\\n      --onnx_path $pretrained_model_dir/speech_tokenizer_v3.onnx\n  done\nfi\n\nif [ ${stage} -le 3 ] && [ ${stop_stage} -ge 3 ]; then\n  echo \"Prepare required parquet format data, you should have prepared wav.scp/text/utt2spk/spk2utt/utt2embedding.pt/spk2embedding.pt/utt2speech_token.pt\"\n  for x in train-clean-100 train-clean-360 train-other-500 dev-clean dev-other test-clean test-other; do\n    mkdir -p data/$x/parquet\n    ../../../tools/make_parquet_list.py --num_utts_per_parquet 1000 \\\n      --num_processes 10 \\\n      --src_dir data/$x \\\n      --des_dir data/$x/parquet\n  done\nfi\n\n# train llm\nexport CUDA_VISIBLE_DEVICES=\"0,1,2,3\"\nnum_gpus=$(echo $CUDA_VISIBLE_DEVICES | awk -F \",\" '{print NF}')\njob_id=1986\ndist_backend=\"nccl\"\nnum_workers=2\nprefetch=100\ntrain_engine=torch_ddp\nif [ ${stage} -le 5 ] && [ ${stop_stage} -ge 5 ]; then\n  echo \"Run train. We only support llm traning for now\"\n  if [ $train_engine == 'deepspeed' ]; then\n    echo \"Notice deepspeed has its own optimizer config. Modify conf/ds_stage2.json if necessary\"\n  fi\n  cat data/{train-clean-100,train-clean-360,train-other-500}/parquet/data.list > data/train.data.list\n  cat data/{dev-clean,dev-other}/parquet/data.list > data/dev.data.list\n  for model in llm flow hifigan; do\n    torchrun --nnodes=1 --nproc_per_node=$num_gpus \\\n        --rdzv_id=$job_id --rdzv_backend=\"c10d\" --rdzv_endpoint=\"localhost:1234\" \\\n      ../../../cosyvoice/bin/train.py \\\n      --train_engine $train_engine \\\n      --config conf/cosyvoice2.yaml \\\n      --train_data data/train.data.list \\\n      --cv_data data/dev.data.list \\\n      --qwen_pretrain_path $pretrained_model_dir/CosyVoice-BlankEN \\\n      --onnx_path $pretrained_model_dir \\\n      --model $model \\\n      --checkpoint $pretrained_model_dir/$model.pt \\\n      --model_dir `pwd`/exp/cosyvoice2/$model/$train_engine \\\n      --tensorboard_dir `pwd`/tensorboard/cosyvoice2/$model/$train_engine \\\n      --ddp.dist_backend $dist_backend \\\n      --num_workers ${num_workers} \\\n      --prefetch ${prefetch} \\\n      --pin_memory \\\n      --use_amp \\\n      --deepspeed_config ./conf/ds_stage2.json \\\n      --deepspeed.save_states model+optimizer\n  done\nfi\n\n# average model\naverage_num=5\nif [ ${stage} -le 6 ] && [ ${stop_stage} -ge 6 ]; then\n  for model in llm flow hifigan; do\n    decode_checkpoint=`pwd`/exp/cosyvoice/$model/$train_engine/${model}.pt\n    echo \"do model average and final checkpoint is $decode_checkpoint\"\n    python cosyvoice/bin/average_model.py \\\n      --dst_model $decode_checkpoint \\\n      --src_path `pwd`/exp/cosyvoice/$model/$train_engine  \\\n      --num ${average_num} \\\n      --val_best\n  done\nfi\n\nif [ ${stage} -le 7 ] && [ ${stop_stage} -ge 7 ]; then\n  echo \"Export your model for inference speedup. Remember copy your llm or flow model to model_dir\"\n  python cosyvoice/bin/export_jit.py --model_dir $pretrained_model_dir\n  python cosyvoice/bin/export_onnx.py --model_dir $pretrained_model_dir\nfi"
  },
  {
    "path": "examples/libritts/cosyvoice2/run_dpo.sh",
    "content": "#!/bin/bash\n# Copyright 2024 Alibaba Inc. All Rights Reserved.\n. ./path.sh || exit 1;\n\nstage=-1\nstop_stage=3\n\ndata_url=www.openslr.org/resources/60\ndata_dir=/mnt/lyuxiang.lx/data/tts/openslr/libritts\npretrained_model_dir=../../../pretrained_models/CosyVoice2-0.5B\n\nif [ ${stage} -le -1 ] && [ ${stop_stage} -ge -1 ]; then\n  echo \"Data Download\"\n  for part in dev-clean test-clean dev-other test-other train-clean-100 train-clean-360 train-other-500; do\n    local/download_and_untar.sh ${data_dir} ${data_url} ${part}\n  done\nfi\n\nif [ ${stage} -le 0 ] && [ ${stop_stage} -ge 0 ]; then\n  echo \"Data preparation, prepare wav.scp/text/utt2spk/spk2utt\"\n  for x in train-clean-100 train-clean-360 train-other-500 dev-clean dev-other test-clean test-other; do\n    mkdir -p data/$x\n    python local/prepare_data.py --src_dir $data_dir/LibriTTS/$x --des_dir data/$x\n  done\nfi\n\nif [ ${stage} -le 0 ] && [ ${stop_stage} -ge 0 ]; then\n  echo \"Prepare negative samples using CosyVoice2-0.5B, this is also our reference model.\n    Here we use CosyVoice2-0.5B generated audio as reject sample for simplicity, you can use metric like wer/similarity.\"\n  for x in train-clean-100 train-clean-360 train-other-500; do\n    mkdir -p data/${x}_reject\n    python local/prepare_reject_sample.py --src_dir data/$x --des_dir data/${x}_reject --ref_model $pretrained_model_dir\n  done\nfi\n\nif [ ${stage} -le 1 ] && [ ${stop_stage} -ge 1 ]; then\n  echo \"Extract campplus speaker embedding, you will get spk2embedding.pt and utt2embedding.pt in data/$x dir\"\n  for x in train-clean-100 train-clean-360 train-other-500 dev-clean dev-other test-clean test-other; do\n    ../../../tools/extract_embedding.py --dir data/$x \\\n      --onnx_path $pretrained_model_dir/campplus.onnx\n  done\nfi\n\nif [ ${stage} -le 2 ] && [ ${stop_stage} -ge 2 ]; then\n  echo \"Extract discrete speech token, you will get utt2speech_token.pt in data/$x dir\"\n  for x in train-clean-100 train-clean-360 train-other-500 train-clean-100_reject train-clean-360_reject dev-clean dev-other test-clean test-other; do\n    ../../../tools/extract_speech_token.py --dir data/$x \\\n      --onnx_path $pretrained_model_dir/speech_tokenizer_v2.onnx\n  done\nfi\n\nif [ ${stage} -le 3 ] && [ ${stop_stage} -ge 3 ]; then\n  echo \"Prepare required parquet format data, you should have prepared wav.scp/text/utt2spk/spk2utt/utt2embedding.pt/spk2embedding.pt/utt2speech_token.pt\"\n  for x in train-clean-100 train-clean-360 train-other-500 dev-clean dev-other test-clean test-other; do\n    mkdir -p data/$x/parquet\n    ../../../tools/make_parquet_list.py --num_utts_per_parquet 1000 \\\n      --num_processes 10 \\\n      --dpo \\\n      --src_dir data/$x \\\n      --des_dir data/$x/parquet\n  done\nfi\n\n# train llm\nexport CUDA_VISIBLE_DEVICES=\"0,1,2,3\"\nnum_gpus=$(echo $CUDA_VISIBLE_DEVICES | awk -F \",\" '{print NF}')\njob_id=1986\ndist_backend=\"nccl\"\nnum_workers=2\nprefetch=100\ntrain_engine=torch_ddp\nif [ ${stage} -le 5 ] && [ ${stop_stage} -ge 5 ]; then\n  echo \"Run train. We only support llm traning for now\"\n  if [ $train_engine == 'deepspeed' ]; then\n    echo \"Notice deepspeed has its own optimizer config. Modify conf/ds_stage2.json if necessary\"\n  fi\n  cat data/{train-clean-100,train-clean-360,train-other-500}/parquet/data.list > data/train.data.list\n  cat data/{dev-clean,dev-other}/parquet/data.list > data/dev.data.list\n  # NOTE only llm supports dpo\n  for model in llm; do\n    torchrun --nnodes=1 --nproc_per_node=$num_gpus \\\n        --rdzv_id=$job_id --rdzv_backend=\"c10d\" --rdzv_endpoint=\"localhost:1234\" \\\n      ../../../cosyvoice/bin/train.py \\\n      --train_engine $train_engine \\\n      --config conf/cosyvoice2.yaml \\\n      --train_data data/train.data.list \\\n      --cv_data data/dev.data.list \\\n      --onnx_path $pretrained_model_dir \\\n      --qwen_pretrain_path $pretrained_model_dir/CosyVoice-BlankEN \\\n      --model $model \\\n      --checkpoint $pretrained_model_dir/$model.pt \\\n      --ref_model $pretrained_model_dir/llm.pt \\\n      --model_dir `pwd`/exp/cosyvoice2/$model/$train_engine \\\n      --tensorboard_dir `pwd`/tensorboard/cosyvoice2/$model/$train_engine \\\n      --ddp.dist_backend $dist_backend \\\n      --num_workers ${num_workers} \\\n      --prefetch ${prefetch} \\\n      --pin_memory \\\n      --use_amp \\\n      --dpo \\\n      --deepspeed_config ./conf/ds_stage2.json \\\n      --deepspeed.save_states model+optimizer\n  done\nfi\n\n# average model\naverage_num=5\nif [ ${stage} -le 6 ] && [ ${stop_stage} -ge 6 ]; then\n  for model in llm flow hifigan; do\n    decode_checkpoint=`pwd`/exp/cosyvoice/$model/$train_engine/${model}.pt\n    echo \"do model average and final checkpoint is $decode_checkpoint\"\n    python cosyvoice/bin/average_model.py \\\n      --dst_model $decode_checkpoint \\\n      --src_path `pwd`/exp/cosyvoice/$model/$train_engine  \\\n      --num ${average_num} \\\n      --val_best\n  done\nfi\n\nif [ ${stage} -le 7 ] && [ ${stop_stage} -ge 7 ]; then\n  echo \"Export your model for inference speedup. Remember copy your llm or flow model to model_dir\"\n  python cosyvoice/bin/export_jit.py --model_dir $pretrained_model_dir\n  python cosyvoice/bin/export_onnx.py --model_dir $pretrained_model_dir\nfi"
  },
  {
    "path": "examples/libritts/cosyvoice3/conf/cosyvoice3.yaml",
    "content": "# set random seed, so that you may reproduce your result.\n__set_seed1: !apply:random.seed [1986]\n__set_seed2: !apply:numpy.random.seed [1986]\n__set_seed3: !apply:torch.manual_seed [1986]\n__set_seed4: !apply:torch.cuda.manual_seed_all [1986]\n\n# fixed params\nsample_rate: 24000\nllm_input_size: 896\nllm_output_size: 896\nspk_embed_dim: 192\nqwen_pretrain_path: ''\ntoken_frame_rate: 25\ntoken_mel_ratio: 2\n\n# stream related params\nchunk_size: 25 # streaming inference chunk size, in token\nnum_decoding_left_chunks: -1 # streaming inference flow decoder left chunk size, <0 means use all left chunks\n\n# model params\n# for all class/function included in this repo, we use !<name> or !<new> for intialization, so that user may find all corresponding class/function according to one single yaml.\n# for system/third_party class/function, we do not require this.\nllm: !new:cosyvoice.llm.llm.CosyVoice3LM\n    llm_input_size: !ref <llm_input_size>\n    llm_output_size: !ref <llm_output_size>\n    speech_token_size: 6561\n    length_normalized_loss: True\n    lsm_weight: 0\n    mix_ratio: [5, 15]\n    llm: !new:cosyvoice.llm.llm.Qwen2Encoder\n        pretrain_path: !ref <qwen_pretrain_path>\n    sampling: !name:cosyvoice.utils.common.ras_sampling\n        top_p: 0.8\n        top_k: 25\n        win_size: 10\n        tau_r: 0.1\n\nflow: !new:cosyvoice.flow.flow.CausalMaskedDiffWithDiT\n    input_size: 80\n    output_size: 80\n    spk_embed_dim: !ref <spk_embed_dim>\n    output_type: 'mel'\n    vocab_size: 6561\n    input_frame_rate: !ref <token_frame_rate>\n    only_mask_loss: True\n    token_mel_ratio: !ref <token_mel_ratio>\n    pre_lookahead_len: 3\n    pre_lookahead_layer: !new:cosyvoice.transformer.upsample_encoder.PreLookaheadLayer\n        in_channels: 80\n        channels: 1024\n        pre_lookahead_len: 3\n    decoder: !new:cosyvoice.flow.flow_matching.CausalConditionalCFM\n        in_channels: 240\n        n_spks: 1\n        spk_emb_dim: 80\n        cfm_params: !new:omegaconf.DictConfig\n            content:\n                sigma_min: 1e-06\n                solver: 'euler'\n                t_scheduler: 'cosine'\n                training_cfg_rate: 0.2\n                inference_cfg_rate: 0.7\n                reg_loss_type: 'l1'\n        estimator: !new:cosyvoice.flow.DiT.dit.DiT\n            dim: 1024\n            depth: 22\n            heads: 16\n            dim_head: 64\n            ff_mult: 2\n            mel_dim: 80\n            mu_dim: 80\n            spk_dim: 80\n            out_channels: 80\n            static_chunk_size: !ref <chunk_size> * <token_mel_ratio>\n            num_decoding_left_chunks: !ref <num_decoding_left_chunks>\n\nhift: !new:cosyvoice.hifigan.generator.CausalHiFTGenerator\n    in_channels: 80\n    base_channels: 512\n    nb_harmonics: 8\n    sampling_rate: !ref <sample_rate>\n    nsf_alpha: 0.1\n    nsf_sigma: 0.003\n    nsf_voiced_threshold: 10\n    upsample_rates: [8, 5, 3]\n    upsample_kernel_sizes: [16, 11, 7]\n    istft_params:\n        n_fft: 16\n        hop_len: 4\n    resblock_kernel_sizes: [3, 7, 11]\n    resblock_dilation_sizes: [[1, 3, 5], [1, 3, 5], [1, 3, 5]]\n    source_resblock_kernel_sizes: [7, 7, 11]\n    source_resblock_dilation_sizes: [[1, 3, 5], [1, 3, 5], [1, 3, 5]]\n    lrelu_slope: 0.1\n    audio_limit: 0.99\n    conv_pre_look_right: 4\n    f0_predictor: !new:cosyvoice.hifigan.f0_predictor.CausalConvRNNF0Predictor\n        num_class: 1\n        in_channels: 80\n        cond_channels: 512\n\n# gan related module\nmel_spec_transform1: !name:matcha.utils.audio.mel_spectrogram\n    n_fft: 1920\n    num_mels: 80\n    sampling_rate: !ref <sample_rate>\n    hop_size: 480\n    win_size: 1920\n    fmin: 0\n    fmax: null\n    center: False\nhifigan: !new:cosyvoice.hifigan.hifigan.HiFiGan\n    generator: !ref <hift>\n    discriminator: !new:cosyvoice.hifigan.discriminator.MultipleDiscriminator\n        mpd: !new:matcha.hifigan.models.MultiPeriodDiscriminator\n        mrd: !new:cosyvoice.hifigan.discriminator.MultiResSpecDiscriminator\n    mel_spec_transform: [\n        !ref <mel_spec_transform1>\n    ]\n\n# processor functions\nparquet_opener: !name:cosyvoice.dataset.processor.parquet_opener\nget_tokenizer: !name:cosyvoice.tokenizer.tokenizer.get_qwen_tokenizer\n    token_path: !ref <qwen_pretrain_path>\n    skip_special_tokens: True\n    version: cosyvoice3\nallowed_special: 'all'\ntokenize: !name:cosyvoice.dataset.processor.tokenize\n    get_tokenizer: !ref <get_tokenizer>\n    allowed_special: !ref <allowed_special>\nfilter: !name:cosyvoice.dataset.processor.filter\n    max_length: 6000\n    min_length: 100\n    token_max_length: 200\n    token_min_length: 1\nresample: !name:cosyvoice.dataset.processor.resample\n    resample_rate: !ref <sample_rate>\ntruncate: !name:cosyvoice.dataset.processor.truncate\n    truncate_length: 24960 # must be a multiplier of hop_size and token_mel_ratio\nfeat_extractor: !name:matcha.utils.audio.mel_spectrogram\n    n_fft: 1920\n    num_mels: 80\n    sampling_rate: !ref <sample_rate>\n    hop_size: 480\n    win_size: 1920\n    fmin: 0\n    fmax: null\n    center: False\ncompute_fbank: !name:cosyvoice.dataset.processor.compute_fbank\n    feat_extractor: !ref <feat_extractor>\n    num_frames: 960\ncompute_whisper_fbank: !name:cosyvoice.dataset.processor.compute_whisper_fbank\n    num_frames: 960\ncompute_f0: !name:cosyvoice.dataset.processor.compute_f0\n    sample_rate: !ref <sample_rate>\n    hop_size: 480\nparse_embedding: !name:cosyvoice.dataset.processor.parse_embedding\n    normalize: True\nshuffle: !name:cosyvoice.dataset.processor.shuffle\n    shuffle_size: 1000\nsort: !name:cosyvoice.dataset.processor.sort\n    sort_size: 500  # sort_size should be less than shuffle_size\nbatch: !name:cosyvoice.dataset.processor.batch\n    batch_type: 'dynamic'\n    max_frames_in_batch: 2000\npadding: !name:cosyvoice.dataset.processor.padding\n    use_spk_embedding: False # change to True during sft\n\n\n# dataset processor pipeline\ndata_pipeline: [\n    !ref <parquet_opener>,\n    !ref <tokenize>,\n    !ref <filter>,\n    !ref <resample>,\n    !ref <compute_fbank>,\n    !ref <parse_embedding>,\n    !ref <compute_whisper_fbank>,\n    !ref <shuffle>,\n    !ref <sort>,\n    !ref <batch>,\n    !ref <padding>,\n]\ndata_pipeline_gan: [\n    !ref <parquet_opener>,\n    !ref <tokenize>,\n    !ref <filter>,\n    !ref <resample>,\n    !ref <truncate>,\n    !ref <compute_fbank>,\n    !ref <compute_f0>,\n    !ref <parse_embedding>,\n    !ref <shuffle>,\n    !ref <sort>,\n    !ref <batch>,\n    !ref <padding>,\n]\n\n# llm flow train conf\ntrain_conf:\n    optim: adam\n    optim_conf:\n        lr: 1e-5 # change to 1e-5 during sft\n    scheduler: constantlr # change to constantlr during sft\n    scheduler_conf:\n        warmup_steps: 2500\n    max_epoch: 200\n    grad_clip: 5\n    accum_grad: 2\n    log_interval: 100\n    save_per_step: -1\n\n# gan train conf\ntrain_conf_gan:\n    optim: adam\n    optim_conf:\n        lr: 0.0002 # use small lr for gan training\n    scheduler: constantlr\n    optim_d: adam\n    optim_conf_d:\n        lr: 0.0002 # use small lr for gan training\n    scheduler_d: constantlr\n    max_epoch: 200\n    grad_clip: 5\n    accum_grad: 1 # in gan training, accum_grad must be 1\n    log_interval: 100\n    save_per_step: -1\n"
  },
  {
    "path": "examples/libritts/cosyvoice3/conf/ds_stage2.json",
    "content": "{\n  \"train_micro_batch_size_per_gpu\": 1,\n  \"gradient_accumulation_steps\": 1,\n  \"steps_per_print\": 100,\n  \"gradient_clipping\": 5,\n  \"fp16\": {\n    \"enabled\": false,\n    \"auto_cast\": false,\n    \"loss_scale\": 0,\n    \"initial_scale_power\": 16,\n    \"loss_scale_window\": 256,\n    \"hysteresis\": 2,\n    \"consecutive_hysteresis\": false,\n    \"min_loss_scale\": 1\n  },\n  \"bf16\": {\n    \"enabled\": false\n  },\n  \"zero_force_ds_cpu_optimizer\": false,\n  \"zero_optimization\": {\n    \"stage\": 2,\n    \"offload_optimizer\": {\n      \"device\": \"none\",\n      \"pin_memory\": true\n    },\n    \"allgather_partitions\": true,\n    \"allgather_bucket_size\": 5e8,\n    \"overlap_comm\": false,\n    \"reduce_scatter\": true,\n    \"reduce_bucket_size\": 5e8,\n    \"contiguous_gradients\" : true\n  },\n  \"optimizer\": {\n    \"type\": \"AdamW\",\n    \"params\": {\n        \"lr\": 0.001,\n        \"weight_decay\": 0.0001,\n        \"torch_adam\": true,\n        \"adam_w_mode\": true\n    }\n  }\n}"
  },
  {
    "path": "examples/libritts/cosyvoice3/run.sh",
    "content": "#!/bin/bash\n# Copyright 2024 Alibaba Inc. All Rights Reserved.\n. ./path.sh || exit 1;\n\nstage=-1\nstop_stage=3\n\ndata_url=www.openslr.org/resources/60\ndata_dir=/mnt/lyuxiang.lx/data/tts/openslr/libritts\npretrained_model_dir=../../../pretrained_models/Fun-CosyVoice3-0.5B\n\nif [ ${stage} -le -1 ] && [ ${stop_stage} -ge -1 ]; then\n  echo \"Data Download\"\n  for part in dev-clean test-clean dev-other test-other train-clean-100 train-clean-360 train-other-500; do\n    local/download_and_untar.sh ${data_dir} ${data_url} ${part}\n  done\nfi\n\nif [ ${stage} -le 0 ] && [ ${stop_stage} -ge 0 ]; then\n  echo \"Data preparation, prepare wav.scp/text/utt2spk/spk2utt\"\n  for x in train-clean-100 train-clean-360 train-other-500 dev-clean dev-other test-clean test-other; do\n    mkdir -p data/$x\n    # NOTE in CosyVoice3, we add instruct in sequence\n    python local/prepare_data.py --src_dir $data_dir/LibriTTS/$x --des_dir data/$x --instruct \"You are a helpful assistant.<|endofprompt|>\"\n  done\nfi\n\n# NOTE embedding/token extraction is not necessary now as we support online feature extraction, but training speed will be influenced\nif [ ${stage} -le 1 ] && [ ${stop_stage} -ge 1 ]; then\n  echo \"Extract campplus speaker embedding, you will get spk2embedding.pt and utt2embedding.pt in data/$x dir\"\n  for x in train-clean-100 train-clean-360 train-other-500 dev-clean dev-other test-clean test-other; do\n    tools/extract_embedding.py --dir data/$x \\\n      --onnx_path $pretrained_model_dir/campplus.onnx\n  done\nfi\n\nif [ ${stage} -le 2 ] && [ ${stop_stage} -ge 2 ]; then\n  echo \"Extract discrete speech token, you will get utt2speech_token.pt in data/$x dir\"\n  for x in train-clean-100 train-clean-360 train-other-500 dev-clean dev-other test-clean test-other; do\n    tools/extract_speech_token.py --dir data/$x \\\n      --onnx_path $pretrained_model_dir/speech_tokenizer_v3.onnx\n  done\nfi\n\nif [ ${stage} -le 3 ] && [ ${stop_stage} -ge 3 ]; then\n  echo \"Prepare required parquet format data, you should have prepared wav.scp/text/utt2spk/spk2utt/utt2embedding.pt/spk2embedding.pt/utt2speech_token.pt\"\n  for x in train-clean-100 train-clean-360 train-other-500 dev-clean dev-other test-clean test-other; do\n    mkdir -p data/$x/parquet\n    ../../../tools/make_parquet_list.py --num_utts_per_parquet 1000 \\\n      --num_processes 10 \\\n      --src_dir data/$x \\\n      --des_dir data/$x/parquet\n  done\nfi\n\n# train llm\nexport CUDA_VISIBLE_DEVICES=\"0\"\nnum_gpus=$(echo $CUDA_VISIBLE_DEVICES | awk -F \",\" '{print NF}')\njob_id=1986\ndist_backend=\"nccl\"\nnum_workers=2\nprefetch=100\ntrain_engine=torch_ddp\nif [ ${stage} -le 5 ] && [ ${stop_stage} -ge 5 ]; then\n  echo \"Run train. We only support llm traning for now\"\n  if [ $train_engine == 'deepspeed' ]; then\n    echo \"Notice deepspeed has its own optimizer config. Modify conf/ds_stage2.json if necessary\"\n  fi\n  cat data/{train-clean-100,train-clean-360,train-other-500}/parquet/data.list > data/train.data.list\n  cat data/{dev-clean,dev-other}/parquet/data.list > data/dev.data.list\n  for model in llm flow hifigan; do\n    torchrun --nnodes=1 --nproc_per_node=$num_gpus \\\n        --rdzv_id=$job_id --rdzv_backend=\"c10d\" --rdzv_endpoint=\"localhost:1234\" \\\n      ../../../cosyvoice/bin/train.py \\\n      --train_engine $train_engine \\\n      --config conf/cosyvoice3.yaml \\\n      --train_data data/train.data.list \\\n      --cv_data data/dev.data.list \\\n      --qwen_pretrain_path $pretrained_model_dir/CosyVoice-BlankEN \\\n      --onnx_path $pretrained_model_dir \\\n      --model $model \\\n      --checkpoint $pretrained_model_dir/$model.pt \\\n      --model_dir `pwd`/exp/cosyvoice3/$model/$train_engine \\\n      --tensorboard_dir `pwd`/tensorboard/cosyvoice3/$model/$train_engine \\\n      --ddp.dist_backend $dist_backend \\\n      --num_workers ${num_workers} \\\n      --prefetch ${prefetch} \\\n      --pin_memory \\\n      --use_amp \\\n      --deepspeed_config ./conf/ds_stage2.json \\\n      --deepspeed.save_states model+optimizer\n  done\nfi\n\n# average model\naverage_num=5\nif [ ${stage} -le 6 ] && [ ${stop_stage} -ge 6 ]; then\n  for model in llm flow hifigan; do\n    decode_checkpoint=`pwd`/exp/cosyvoice/$model/$train_engine/${model}.pt\n    echo \"do model average and final checkpoint is $decode_checkpoint\"\n    python cosyvoice/bin/average_model.py \\\n      --dst_model $decode_checkpoint \\\n      --src_path `pwd`/exp/cosyvoice/$model/$train_engine  \\\n      --num ${average_num} \\\n      --val_best\n  done\nfi\n\nif [ ${stage} -le 7 ] && [ ${stop_stage} -ge 7 ]; then\n  echo \"Export your model for inference speedup. Remember copy your llm or flow model to model_dir\"\n  python cosyvoice/bin/export_jit.py --model_dir $pretrained_model_dir\n  python cosyvoice/bin/export_onnx.py --model_dir $pretrained_model_dir\nfi"
  },
  {
    "path": "examples/magicdata-read/cosyvoice/local/download_and_untar.sh",
    "content": "#!/bin/bash\n\n# Copyright   2014  Johns Hopkins University (author: Daniel Povey)\n# Apache 2.0\n\nremove_archive=false\n\nif [ \"$1\" == --remove-archive ]; then\n  remove_archive=true\n  shift\nfi\n\nif [ $# -ne 3 ]; then\n  echo \"Usage: $0 [--remove-archive] <data-base> <url-base> <corpus-part>\"\n  echo \"e.g.: $0 /export/a15/vpanayotov/data www.openslr.org/resources/11 dev-clean\"\n  echo \"With --remove-archive it will remove the archive after successfully un-tarring it.\"\n  echo \"<corpus-part> can be one of: dev-clean, test-clean, dev-other, test-other,\"\n  echo \"          train-clean-100, train-clean-360, train-other-500.\"\n  exit 1\nfi\n\ndata=$1\nurl=$2\npart=$3\n\nif [ ! -d \"$data\" ]; then\n  echo \"$0: no such directory $data\"\n  exit 1\nfi\n\npart_ok=false\nlist=\"dev_set test_set train_set\"\nfor x in $list; do\n  if [ \"$part\" == $x ]; then part_ok=true; fi\ndone\nif ! $part_ok; then\n  echo \"$0: expected <corpus-part> to be one of $list, but got '$part'\"\n  exit 1\nfi\n\nif [ -z \"$url\" ]; then\n  echo \"$0: empty URL base.\"\n  exit 1\nfi\n\nif [ -f $data/.$part.complete ]; then\n  echo \"$0: data part $part was already successfully extracted, nothing to do.\"\n  exit 0\nfi\n\n\n# sizes of the archive files in bytes.  This is some older versions.\nsizes_old=\"1035537823 2201936013 52627842921\"\n# sizes_new is the archive file sizes of the final release.  Some of these sizes are of\n# things we probably won't download.\nsizes_new=\"3886385\"\n\nif [ -f $data/$part.tar.gz ]; then\n  size=$(/bin/ls -l $data/$part.tar.gz | awk '{print $5}')\n  size_ok=false\n  for s in $sizes_old $sizes_new; do if [ $s == $size ]; then size_ok=true; fi; done\n  if ! $size_ok; then\n    echo \"$0: removing existing file $data/$part.tar.gz because its size in bytes $size\"\n    echo \"does not equal the size of one of the archives.\"\n    rm $data/$part.tar.gz\n  else\n    echo \"$data/$part.tar.gz exists and appears to be complete.\"\n  fi\nfi\n\nif [ ! -f $data/$part.tar.gz ]; then\n  if ! which wget >/dev/null; then\n    echo \"$0: wget is not installed.\"\n    exit 1\n  fi\n  full_url=$url/$part.tar.gz\n  echo \"$0: downloading data from $full_url.  This may take some time, please be patient.\"\n\n  if ! wget -P $data --no-check-certificate $full_url; then\n    echo \"$0: error executing wget $full_url\"\n    exit 1\n  fi\nfi\n\nif ! tar -C $data -xvzf $data/$part.tar.gz; then\n  echo \"$0: error un-tarring archive $data/$part.tar.gz\"\n  exit 1\nfi\n\ntouch $data/.$part.complete\n\necho \"$0: Successfully downloaded and un-tarred $data/$part.tar.gz\"\n\nif $remove_archive; then\n  echo \"$0: removing $data/$part.tar.gz file since --remove-archive option was supplied.\"\n  rm $data/$part.tar.gz\nfi\n"
  },
  {
    "path": "examples/magicdata-read/cosyvoice/local/prepare_data.py",
    "content": "import argparse\nimport logging\nimport os\nfrom tqdm import tqdm\n\n\nlogger = logging.getLogger()\n\n\ndef main():\n    utt2wav, utt2text, utt2spk, spk2utt = {}, {}, {}, {}\n    with open(os.path.join(args.src_dir, \"TRANS.txt\"), \"r\") as f:\n        lines = f.readlines()[1:]\n        lines = [l.split('\\t') for l in lines]\n    for wav, spk, content in tqdm(lines):\n        wav, spk, content = wav.strip(), spk.strip(), content.strip()\n        content = content.replace('[FIL]', '')\n        content = content.replace('[SPK]', '')\n        wav = os.path.join(args.src_dir, spk, wav)\n        if not os.path.exists(wav):\n            continue\n        utt = os.path.basename(wav).replace('.wav', '')\n        utt2wav[utt] = wav\n        utt2text[utt] = content\n        utt2spk[utt] = spk\n        if spk not in spk2utt:\n            spk2utt[spk] = []\n        spk2utt[spk].append(utt)\n\n    with open('{}/wav.scp'.format(args.des_dir), 'w') as f:\n        for k, v in utt2wav.items():\n            f.write('{} {}\\n'.format(k, v))\n    with open('{}/text'.format(args.des_dir), 'w') as f:\n        for k, v in utt2text.items():\n            f.write('{} {}\\n'.format(k, v))\n    with open('{}/utt2spk'.format(args.des_dir), 'w') as f:\n        for k, v in utt2spk.items():\n            f.write('{} {}\\n'.format(k, v))\n    with open('{}/spk2utt'.format(args.des_dir), 'w') as f:\n        for k, v in spk2utt.items():\n            f.write('{} {}\\n'.format(k, ' '.join(v)))\n    return\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser()\n    parser.add_argument('--src_dir',\n                        type=str)\n    parser.add_argument('--des_dir',\n                        type=str)\n    args = parser.parse_args()\n    main()\n"
  },
  {
    "path": "examples/magicdata-read/cosyvoice/run.sh",
    "content": "#!/bin/bash\n# Copyright 2024 Alibaba Inc. All Rights Reserved.\n. ./path.sh || exit 1;\n\nstage=-1\nstop_stage=3\n\ndata_url=www.openslr.org/resources/68\ndata_dir=/mnt/hengwu.zty/data/tts/openslr/magicdata-read\npretrained_model_dir=../../../pretrained_models/CosyVoice-300M\n\nif [ ${stage} -le -1 ] && [ ${stop_stage} -ge -1 ]; then\n  echo \"Data Download\"\n  for part in dev_set test_set train_set; do\n    local/download_and_untar.sh ${data_dir} ${data_url} ${part}\n  done\nfi\n\nif [ ${stage} -le 0 ] && [ ${stop_stage} -ge 0 ]; then\n  echo \"Data preparation, prepare wav.scp/text/utt2spk/spk2utt\"\n  for x in dev test train; do\n    mkdir -p data/$x\n    python local/prepare_data.py --src_dir $data_dir/$x --des_dir data/$x\n  done\nfi\n\nif [ ${stage} -le 1 ] && [ ${stop_stage} -ge 1 ]; then\n  echo \"Extract campplus speaker embedding, you will get spk2embedding.pt and utt2embedding.pt in data/$x dir\"\n  for x in dev test train; do\n    ../../../tools/extract_embedding.py --dir data/$x \\\n      --onnx_path $pretrained_model_dir/campplus.onnx\n  done\nfi\n\nif [ ${stage} -le 2 ] && [ ${stop_stage} -ge 2 ]; then\n  echo \"Extract discrete speech token, you will get utt2speech_token.pt in data/$x dir\"\n  for x in dev test train; do\n    ../../../tools/extract_speech_token.py --dir data/$x \\\n      --onnx_path $pretrained_model_dir/speech_tokenizer_v1.onnx\n  done\nfi\n\nif [ ${stage} -le 3 ] && [ ${stop_stage} -ge 3 ]; then\n  echo \"Prepare required parquet format data, you should have prepared wav.scp/text/utt2spk/spk2utt/utt2embedding.pt/spk2embedding.pt/utt2speech_token.pt\"\n  for x in dev test train; do\n    mkdir -p data/$x/parquet\n    ../../../tools/make_parquet_list.py --num_utts_per_parquet 1000 \\\n      --num_processes 10 \\\n      --src_dir data/$x \\\n      --des_dir data/$x/parquet\n  done\nfi\n\n# train llm\nexport CUDA_VISIBLE_DEVICES=\"0,1,2,3\"\nnum_gpus=$(echo $CUDA_VISIBLE_DEVICES | awk -F \",\" '{print NF}')\njob_id=1986\ndist_backend=\"nccl\"\nnum_workers=2\nprefetch=100\ntrain_engine=torch_ddp\nif [ ${stage} -le 5 ] && [ ${stop_stage} -ge 5 ]; then\n  echo \"Run train. We only support llm traning for now. If your want to train from scratch, please use conf/cosyvoice.fromscratch.yaml\"\n  if [ $train_engine == 'deepspeed' ]; then\n    echo \"Notice deepspeed has its own optimizer config. Modify conf/ds_stage2.json if necessary\"\n  fi\n  cp data/train/parquet/data.list data/train.data.list\n  cp data/dev/parquet/data.list data/dev.data.list\n  for model in llm flow hifigan; do\n    torchrun --nnodes=1 --nproc_per_node=$num_gpus \\\n        --rdzv_id=$job_id --rdzv_backend=\"c10d\" --rdzv_endpoint=\"localhost:0\" \\\n      ../../../cosyvoice/bin/train.py \\\n      --train_engine $train_engine \\\n      --config conf/cosyvoice.yaml \\\n      --train_data data/train.data.list \\\n      --cv_data data/dev.data.list \\\n      --model $model \\\n      --checkpoint $pretrained_model_dir/$model.pt \\\n      --model_dir `pwd`/exp/cosyvoice/$model/$train_engine \\\n      --tensorboard_dir `pwd`/tensorboard/cosyvoice/$model/$train_engine \\\n      --ddp.dist_backend $dist_backend \\\n      --num_workers ${num_workers} \\\n      --prefetch ${prefetch} \\\n      --pin_memory \\\n      --use_amp \\\n      --deepspeed_config ./conf/ds_stage2.json \\\n      --deepspeed.save_states model+optimizer\n  done\nfi\n\n# average model\naverage_num=5\nif [ ${stage} -le 6 ] && [ ${stop_stage} -ge 6 ]; then\n  for model in llm flow hifigan; do\n    decode_checkpoint=`pwd`/exp/cosyvoice/$model/$train_engine/${model}.pt\n    echo \"do model average and final checkpoint is $decode_checkpoint\"\n    python cosyvoice/bin/average_model.py \\\n      --dst_model $decode_checkpoint \\\n      --src_path `pwd`/exp/cosyvoice/$model/$train_engine  \\\n      --num ${average_num} \\\n      --val_best\n  done\nfi\n\nif [ ${stage} -le 6 ] && [ ${stop_stage} -ge 6 ]; then\n  echo \"Export your model for inference speedup. Remember copy your llm or flow model to model_dir\"\n  python cosyvoice/bin/export_jit.py --model_dir $pretrained_model_dir\n  python cosyvoice/bin/export_onnx.py --model_dir $pretrained_model_dir\nfi"
  },
  {
    "path": "examples/magicdata-read/cosyvoice/tts_text.json",
    "content": "{\n  \"38_5718_20170915093303\": [\n    \"我想这出最好歌曲把歌词发到网上请别人帮我作曲急急\",\n    \"叫他明天早上差五分儿九点去机场\"\n  ],\n  \"38_5721_20170915091235\": [\n    \"变温室调到零下两度档\",\n    \"交谈中请勿轻信汇款信息陌生电话请勿使用外挂软件\"\n  ],\n  \"38_5733_20170915130323\": [\n    \"这是老鹰乐队的一首经典歌曲\",\n    \"我急用这段音乐我自己找到一段但是有现场杂音\"\n  ],\n  \"38_5836_20170916221414\": [\n    \"给我播一个陶喆的专辑\",\n    \"这套餐好贵呀我发这么多短信贵死了\"\n  ]\n}"
  },
  {
    "path": "requirements.txt",
    "content": "--extra-index-url https://download.pytorch.org/whl/cu121\n--extra-index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/onnxruntime-cuda-12/pypi/simple/ # https://github.com/microsoft/onnxruntime/issues/21684\nconformer==0.3.2\ndeepspeed==0.15.1; sys_platform == 'linux'\ndiffusers==0.29.0\nfastapi==0.115.6\nfastapi-cli==0.0.4\ngdown==5.1.0\ngradio==5.4.0\ngrpcio==1.57.0\ngrpcio-tools==1.57.0\nhydra-core==1.3.2\nHyperPyYAML==1.2.3\ninflect==7.3.1\nlibrosa==0.10.2\nlightning==2.2.4\nmatplotlib==3.7.5\nmodelscope==1.20.0\nnetworkx==3.1\nnumpy==1.26.4\nomegaconf==2.3.0\nonnx==1.16.0\nonnxruntime-gpu==1.18.0; sys_platform == 'linux'\nonnxruntime==1.18.0; sys_platform == 'darwin' or sys_platform == 'win32'\nopenai-whisper==20231117\nprotobuf==4.25\npyarrow==18.1.0\npydantic==2.7.0\npyworld==0.3.4\nrich==13.7.1\nsoundfile==0.12.1\ntensorboard==2.14.0\ntensorrt-cu12==10.13.3.9; sys_platform == 'linux'\ntensorrt-cu12-bindings==10.13.3.9; sys_platform == 'linux'\ntensorrt-cu12-libs==10.13.3.9; sys_platform == 'linux'\ntorch==2.3.1\ntorchaudio==2.3.1\ntransformers==4.51.3\nx-transformers==2.11.24\nuvicorn==0.30.0\nwetext==0.0.4\nwget==3.2\n"
  },
  {
    "path": "runtime/python/Dockerfile",
    "content": "FROM pytorch/pytorch:2.0.1-cuda11.7-cudnn8-runtime\nENV DEBIAN_FRONTEND=noninteractive\n\nWORKDIR /opt/CosyVoice\n\nRUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list\nRUN apt-get update -y\nRUN apt-get -y install git unzip git-lfs g++\nRUN git lfs install\nRUN git clone --recursive https://github.com/FunAudioLLM/CosyVoice.git\n# here we use python==3.10 because we cannot find an image which have both python3.8 and torch2.0.1-cu118 installed\nRUN cd CosyVoice && pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com --no-cache-dir\nRUN cd CosyVoice/runtime/python/grpc && python3 -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. cosyvoice.proto"
  },
  {
    "path": "runtime/python/fastapi/client.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu)\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.\nimport argparse\nimport logging\nimport requests\nimport torch\nimport torchaudio\nimport numpy as np\n\n\ndef main():\n    url = \"http://{}:{}/inference_{}\".format(args.host, args.port, args.mode)\n    if args.mode == 'sft':\n        payload = {\n            'tts_text': args.tts_text,\n            'spk_id': args.spk_id\n        }\n        response = requests.request(\"GET\", url, data=payload, stream=True)\n    elif args.mode == 'zero_shot':\n        payload = {\n            'tts_text': args.tts_text,\n            'prompt_text': args.prompt_text\n        }\n        files = [('prompt_wav', ('prompt_wav', open(args.prompt_wav, 'rb'), 'application/octet-stream'))]\n        response = requests.request(\"GET\", url, data=payload, files=files, stream=True)\n    elif args.mode == 'cross_lingual':\n        payload = {\n            'tts_text': args.tts_text,\n        }\n        files = [('prompt_wav', ('prompt_wav', open(args.prompt_wav, 'rb'), 'application/octet-stream'))]\n        response = requests.request(\"GET\", url, data=payload, files=files, stream=True)\n    else:\n        payload = {\n            'tts_text': args.tts_text,\n            'spk_id': args.spk_id,\n            'instruct_text': args.instruct_text\n        }\n        response = requests.request(\"GET\", url, data=payload, stream=True)\n    tts_audio = b''\n    for r in response.iter_content(chunk_size=16000):\n        tts_audio += r\n    tts_speech = torch.from_numpy(np.array(np.frombuffer(tts_audio, dtype=np.int16))).unsqueeze(dim=0)\n    logging.info('save response to {}'.format(args.tts_wav))\n    torchaudio.save(args.tts_wav, tts_speech, target_sr)\n    logging.info('get response')\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser()\n    parser.add_argument('--host',\n                        type=str,\n                        default='0.0.0.0')\n    parser.add_argument('--port',\n                        type=int,\n                        default='50000')\n    parser.add_argument('--mode',\n                        default='sft',\n                        choices=['sft', 'zero_shot', 'cross_lingual', 'instruct'],\n                        help='request mode')\n    parser.add_argument('--tts_text',\n                        type=str,\n                        default='你好，我是通义千问语音合成大模型，请问有什么可以帮您的吗？')\n    parser.add_argument('--spk_id',\n                        type=str,\n                        default='中文女')\n    parser.add_argument('--prompt_text',\n                        type=str,\n                        default='希望你以后能够做的比我还好呦。')\n    parser.add_argument('--prompt_wav',\n                        type=str,\n                        default='../../../asset/zero_shot_prompt.wav')\n    parser.add_argument('--instruct_text',\n                        type=str,\n                        default='Theo \\'Crimson\\', is a fiery, passionate rebel leader. \\\n                                 Fights with fervor for justice, but struggles with impulsiveness.')\n    parser.add_argument('--tts_wav',\n                        type=str,\n                        default='demo.wav')\n    args = parser.parse_args()\n    prompt_sr, target_sr = 16000, 22050\n    main()\n"
  },
  {
    "path": "runtime/python/fastapi/server.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu)\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.\nimport os\nimport sys\nimport argparse\nimport logging\nlogging.getLogger('matplotlib').setLevel(logging.WARNING)\nfrom fastapi import FastAPI, UploadFile, Form, File\nfrom fastapi.responses import StreamingResponse\nfrom fastapi.middleware.cors import CORSMiddleware\nimport uvicorn\nimport numpy as np\nROOT_DIR = os.path.dirname(os.path.abspath(__file__))\nsys.path.append('{}/../../..'.format(ROOT_DIR))\nsys.path.append('{}/../../../third_party/Matcha-TTS'.format(ROOT_DIR))\nfrom cosyvoice.cli.cosyvoice import AutoModel\nfrom cosyvoice.utils.file_utils import load_wav\n\napp = FastAPI()\n# set cross region allowance\napp.add_middleware(\n    CORSMiddleware,\n    allow_origins=[\"*\"],\n    allow_credentials=True,\n    allow_methods=[\"*\"],\n    allow_headers=[\"*\"])\n\n\ndef generate_data(model_output):\n    for i in model_output:\n        tts_audio = (i['tts_speech'].numpy() * (2 ** 15)).astype(np.int16).tobytes()\n        yield tts_audio\n\n\n@app.get(\"/inference_sft\")\n@app.post(\"/inference_sft\")\nasync def inference_sft(tts_text: str = Form(), spk_id: str = Form()):\n    model_output = cosyvoice.inference_sft(tts_text, spk_id)\n    return StreamingResponse(generate_data(model_output))\n\n\n@app.get(\"/inference_zero_shot\")\n@app.post(\"/inference_zero_shot\")\nasync def inference_zero_shot(tts_text: str = Form(), prompt_text: str = Form(), prompt_wav: UploadFile = File()):\n    prompt_speech_16k = load_wav(prompt_wav.file, 16000)\n    model_output = cosyvoice.inference_zero_shot(tts_text, prompt_text, prompt_speech_16k)\n    return StreamingResponse(generate_data(model_output))\n\n\n@app.get(\"/inference_cross_lingual\")\n@app.post(\"/inference_cross_lingual\")\nasync def inference_cross_lingual(tts_text: str = Form(), prompt_wav: UploadFile = File()):\n    prompt_speech_16k = load_wav(prompt_wav.file, 16000)\n    model_output = cosyvoice.inference_cross_lingual(tts_text, prompt_speech_16k)\n    return StreamingResponse(generate_data(model_output))\n\n\n@app.get(\"/inference_instruct\")\n@app.post(\"/inference_instruct\")\nasync def inference_instruct(tts_text: str = Form(), spk_id: str = Form(), instruct_text: str = Form()):\n    model_output = cosyvoice.inference_instruct(tts_text, spk_id, instruct_text)\n    return StreamingResponse(generate_data(model_output))\n\n\n@app.get(\"/inference_instruct2\")\n@app.post(\"/inference_instruct2\")\nasync def inference_instruct2(tts_text: str = Form(), instruct_text: str = Form(), prompt_wav: UploadFile = File()):\n    prompt_speech_16k = load_wav(prompt_wav.file, 16000)\n    model_output = cosyvoice.inference_instruct2(tts_text, instruct_text, prompt_speech_16k)\n    return StreamingResponse(generate_data(model_output))\n\n\nif __name__ == '__main__':\n    parser = argparse.ArgumentParser()\n    parser.add_argument('--port',\n                        type=int,\n                        default=50000)\n    parser.add_argument('--model_dir',\n                        type=str,\n                        default='iic/CosyVoice2-0.5B',\n                        help='local path or modelscope repo id')\n    args = parser.parse_args()\n    cosyvoice = AutoModel(model_dir=args.model_dir)\n    uvicorn.run(app, host=\"0.0.0.0\", port=args.port)\n"
  },
  {
    "path": "runtime/python/grpc/client.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu)\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.\nimport os\nimport sys\nROOT_DIR = os.path.dirname(os.path.abspath(__file__))\nsys.path.append('{}/../../..'.format(ROOT_DIR))\nsys.path.append('{}/../../../third_party/Matcha-TTS'.format(ROOT_DIR))\nimport logging\nimport argparse\nimport torchaudio\nimport cosyvoice_pb2\nimport cosyvoice_pb2_grpc\nimport grpc\nimport torch\nimport numpy as np\nfrom cosyvoice.utils.file_utils import load_wav\n\n\ndef main():\n    with grpc.insecure_channel(\"{}:{}\".format(args.host, args.port)) as channel:\n        stub = cosyvoice_pb2_grpc.CosyVoiceStub(channel)\n        request = cosyvoice_pb2.Request()\n        if args.mode == 'sft':\n            logging.info('send sft request')\n            sft_request = cosyvoice_pb2.sftRequest()\n            sft_request.spk_id = args.spk_id\n            sft_request.tts_text = args.tts_text\n            request.sft_request.CopyFrom(sft_request)\n        elif args.mode == 'zero_shot':\n            logging.info('send zero_shot request')\n            zero_shot_request = cosyvoice_pb2.zeroshotRequest()\n            zero_shot_request.tts_text = args.tts_text\n            zero_shot_request.prompt_text = args.prompt_text\n            prompt_speech = load_wav(args.prompt_wav, 16000)\n            zero_shot_request.prompt_audio = (prompt_speech.numpy() * (2**15)).astype(np.int16).tobytes()\n            request.zero_shot_request.CopyFrom(zero_shot_request)\n        elif args.mode == 'cross_lingual':\n            logging.info('send cross_lingual request')\n            cross_lingual_request = cosyvoice_pb2.crosslingualRequest()\n            cross_lingual_request.tts_text = args.tts_text\n            prompt_speech = load_wav(args.prompt_wav, 16000)\n            cross_lingual_request.prompt_audio = (prompt_speech.numpy() * (2**15)).astype(np.int16).tobytes()\n            request.cross_lingual_request.CopyFrom(cross_lingual_request)\n        else:\n            logging.info('send instruct request')\n            instruct_request = cosyvoice_pb2.instructRequest()\n            instruct_request.tts_text = args.tts_text\n            instruct_request.spk_id = args.spk_id\n            instruct_request.instruct_text = args.instruct_text\n            request.instruct_request.CopyFrom(instruct_request)\n\n        response = stub.Inference(request)\n        tts_audio = b''\n        for r in response:\n            tts_audio += r.tts_audio\n        tts_speech = torch.from_numpy(np.array(np.frombuffer(tts_audio, dtype=np.int16))).unsqueeze(dim=0)\n        logging.info('save response to {}'.format(args.tts_wav))\n        torchaudio.save(args.tts_wav, tts_speech, target_sr)\n        logging.info('get response')\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser()\n    parser.add_argument('--host',\n                        type=str,\n                        default='0.0.0.0')\n    parser.add_argument('--port',\n                        type=int,\n                        default='50000')\n    parser.add_argument('--mode',\n                        default='sft',\n                        choices=['sft', 'zero_shot', 'cross_lingual', 'instruct'],\n                        help='request mode')\n    parser.add_argument('--tts_text',\n                        type=str,\n                        default='你好，我是通义千问语音合成大模型，请问有什么可以帮您的吗？')\n    parser.add_argument('--spk_id',\n                        type=str,\n                        default='中文女')\n    parser.add_argument('--prompt_text',\n                        type=str,\n                        default='希望你以后能够做的比我还好呦。')\n    parser.add_argument('--prompt_wav',\n                        type=str,\n                        default='../../../asset/zero_shot_prompt.wav')\n    parser.add_argument('--instruct_text',\n                        type=str,\n                        default='Theo \\'Crimson\\', is a fiery, passionate rebel leader. \\\n                                 Fights with fervor for justice, but struggles with impulsiveness.')\n    parser.add_argument('--tts_wav',\n                        type=str,\n                        default='demo.wav')\n    args = parser.parse_args()\n    prompt_sr, target_sr = 16000, 22050\n    main()\n"
  },
  {
    "path": "runtime/python/grpc/cosyvoice.proto",
    "content": "syntax = \"proto3\";\n\npackage cosyvoice;\noption go_package = \"protos/\";\n\nservice CosyVoice{\n  rpc Inference(Request) returns (stream Response) {}\n}\n\nmessage Request{\n  oneof RequestPayload {\n    sftRequest sft_request = 1;\n    zeroshotRequest zero_shot_request = 2;\n    crosslingualRequest cross_lingual_request = 3;\n    instructRequest instruct_request = 4;\n  }\n}\n\nmessage sftRequest{\n  string spk_id = 1;\n  string tts_text = 2;\n}\n\nmessage zeroshotRequest{\n  string tts_text = 1;\n  string prompt_text = 2;\n  bytes prompt_audio = 3;\n}\n\nmessage crosslingualRequest{\n  string tts_text = 1;\n  bytes prompt_audio = 2;\n}\n\nmessage instructRequest{\n  string tts_text = 1;\n  string spk_id = 2;\n  string instruct_text = 3;\n}\n\nmessage Response{\n  bytes tts_audio = 1;\n}"
  },
  {
    "path": "runtime/python/grpc/server.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu)\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.\nimport os\nimport sys\nfrom concurrent import futures\nimport argparse\nimport cosyvoice_pb2\nimport cosyvoice_pb2_grpc\nimport logging\nlogging.getLogger('matplotlib').setLevel(logging.WARNING)\nimport grpc\nimport torch\nimport numpy as np\nROOT_DIR = os.path.dirname(os.path.abspath(__file__))\nsys.path.append('{}/../../..'.format(ROOT_DIR))\nsys.path.append('{}/../../../third_party/Matcha-TTS'.format(ROOT_DIR))\nfrom cosyvoice.cli.cosyvoice import AutoModel\n\nlogging.basicConfig(level=logging.DEBUG,\n                    format='%(asctime)s %(levelname)s %(message)s')\n\n\nclass CosyVoiceServiceImpl(cosyvoice_pb2_grpc.CosyVoiceServicer):\n    def __init__(self, args):\n        self.cosyvoice = AutoModel(model_dir=args.model_dir)\n        logging.info('grpc service initialized')\n\n    def Inference(self, request, context):\n        if request.HasField('sft_request'):\n            logging.info('get sft inference request')\n            model_output = self.cosyvoice.inference_sft(request.sft_request.tts_text, request.sft_request.spk_id)\n        elif request.HasField('zero_shot_request'):\n            logging.info('get zero_shot inference request')\n            prompt_speech_16k = torch.from_numpy(np.array(np.frombuffer(request.zero_shot_request.prompt_audio, dtype=np.int16))).unsqueeze(dim=0)\n            prompt_speech_16k = prompt_speech_16k.float() / (2**15)\n            model_output = self.cosyvoice.inference_zero_shot(request.zero_shot_request.tts_text,\n                                                              request.zero_shot_request.prompt_text,\n                                                              prompt_speech_16k)\n        elif request.HasField('cross_lingual_request'):\n            logging.info('get cross_lingual inference request')\n            prompt_speech_16k = torch.from_numpy(np.array(np.frombuffer(request.cross_lingual_request.prompt_audio, dtype=np.int16))).unsqueeze(dim=0)\n            prompt_speech_16k = prompt_speech_16k.float() / (2**15)\n            model_output = self.cosyvoice.inference_cross_lingual(request.cross_lingual_request.tts_text, prompt_speech_16k)\n        else:\n            logging.info('get instruct inference request')\n            model_output = self.cosyvoice.inference_instruct(request.instruct_request.tts_text,\n                                                             request.instruct_request.spk_id,\n                                                             request.instruct_request.instruct_text)\n\n        logging.info('send inference response')\n        for i in model_output:\n            response = cosyvoice_pb2.Response()\n            response.tts_audio = (i['tts_speech'].numpy() * (2 ** 15)).astype(np.int16).tobytes()\n            yield response\n\n\ndef main():\n    grpcServer = grpc.server(futures.ThreadPoolExecutor(max_workers=args.max_conc), maximum_concurrent_rpcs=args.max_conc)\n    cosyvoice_pb2_grpc.add_CosyVoiceServicer_to_server(CosyVoiceServiceImpl(args), grpcServer)\n    grpcServer.add_insecure_port('0.0.0.0:{}'.format(args.port))\n    grpcServer.start()\n    logging.info(\"server listening on 0.0.0.0:{}\".format(args.port))\n    grpcServer.wait_for_termination()\n\n\nif __name__ == '__main__':\n    parser = argparse.ArgumentParser()\n    parser.add_argument('--port',\n                        type=int,\n                        default=50000)\n    parser.add_argument('--max_conc',\n                        type=int,\n                        default=4)\n    parser.add_argument('--model_dir',\n                        type=str,\n                        default='iic/CosyVoice2-0.5B',\n                        help='local path or modelscope repo id')\n    args = parser.parse_args()\n    main()\n"
  },
  {
    "path": "runtime/triton_trtllm/Dockerfile.server",
    "content": "FROM nvcr.io/nvidia/tritonserver:25.06-trtllm-python-py3\nLABEL maintainer=\"zhangyuekai@foxmail.com\"\n\nRUN apt-get update && apt-get install -y cmake\nRUN git clone https://github.com/pytorch/audio.git && cd audio && git checkout c670ad8 && PATH=/usr/local/cuda/bin:$PATH python3 setup.py develop\nCOPY ./requirements.txt /workspace/requirements.txt\nRUN pip install -r /workspace/requirements.txt\nWORKDIR /workspace"
  },
  {
    "path": "runtime/triton_trtllm/README.Cosyvoice2.DiT.md",
    "content": "## Accelerating CosyVoice with DiT-based Token2Wav, NVIDIA Triton Inference Server and TensorRT-LLM\n\nContributed by Yuekai Zhang (NVIDIA).\n\nThis document describes how to accelerate CosyVoice with a DiT-based Token2Wav module from Step-Audio2, using NVIDIA Triton Inference Server and TensorRT-LLM.\n\n### Quick Start\n\nLaunch the service directly with Docker Compose:\n```sh\ndocker compose -f docker-compose.cosyvoice2.dit.yml up\n```\n\n### Build the Docker Image\n\nTo build the image from scratch:\n```sh\ndocker build . -f Dockerfile.server -t soar97/triton-cosyvoice:25.06\n```\n\n### Run a Docker Container\n```sh\nyour_mount_dir=/mnt:/mnt\ndocker run -it --name \"cosyvoice-server\" --gpus all --net host -v $your_mount_dir --shm-size=2g soar97/triton-cosyvoice:25.06\n```\n\n### Understanding `run_stepaudio2_dit_token2wav.sh`\n\nThe `run_stepaudio2_dit_token2wav.sh` script orchestrates the entire workflow through numbered stages.\n\nYou can run a subset of stages with:\n```sh\nbash run_stepaudio2_dit_token2wav.sh <start_stage> <stop_stage>\n```\n- `<start_stage>`: The stage to start from.\n- `<stop_stage>`: The stage to stop after.\n\n**Stages:**\n\n- **Stage -1**: Clones the `Step-Audio2` and `CosyVoice` repositories.\n- **Stage 0**: Downloads the `cosyvoice2_llm`, `CosyVoice2-0.5B`, and `Step-Audio-2-mini` models.\n- **Stage 1**: Converts the HuggingFace checkpoint for the LLM to the TensorRT-LLM format and builds the TensorRT engines.\n- **Stage 2**: Creates the Triton model repository, including configurations for `cosyvoice2_dit` and `token2wav_dit`.\n- **Stage 3**: Launches the Triton Inference Server for Token2Wav module and uses `trtllm-serve` to deploy Cosyvoice2 LLM.\n- **Stage 4**: Runs the gRPC benchmark client for performance testing.\n- **Stage 5**: Runs the offline TTS inference benchmark test.\n- **Stage 6**: Runs a standalone inference script for the Step-Audio2-mini DiT Token2Wav model.\n- **Stage 7**: Launches servers in a disaggregated setup, with the LLM on GPU 0 and Token2Wav servers on GPUs 1-3.\n- **Stage 8**: Runs the benchmark client for the disaggregated server configuration.\n### Export Models and Launch Server\n\nInside the Docker container, prepare the models and start the Triton server by running stages 0-3:\n```sh\n# This command runs stages 0, 1, 2, and 3\nbash run_stepaudio2_dit_token2wav.sh 0 3\n```\n\n### Benchmark with client-server mode\n\nTo benchmark the running Triton server, run stage 4:\n```sh\nbash run_stepaudio2_dit_token2wav.sh 4 4\n\n# You can customize parameters such as the number of tasks inside the script.\n```\nThe following results were obtained by decoding on a single L20 GPU with the `yuekai/seed_tts_cosy2` dataset.\n\n#### Total Request Latency\n\n| Concurrent Tasks | RTF    | Average (ms) | 50th Percentile (ms) | 90th Percentile (ms) | 95th Percentile (ms) | 99th Percentile (ms) |\n| ---------------- | ------ | ------------ | -------------------- | -------------------- | -------------------- | -------------------- |\n| 1                | 0.1228 | 833.66       | 779.98               | 1297.05              | 1555.97              | 1653.02              |\n| 2                | 0.0901 | 1166.23      | 1124.69              | 1762.76              | 1900.64              | 2204.14              |\n| 4                | 0.0741 | 1849.30      | 1759.42              | 2624.50              | 2822.20              | 3128.42              |\n| 6                | 0.0774 | 2936.13      | 3054.64              | 3849.60              | 3900.49              | 4245.79              |\n| 8                | 0.0691 | 3408.56      | 3434.98              | 4547.13              | 5047.76              | 5346.53              |\n| 10               | 0.0707 | 4306.56      | 4343.44              | 5769.64              | 5876.09              | 5939.79              |\n\n#### First Chunk Latency\n\n| Concurrent Tasks | Average (ms) | 50th Percentile (ms) | 90th Percentile (ms) | 95th Percentile (ms) | 99th Percentile (ms) |\n| ---------------- | ------------ | -------------------- | -------------------- | -------------------- | -------------------- |\n| 1                | 197.50       | 196.13               | 214.65               | 215.96               | 229.21               |\n| 2                |  281.15       | 278.20               | 345.18               | 361.79               | 395.97               |\n| 4                |  510.65       | 530.50               | 630.13               | 642.44               | 666.65               |\n| 6                |  921.54       | 918.86               | 1079.97              | 1265.22              | 1524.41              |\n| 8                |  1019.95      | 1085.26              | 1371.05              | 1402.24              | 1410.66              |\n| 10               |  1214.98      | 1293.54              | 1575.36              | 1654.51              | 2161.76              |\n\n### Benchmark with offline inference mode\nFor offline inference mode benchmark, please run stage 5:\n```sh\nbash run_stepaudio2_dit_token2wav.sh 5 5\n```\n\nThe following results were obtained by decoding on a single L20 GPU with the `yuekai/seed_tts_cosy2` dataset.\n\n#### Offline TTS (Cosyvoice2 0.5B LLM + StepAudio2 DiT Token2Wav)\n| Backend | Batch Size | llm_time_seconds  | total_time_seconds | RTF |\n|---------|------------|------------------|-----------------------|--|\n| TRTLLM | 16 | 2.01 |  5.03 | 0.0292 |\n\n\n### Disaggregated Server\nWhen the LLM and token2wav components are deployed on the same GPU, they compete for resources. To optimize performance, we use a disaggregated setup where the LLM is deployed on one dedicated L20 GPU, taking advantage of in-flight batching for inference. The token2wav module is deployed on separate, dedicated GPUs.\n\nThe table below shows the first chunk latency results for this configuration. In our tests, we deploy two token2wav instances on each dedicated token2wav GPU.\n\n| token2wav_num_gpu | concurrent_task_per_instance | concurrent_tasks_per_gpu | avg (ms) | p50 (ms) | p90 (ms) | p99 (ms) |\n|---|---|---|---|---|---|---|\n| 1 | 1 | 1.00 | 218.53 | 217.86 | 254.07 | 296.49 |\n| 2 | 1 | 1.33 | 218.82 | 219.21 | 256.62 | 303.13 |\n| 3 | 1 | 1.50 | 229.08 | 223.27 | 302.13 | 324.41 |\n| 4 | 1 | 1.60 | 203.87 | 198.23 | 254.92 | 279.31 |\n| 1 | 2 | 2.00 | 293.46 | 280.53 | 370.81 | 407.40 |\n| 2 | 2 | 2.67 | 263.38 | 236.84 | 350.82 | 397.39 |\n| 3 | 2 | 3.00 | 308.09 | 275.48 | 385.22 | 521.45 |\n| 4 | 2 | 3.20 | 271.85 | 253.25 | 359.03 | 387.91 |\n| 1 | 3 | 3.00 | 389.15 | 373.01 | 469.22 | 542.89 |\n| 2 | 3 | 4.00 | 403.48 | 394.80 | 481.24 | 507.75 |\n| 3 | 3 | 4.50 | 406.33 | 391.28 | 495.43 | 571.29 |\n| 4 | 3 | 4.80 | 436.72 | 383.81 | 638.44 | 879.23 |\n| 1 | 4 | 4.00 | 520.12 | 493.98 | 610.38 | 739.85 |\n| 2 | 4 | 5.33 | 494.60 | 490.50 | 605.93 | 708.09 |\n| 3 | 4 | 6.00 | 538.23 | 508.33 | 687.62 | 736.96 |\n| 4 | 4 | 6.40 | 579.68 | 546.20 | 721.53 | 958.04 |\n| 1 | 5 | 5.00 | 635.02 | 623.30 | 786.85 | 819.84 |\n| 2 | 5 | 6.67 | 598.23 | 617.09 | 741.00 | 788.96 |\n| 3 | 5 | 7.50 | 644.78 | 684.40 | 786.45 | 1009.45 |\n| 4 | 5 | 8.00 | 733.92 | 642.26 | 1024.79 | 1281.55 |\n| 1 | 6 | 6.00 | 715.38 | 745.68 | 887.04 | 906.68 |\n| 2 | 6 | 8.00 | 748.31 | 753.94 | 873.59 | 1007.14 |\n| 3 | 6 | 9.00 | 900.27 | 822.28 | 1431.14 | 1800.23 |\n| 4 | 6 | 9.60 | 857.54 | 820.33 | 1150.30 | 1298.53 |\n\nThe `concurrent_task_per_gpu` is calculated as:\n`concurrent_task_per_gpu = concurrent_task_per_instance * num_token2wav_instance_per_gpu (2) * token2wav_gpus / (token2wav_gpus + llm_gpus (1))`\n\n### Acknowledgements\n\nThis work originates from the NVIDIA CISI project. For more multimodal resources, please see [mair-hub](https://github.com/nvidia-china-sae/mair-hub).\n"
  },
  {
    "path": "runtime/triton_trtllm/README.Cosyvoice2.Unet.md",
    "content": "## Accelerating CosyVoice with NVIDIA Triton Inference Server and TensorRT-LLM\n\nContributed by Yuekai Zhang (NVIDIA).\n\n### Quick Start\n\nLaunch the service directly with Docker Compose:\n```sh\ndocker compose -f docker-compose.cosyvoice2.unet.yml up\n```\n\n### Build the Docker Image\n\nTo build the image from scratch:\n```sh\ndocker build . -f Dockerfile.server -t soar97/triton-cosyvoice:25.06\n```\n\n### Run a Docker Container\n```sh\nyour_mount_dir=/mnt:/mnt\ndocker run -it --name \"cosyvoice-server\" --gpus all --net host -v $your_mount_dir --shm-size=2g soar97/triton-cosyvoice:25.06\n```\n\n### Understanding `run.sh`\n\nThe `run.sh` script orchestrates the entire workflow through numbered stages.\n\nYou can run a subset of stages with:\n```sh\nbash run.sh <start_stage> <stop_stage> [service_type]\n```\n- `<start_stage>`: The stage to start from (0-5).\n- `<stop_stage>`: The stage to stop after (0-5).\n\n**Stages:**\n\n- **Stage 0**: Downloads the `cosyvoice-2 0.5B` model from HuggingFace.\n- **Stage 1**: Converts the HuggingFace checkpoint to the TensorRT-LLM format and builds the TensorRT engines.\n- **Stage 2**: Creates the Triton model repository and configures the model files. The configuration is adjusted based on whether `Decoupled=True` (streaming) or `Decoupled=False` (offline) will be used.\n- **Stage 3**: Launches the Triton Inference Server.\n- **Stage 4**: Runs the single-utterance HTTP client for testing.\n- **Stage 5**: Runs the gRPC benchmark client.\n- **Stage 6**: Runs the offline inference benchmark test.\n\n### Export Models and Launch Server\n\nInside the Docker container, prepare the models and start the Triton server by running stages 0-3:\n```sh\n# This command runs stages 0, 1, 2, and 3\nbash run.sh 0 3\n```\n> [!TIP]\n> Both streaming and offline (non-streaming) TTS modes are supported. For streaming TTS, set `Decoupled=True`. For offline TTS, set `Decoupled=False`. You need to rerun stage 2 if you switch between modes.\n\n### Single-Utterance HTTP Client\n\nSends a single HTTP inference request. This is intended for testing the offline TTS mode (`Decoupled=False`):\n```sh\nbash run.sh 4 4\n```\n\n### Benchmark with client-server mode\n\nTo benchmark the running Triton server, pass `streaming` or `offline` as the third argument:\n```sh\nbash run.sh 5 5 # [streaming|offline]\n\n# You can also customize parameters such as the number of tasks and the dataset split:\n# python3 client_grpc.py --num-tasks 2 --huggingface-dataset yuekai/seed_tts_cosy2 --split-name test_zh --mode [streaming|offline]\n```\n> [!TIP]\n> It is recommended to run the benchmark multiple times to get stable results after the initial server warm-up.\n\n### Benchmark with offline inference mode\nFor offline inference mode benchmark, please check the below command:\n```sh\n# install FlashCosyVoice for token2wav batching\n# git clone https://github.com/yuekaizhang/FlashCosyVoice.git /workspace/FlashCosyVoice -b trt\n# cd /workspace/FlashCosyVoice\n# pip install -e .\n# cd -\n# wget https://huggingface.co/yuekai/cosyvoice2_flow_onnx/resolve/main/flow.decoder.estimator.fp32.dynamic_batch.onnx -O $model_scope_model_local_dir/flow.decoder.estimator.fp32.dynamic_batch.onnx\n\nbash run.sh 6 6\n\n# You can also switch to huggingface backend by setting backend=hf\n```\n\n\n### Benchmark Results\nThe following results were obtained by decoding on a single L20 GPU with 26 prompt audio/target text pairs from the [yuekai/seed_tts](https://huggingface.co/datasets/yuekai/seed_tts) dataset (approximately 170 seconds of audio):\n\n**Client-Server Mode: Streaming TTS (First Chunk Latency)**\n| Mode | Concurrency | Avg Latency (ms) | P50 Latency (ms) | RTF |\n|---|---|---|---|---|\n| Streaming, use_spk2info_cache=False | 1 | 220.43 | 218.07 | 0.1237 |\n| Streaming, use_spk2info_cache=False | 2 | 476.97 | 369.25 | 0.1022 |\n| Streaming, use_spk2info_cache=False | 4 | 1107.34 | 1243.75| 0.0922 |\n| Streaming, use_spk2info_cache=True | 1 | 189.88 | 184.81 | 0.1155 |\n| Streaming, use_spk2info_cache=True | 2 | 323.04 | 316.83 | 0.0905 |\n| Streaming, use_spk2info_cache=True | 4 | 977.68 | 903.68| 0.0733 |\n\n> If your service only needs a fixed speaker, you can set `use_spk2info_cache=True` in `run.sh`. To add more speakers, refer to the instructions [here](https://github.com/qi-hua/async_cosyvoice?tab=readme-ov-file#9-spk2info-%E8%AF%B4%E6%98%8E).\n\n**Client-Server Mode: Offline TTS (Full Sentence Latency)**\n| Mode | Note | Concurrency | Avg Latency (ms) | P50 Latency (ms) | RTF |\n|---|---|---|---|---|---|\n| Offline, Decoupled=False, use_spk2info_cache=False | [Commit](https://github.com/yuekaizhang/CosyVoice/commit/b44f12110224cb11c03aee4084b1597e7b9331cb) | 1 | 758.04 | 615.79 | 0.0891 |\n| Offline, Decoupled=False, use_spk2info_cache=False | [Commit](https://github.com/yuekaizhang/CosyVoice/commit/b44f12110224cb11c03aee4084b1597e7b9331cb) | 2 | 1025.93 | 901.68 | 0.0657 |\n| Offline, Decoupled=False, use_spk2info_cache=False | [Commit](https://github.com/yuekaizhang/CosyVoice/commit/b44f12110224cb11c03aee4084b1597e7b9331cb) | 4 | 1914.13 | 1783.58 | 0.0610 |\n\n**Offline Inference Mode: Hugginface LLM V.S. TensorRT-LLM**\n| Backend | Batch Size | llm_time_seconds  | total_time_seconds | RTF |\n|---------|------------|------------------|-----------------------|--|\n| HF | 1 | 39.26 |  44.31 | 0.2494 |\n| HF | 2 | 30.54 | 35.62 | 0.2064 |\n| HF | 4 | 18.63 |  23.90 | 0.1421 |\n| HF | 8 | 11.22 | 16.45 | 0.0947 |\n| HF | 16 | 8.42 | 13.78 | 0.0821 |\n| TRTLLM | 1 | 12.46 | 17.31 | 0.0987 |\n| TRTLLM | 2 | 7.64 |12.65 | 0.0739 |\n| TRTLLM | 4 | 4.89 |  9.38 | 0.0539 |\n| TRTLLM | 8 | 2.92 |  7.23 | 0.0418 |\n| TRTLLM | 16 | 2.01 |  6.63 | 0.0386 |\n### OpenAI-Compatible Server\n\nTo launch an OpenAI-compatible API service, run the following commands:\n```sh\ngit clone https://github.com/yuekaizhang/Triton-OpenAI-Speech.git\ncd Triton-OpenAI-Speech\npip install -r requirements.txt\n\n# After the Triton service is running, start the FastAPI bridge:\npython3 tts_server.py --url http://localhost:8000 --ref_audios_dir ./ref_audios/ --port 10086 --default_sample_rate 24000\n\n# Test the service with curl:\nbash test/test_cosyvoice.sh\n```\n> [!NOTE]\n> Currently, only the offline TTS mode is compatible with the OpenAI-compatible server.\n\n### Acknowledgements\n\nThis work originates from the NVIDIA CISI project. For more multimodal resources, please see [mair-hub](https://github.com/nvidia-china-sae/mair-hub).\n\n"
  },
  {
    "path": "runtime/triton_trtllm/README.Cosyvoice3.md",
    "content": "## Accelerating CosyVoice3 with NVIDIA Triton Inference Server and TensorRT-LLM\n\nContributed by Yuekai Zhang (NVIDIA).\n\n### Quick Start\n\nLaunch the service directly with Docker Compose:\n```sh\ndocker compose -f docker-compose.cosyvoice3.yml up\n```\n\n### Build the Docker Image\n\nTo build the image from scratch:\n```sh\ndocker build . -f Dockerfile.server -t soar97/triton-cosyvoice:25.06\n```\n\n### Run a Docker Container\n```sh\nyour_mount_dir=/mnt:/mnt\ndocker run -it --name \"cosyvoice-server\" --gpus all --net host -v $your_mount_dir --shm-size=2g soar97/triton-cosyvoice:25.06\n```\n\n### Understanding `run_cosyvoice3.sh`\n\nThe `run_cosyvoice3.sh` script orchestrates the entire workflow through numbered stages.\n\nYou can run a subset of stages with:\n```sh\nbash run_cosyvoice3.sh <start_stage> <stop_stage>\n```\n- `<start_stage>`: The stage to start from.\n- `<stop_stage>`: The stage to stop after.\n\n**Stages:**\n\n- **Stage -1**: Clones the `CosyVoice` repository.\n- **Stage 0**: Downloads the `Fun-CosyVoice3-0.5B-2512` model and its HuggingFace LLM checkpoint.\n- **Stage 1**: Converts the HuggingFace checkpoint for the LLM to the TensorRT-LLM format and builds the TensorRT engines.\n- **Stage 2**: Creates the Triton model repository, including configurations for `cosyvoice3`, `token2wav`, `vocoder`, `audio_tokenizer`, and `speaker_embedding`.\n- **Stage 3**: Launches the Triton Inference Server for Token2Wav module and uses `trtllm-serve` to deploy CosyVoice3 LLM.\n- **Stage 4**: Runs the gRPC benchmark client for performance testing.\n- **Stage 5**: Runs the offline TTS inference benchmark test.\n\n### Export Models and Launch Server\n\nInside the Docker container, prepare the models and start the Triton server by running stages 0-3:\n```sh\n# This command runs stages 0, 1, 2, and 3\nbash run_cosyvoice3.sh 0 3\n```\n\n### Benchmark with client-server mode\n\nTo benchmark the running Triton server, run stage 4:\n```sh\nbash run_cosyvoice3.sh 4 4\n\n# You can customize parameters such as the number of tasks inside the script.\n```\nThe following results were obtained by decoding on a single L20 GPU.\n\n#### Streaming TTS (Concurrent Tasks = 4)\n\n**First Chunk Latency**\n\n| Concurrent Tasks | Average (ms) | 50th Percentile (ms) | 90th Percentile (ms) | 95th Percentile (ms) | 99th Percentile (ms) |\n| ---------------- | ------------ | -------------------- | -------------------- | -------------------- | -------------------- |\n| 4                | 750.42       | 740.31               | 941.05               | 977.55               | 1002.37              |\n\n### Benchmark with offline inference mode\n\nFor offline inference mode benchmark, please run stage 5:\n```sh\nbash run_cosyvoice3.sh 5 5\n```\n\n#### Offline TTS (CosyVoice3 0.5B LLM + Token2Wav with TensorRT)\n\n| Backend | LLM Batch Size | llm_time (s) | token2wav_time (s) | pipeline_time (s) | RTF    |\n|---------|------------|--------------|--------------------|--------------------|--------|\n| TRTLLM  | 1          | 13.21        | 5.72               | 19.48              | 0.1091 |\n| TRTLLM  | 2          | 8.46         | 6.02               | 14.91              | 0.0822 |\n| TRTLLM  | 4          | 5.07         | 5.95               | 11.43              | 0.0630 |\n| TRTLLM  | 8          | 2.98         | 6.11               | 9.53               | 0.0562 |\n| TRTLLM  | 16         | 2.12         | 6.27               | 8.83               | 0.0501 |\n"
  },
  {
    "path": "runtime/triton_trtllm/README.md",
    "content": "# Accelerating CosyVoice with NVIDIA Triton Inference Server and TensorRT-LLM\n\nContributed by Yuekai Zhang (NVIDIA).\n\nThis repository provides three acceleration solutions for CosyVoice, each targeting a different model version and Token2Wav architecture. All solutions use TensorRT-LLM for LLM acceleration and NVIDIA Triton Inference Server for serving.\n\n## Solutions\n\n### [CosyVoice3](README.Cosyvoice3.md)\n\nAcceleration solution for [Fun-CosyVoice3-0.5B-2512](https://huggingface.co/FunAudioLLM/Fun-CosyVoice3-0.5B-2512), the latest CosyVoice model. The pipeline includes `audio_tokenizer`, `speaker_embedding`, `token2wav`, and `vocoder` modules managed by Triton, with the LLM served via `trtllm-serve`.\n\n### [CosyVoice2 + UNet Token2Wav](README.Cosyvoice2.Unet.md)\n\nThe baseline acceleration solution for CosyVoice2, using the original UNet-based flow-matching Token2Wav module.\n\n### [CosyVoice2 + DiT Token2Wav](README.Cosyvoice2.DiT.md)\n\nReplaces the UNet Token2Wav with a DiT-based Token2Wav module from [Step-Audio2](https://github.com/stepfun-ai/Step-Audio-2). Supports disaggregated deployment where the LLM and Token2Wav run on separate GPUs for better resource utilization under high concurrency.\n\n\n\n## Quick Start\n\nEach solution can be launched with a single Docker Compose command:\n\n```sh\n# CosyVoice3\ndocker compose -f docker-compose.cosyvoice3.yml up\n\n# CosyVoice2 + UNet Token2Wav\ndocker compose -f docker-compose.cosyvoice2.unet.yml up\n\n# CosyVoice2 + DiT Token2Wav\ndocker compose -f docker-compose.cosyvoice2.dit.yml up\n```\n\n"
  },
  {
    "path": "runtime/triton_trtllm/client_grpc.py",
    "content": "# Copyright      2022  Xiaomi Corp.        (authors: Fangjun Kuang)\n#                2023  Nvidia              (authors: Yuekai Zhang)\n#                2023  Recurrent.ai        (authors: Songtao Shi)\n# See LICENSE for clarification regarding multiple authors\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\"\"\"\nThis script supports to load dataset from huggingface and sends it to the server\nfor decoding, in parallel.\n\nUsage:\nnum_task=2\n\n# For offline F5-TTS\npython3 client_grpc.py \\\n    --server-addr localhost \\\n    --model-name f5_tts \\\n    --num-tasks $num_task \\\n    --huggingface-dataset yuekai/seed_tts \\\n    --split-name test_zh \\\n    --log-dir ./log_concurrent_tasks_${num_task}\n\n# For offline Spark-TTS-0.5B\npython3 client_grpc.py \\\n    --server-addr localhost \\\n    --model-name spark_tts \\\n    --num-tasks $num_task \\\n    --huggingface-dataset yuekai/seed_tts \\\n    --split-name wenetspeech4tts \\\n    --log-dir ./log_concurrent_tasks_${num_task}\n\"\"\"\n\nimport argparse\nimport asyncio\nimport json\nimport queue\nimport uuid\nimport functools\n\nimport os\nimport time\nimport types\nfrom pathlib import Path\n\nimport numpy as np\nimport soundfile as sf\nimport tritonclient\nimport tritonclient.grpc.aio as grpcclient_aio\nimport tritonclient.grpc as grpcclient_sync\nfrom tritonclient.utils import np_to_triton_dtype, InferenceServerException\n\n\nclass UserData:\n    def __init__(self):\n        self._completed_requests = queue.Queue()\n        self._first_chunk_time = None\n        self._second_chunk_time = None\n        self._start_time = None\n\n    def record_start_time(self):\n        self._start_time = time.time()\n\n    def get_first_chunk_latency(self):\n        if self._first_chunk_time and self._start_time:\n            return self._first_chunk_time - self._start_time\n        return None\n\n    def get_second_chunk_latency(self):\n        if self._first_chunk_time and self._second_chunk_time:\n            return self._second_chunk_time - self._first_chunk_time\n        return None\n\n\ndef callback(user_data, result, error):\n    if not error:\n        if user_data._first_chunk_time is None:\n            user_data._first_chunk_time = time.time()\n        elif user_data._second_chunk_time is None:\n            user_data._second_chunk_time = time.time()\n\n    if error:\n        user_data._completed_requests.put(error)\n    else:\n        user_data._completed_requests.put(result)\n\n\ndef stream_callback(user_data_map, result, error):\n    request_id = None\n    if error:\n        print(f\"An error occurred in the stream callback: {error}\")\n    else:\n        request_id = result.get_response().id\n\n    if request_id:\n        user_data = user_data_map.get(request_id)\n        if user_data:\n            callback(user_data, result, error)\n        else:\n            print(f\"Warning: Could not find user_data for request_id {request_id}\")\n\n\ndef write_triton_stats(stats, summary_file):\n    with open(summary_file, \"w\") as summary_f:\n        model_stats = stats[\"model_stats\"]\n        for model_state in model_stats:\n            if \"last_inference\" not in model_state:\n                continue\n            summary_f.write(f\"model name is {model_state['name']} \\n\")\n            model_inference_stats = model_state[\"inference_stats\"]\n            total_queue_time_s = int(model_inference_stats[\"queue\"][\"ns\"]) / 1e9\n            total_infer_time_s = int(model_inference_stats[\"compute_infer\"][\"ns\"]) / 1e9\n            total_input_time_s = int(model_inference_stats[\"compute_input\"][\"ns\"]) / 1e9\n            total_output_time_s = int(model_inference_stats[\"compute_output\"][\"ns\"]) / 1e9\n            summary_f.write(\n                f\"queue time {total_queue_time_s:<5.2f} s, \"\n                f\"compute infer time {total_infer_time_s:<5.2f} s, \"\n                f\"compute input time {total_input_time_s:<5.2f} s, \"\n                f\"compute output time {total_output_time_s:<5.2f} s \\n\"\n            )\n            model_batch_stats = model_state[\"batch_stats\"]\n            for batch in model_batch_stats:\n                batch_size = int(batch[\"batch_size\"])\n                compute_input = batch[\"compute_input\"]\n                compute_output = batch[\"compute_output\"]\n                compute_infer = batch[\"compute_infer\"]\n                batch_count = int(compute_infer[\"count\"])\n                if batch_count == 0:\n                    continue\n                assert compute_infer[\"count\"] == compute_output[\"count\"] == compute_input[\"count\"]\n                compute_infer_time_ms = int(compute_infer[\"ns\"]) / 1e6\n                compute_input_time_ms = int(compute_input[\"ns\"]) / 1e6\n                compute_output_time_ms = int(compute_output[\"ns\"]) / 1e6\n                summary_f.write(\n                    f\"execuate inference with batch_size {batch_size:<2} total {batch_count:<5} times, \"\n                    f\"total_infer_time {compute_infer_time_ms:<9.2f} ms, \"\n                    f\"avg_infer_time {compute_infer_time_ms:<9.2f}/{batch_count:<5}=\"\n                    f\"{compute_infer_time_ms / batch_count:.2f} ms, \"\n                    f\"avg_infer_time_per_sample {compute_infer_time_ms:<9.2f}/{batch_count:<5}/{batch_size}=\"\n                    f\"{compute_infer_time_ms / batch_count / batch_size:.2f} ms \\n\"\n                )\n                summary_f.write(\n                    f\"input {compute_input_time_ms:<9.2f} ms, avg {compute_input_time_ms / batch_count:.2f} ms, \"\n                )\n                summary_f.write(\n                    f\"output {compute_output_time_ms:<9.2f} ms, avg {compute_output_time_ms / batch_count:.2f} ms \\n\"\n                )\n\n\ndef subtract_stats(stats_after, stats_before):\n    \"\"\"Subtracts two Triton inference statistics objects.\"\"\"\n    stats_diff = json.loads(json.dumps(stats_after))\n\n    model_stats_before_map = {\n        s[\"name\"]: {\n            \"version\": s[\"version\"],\n            \"last_inference\": s.get(\"last_inference\", 0),\n            \"inference_count\": s.get(\"inference_count\", 0),\n            \"execution_count\": s.get(\"execution_count\", 0),\n            \"inference_stats\": s.get(\"inference_stats\", {}),\n            \"batch_stats\": s.get(\"batch_stats\", []),\n        }\n        for s in stats_before[\"model_stats\"]\n    }\n\n    for model_stat_after in stats_diff[\"model_stats\"]:\n        model_name = model_stat_after[\"name\"]\n        if model_name in model_stats_before_map:\n            model_stat_before = model_stats_before_map[model_name]\n\n            model_stat_after[\"inference_count\"] = str(\n                int(model_stat_after.get(\"inference_count\", 0)) - int(model_stat_before.get(\"inference_count\", 0))\n            )\n            model_stat_after[\"execution_count\"] = str(\n                int(model_stat_after.get(\"execution_count\", 0)) - int(model_stat_before.get(\"execution_count\", 0))\n            )\n\n            if \"inference_stats\" in model_stat_after and \"inference_stats\" in model_stat_before:\n                for key in [\"success\", \"fail\", \"queue\", \"compute_input\", \"compute_infer\", \"compute_output\", \"cache_hit\", \"cache_miss\"]:\n                    if key in model_stat_after[\"inference_stats\"] and key in model_stat_before[\"inference_stats\"]:\n                        if \"ns\" in model_stat_after[\"inference_stats\"][key]:\n                            ns_after = int(model_stat_after[\"inference_stats\"][key][\"ns\"])\n                            ns_before = int(model_stat_before[\"inference_stats\"][key][\"ns\"])\n                            model_stat_after[\"inference_stats\"][key][\"ns\"] = str(ns_after - ns_before)\n                        if \"count\" in model_stat_after[\"inference_stats\"][key]:\n                            count_after = int(model_stat_after[\"inference_stats\"][key][\"count\"])\n                            count_before = int(model_stat_before[\"inference_stats\"][key][\"count\"])\n                            model_stat_after[\"inference_stats\"][key][\"count\"] = str(count_after - count_before)\n\n            if \"batch_stats\" in model_stat_after and \"batch_stats\" in model_stat_before:\n                batch_stats_before_map = {b[\"batch_size\"]: b for b in model_stat_before[\"batch_stats\"]}\n                for batch_stat_after in model_stat_after[\"batch_stats\"]:\n                    bs = batch_stat_after[\"batch_size\"]\n                    if bs in batch_stats_before_map:\n                        batch_stat_before = batch_stats_before_map[bs]\n                        for key in [\"compute_input\", \"compute_infer\", \"compute_output\"]:\n                            if key in batch_stat_after and key in batch_stat_before:\n                                count_after = int(batch_stat_after[key][\"count\"])\n                                count_before = int(batch_stat_before[key][\"count\"])\n                                batch_stat_after[key][\"count\"] = str(count_after - count_before)\n\n                                ns_after = int(batch_stat_after[key][\"ns\"])\n                                ns_before = int(batch_stat_before[key][\"ns\"])\n                                batch_stat_after[key][\"ns\"] = str(ns_after - ns_before)\n    return stats_diff\n\n\ndef get_args():\n    parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)\n\n    parser.add_argument(\n        \"--server-addr\",\n        type=str,\n        default=\"localhost\",\n        help=\"Address of the server\",\n    )\n\n    parser.add_argument(\n        \"--server-port\",\n        type=int,\n        default=8001,\n        help=\"Grpc port of the triton server, default is 8001\",\n    )\n\n    parser.add_argument(\n        \"--reference-audio\",\n        type=str,\n        default=None,\n        help=\"Path to a single audio file. It can't be specified at the same time with --manifest-dir\",\n    )\n\n    parser.add_argument(\n        \"--reference-text\",\n        type=str,\n        default=\"\",\n        help=\"\",\n    )\n\n    parser.add_argument(\n        \"--target-text\",\n        type=str,\n        default=\"\",\n        help=\"\",\n    )\n\n    parser.add_argument(\n        \"--huggingface-dataset\",\n        type=str,\n        default=\"yuekai/seed_tts\",\n        help=\"dataset name in huggingface dataset hub\",\n    )\n\n    parser.add_argument(\n        \"--split-name\",\n        type=str,\n        default=\"wenetspeech4tts\",\n        choices=[\"wenetspeech4tts\", \"test_zh\", \"test_en\", \"test_hard\"],\n        help=\"dataset split name, default is 'test'\",\n    )\n\n    parser.add_argument(\n        \"--manifest-path\",\n        type=str,\n        default=None,\n        help=\"Path to the manifest dir which includes wav.scp trans.txt files.\",\n    )\n\n    parser.add_argument(\n        \"--model-name\",\n        type=str,\n        default=\"f5_tts\",\n        choices=[\n            \"f5_tts\",\n            \"spark_tts\",\n            \"cosyvoice3\",\n            \"cosyvoice2\",\n            \"cosyvoice2_dit\"],\n        help=\"triton model_repo module name to request\",\n    )\n\n    parser.add_argument(\n        \"--num-tasks\",\n        type=int,\n        default=1,\n        help=\"Number of concurrent tasks for sending\",\n    )\n\n    parser.add_argument(\n        \"--log-interval\",\n        type=int,\n        default=5,\n        help=\"Controls how frequently we print the log.\",\n    )\n\n    parser.add_argument(\n        \"--compute-wer\",\n        action=\"store_true\",\n        default=False,\n        help=\"\"\"True to compute WER.\n        \"\"\",\n    )\n\n    parser.add_argument(\n        \"--log-dir\",\n        type=str,\n        required=False,\n        default=\"./tmp\",\n        help=\"log directory\",\n    )\n\n    parser.add_argument(\n        \"--mode\",\n        type=str,\n        default=\"offline\",\n        choices=[\"offline\", \"streaming\"],\n        help=\"Select offline or streaming benchmark mode.\"\n    )\n    parser.add_argument(\n        \"--chunk-overlap-duration\",\n        type=float,\n        default=0.1,\n        help=\"Chunk overlap duration for streaming reconstruction (in seconds).\"\n    )\n\n    parser.add_argument(\n        \"--use-spk2info-cache\",\n        type=str,\n        default=\"False\",\n        help=\"Use spk2info cache for reference audio.\",\n    )\n\n    return parser.parse_args()\n\n\ndef load_audio(wav_path, target_sample_rate=16000):\n    assert target_sample_rate == 16000, \"hard coding in server\"\n    if isinstance(wav_path, dict):\n        waveform = wav_path[\"array\"]\n        sample_rate = wav_path[\"sampling_rate\"]\n    else:\n        waveform, sample_rate = sf.read(wav_path)\n    if sample_rate != target_sample_rate:\n        from scipy.signal import resample\n\n        num_samples = int(len(waveform) * (target_sample_rate / sample_rate))\n        waveform = resample(waveform, num_samples)\n    return waveform, target_sample_rate\n\n\ndef prepare_request_input_output(\n    protocol_client,\n    waveform,\n    reference_text,\n    target_text,\n    sample_rate=16000,\n    padding_duration: int = None,\n    use_spk2info_cache: bool = False\n):\n    \"\"\"Prepares inputs for Triton inference (offline or streaming).\"\"\"\n    assert len(waveform.shape) == 1, \"waveform should be 1D\"\n    lengths = np.array([[len(waveform)]], dtype=np.int32)\n\n    if padding_duration:\n        duration = len(waveform) / sample_rate\n        if reference_text:\n            estimated_target_duration = duration / len(reference_text) * len(target_text)\n        else:\n            estimated_target_duration = duration\n\n        required_total_samples = padding_duration * sample_rate * (\n            (int(estimated_target_duration + duration) // padding_duration) + 1\n        )\n        samples = np.zeros((1, required_total_samples), dtype=np.float32)\n        samples[0, : len(waveform)] = waveform\n    else:\n        samples = waveform.reshape(1, -1).astype(np.float32)\n\n    inputs = [\n        protocol_client.InferInput(\"reference_wav\", samples.shape, np_to_triton_dtype(samples.dtype)),\n        protocol_client.InferInput(\n            \"reference_wav_len\", lengths.shape, np_to_triton_dtype(lengths.dtype)\n        ),\n        protocol_client.InferInput(\"reference_text\", [1, 1], \"BYTES\"),\n        protocol_client.InferInput(\"target_text\", [1, 1], \"BYTES\"),\n    ]\n    inputs[0].set_data_from_numpy(samples)\n    inputs[1].set_data_from_numpy(lengths)\n\n    input_data_numpy = np.array([reference_text], dtype=object)\n    input_data_numpy = input_data_numpy.reshape((1, 1))\n    inputs[2].set_data_from_numpy(input_data_numpy)\n\n    input_data_numpy = np.array([target_text], dtype=object)\n    input_data_numpy = input_data_numpy.reshape((1, 1))\n    inputs[3].set_data_from_numpy(input_data_numpy)\n\n    outputs = [protocol_client.InferRequestedOutput(\"waveform\")]\n    if use_spk2info_cache:\n        inputs = inputs[-1:]\n    return inputs, outputs\n\n\ndef run_sync_streaming_inference(\n    sync_triton_client: tritonclient.grpc.InferenceServerClient,\n    model_name: str,\n    inputs: list,\n    outputs: list,\n    request_id: str,\n    user_data: UserData,\n    chunk_overlap_duration: float,\n    save_sample_rate: int,\n    audio_save_path: str,\n):\n    \"\"\"Helper function to run the blocking sync streaming call.\"\"\"\n    start_time_total = time.time()\n    user_data.record_start_time()\n\n    sync_triton_client.async_stream_infer(\n        model_name,\n        inputs,\n        request_id=request_id,\n        outputs=outputs,\n        enable_empty_final_response=True,\n    )\n\n    audios = []\n    while True:\n        try:\n            result = user_data._completed_requests.get(timeout=200)\n            if isinstance(result, InferenceServerException):\n                print(f\"Received InferenceServerException: {result}\")\n                return None, None, None, None\n            response = result.get_response()\n            final = response.parameters[\"triton_final_response\"].bool_param\n            if final is True:\n                break\n\n            audio_chunk = result.as_numpy(\"waveform\").reshape(-1)\n            if audio_chunk.size > 0:\n                audios.append(audio_chunk)\n            else:\n                print(\"Warning: received empty audio chunk.\")\n\n        except queue.Empty:\n            print(f\"Timeout waiting for response for request id {request_id}\")\n            return None, None, None, None\n\n    end_time_total = time.time()\n    total_request_latency = end_time_total - start_time_total\n    first_chunk_latency = user_data.get_first_chunk_latency()\n    second_chunk_latency = user_data.get_second_chunk_latency()\n\n    if audios:\n        if model_name == \"spark_tts\":\n            cross_fade_samples = int(chunk_overlap_duration * save_sample_rate)\n            fade_out = np.linspace(1, 0, cross_fade_samples)\n            fade_in = np.linspace(0, 1, cross_fade_samples)\n            reconstructed_audio = None\n\n            if not audios:\n                print(\"Warning: No audio chunks received.\")\n                reconstructed_audio = np.array([], dtype=np.float32)\n            elif len(audios) == 1:\n                reconstructed_audio = audios[0]\n            else:\n                reconstructed_audio = audios[0][:-cross_fade_samples]\n                for i in range(1, len(audios)):\n                    cross_faded_overlap = (audios[i][:cross_fade_samples] * fade_in +\n                                           audios[i - 1][-cross_fade_samples:] * fade_out)\n                    middle_part = audios[i][cross_fade_samples:-cross_fade_samples]\n                    reconstructed_audio = np.concatenate([reconstructed_audio, cross_faded_overlap, middle_part])\n                reconstructed_audio = np.concatenate([reconstructed_audio, audios[-1][-cross_fade_samples:]])\n\n            if reconstructed_audio is not None and reconstructed_audio.size > 0:\n                actual_duration = len(reconstructed_audio) / save_sample_rate\n                sf.write(audio_save_path, reconstructed_audio, save_sample_rate, \"PCM_16\")\n            else:\n                print(\"Warning: No audio chunks received or reconstructed.\")\n                actual_duration = 0\n        else:\n            reconstructed_audio = np.concatenate(audios)\n            actual_duration = len(reconstructed_audio) / save_sample_rate\n            sf.write(audio_save_path, reconstructed_audio, save_sample_rate, \"PCM_16\")\n\n    else:\n        print(\"Warning: No audio chunks received.\")\n        actual_duration = 0\n\n    return total_request_latency, first_chunk_latency, second_chunk_latency, actual_duration\n\n\nasync def send_streaming(\n    manifest_item_list: list,\n    name: str,\n    server_url: str,\n    protocol_client: types.ModuleType,\n    log_interval: int,\n    model_name: str,\n    audio_save_dir: str = \"./\",\n    save_sample_rate: int = 16000,\n    chunk_overlap_duration: float = 0.1,\n    padding_duration: int = None,\n    use_spk2info_cache: bool = False,\n):\n    total_duration = 0.0\n    latency_data = []\n    task_id = int(name[5:])\n    sync_triton_client = None\n    user_data_map = {}\n\n    try:\n        print(f\"{name}: Initializing sync client for streaming...\")\n        sync_triton_client = grpcclient_sync.InferenceServerClient(url=server_url, verbose=False)\n        sync_triton_client.start_stream(callback=functools.partial(stream_callback, user_data_map))\n\n        print(f\"{name}: Starting streaming processing for {len(manifest_item_list)} items.\")\n        for i, item in enumerate(manifest_item_list):\n            if i % log_interval == 0:\n                print(f\"{name}: Processing item {i}/{len(manifest_item_list)}\")\n\n            try:\n                waveform, sample_rate = load_audio(item[\"audio_filepath\"], target_sample_rate=16000)\n                reference_text, target_text = item[\"reference_text\"], item[\"target_text\"]\n\n                inputs, outputs = prepare_request_input_output(\n                    protocol_client,\n                    waveform,\n                    reference_text,\n                    target_text,\n                    sample_rate,\n                    padding_duration=padding_duration,\n                    use_spk2info_cache=use_spk2info_cache\n                )\n\n                request_id = str(uuid.uuid4())\n                user_data = UserData()\n                user_data_map[request_id] = user_data\n\n                audio_save_path = os.path.join(audio_save_dir, f\"{item['target_audio_path']}.wav\")\n                total_request_latency, first_chunk_latency, second_chunk_latency, actual_duration = await asyncio.to_thread(\n                    run_sync_streaming_inference,\n                    sync_triton_client,\n                    model_name,\n                    inputs,\n                    outputs,\n                    request_id,\n                    user_data,\n                    chunk_overlap_duration,\n                    save_sample_rate,\n                    audio_save_path\n                )\n\n                if total_request_latency is not None:\n                    print(\n                        f\"{name}: Item {i} - First Chunk Latency: {first_chunk_latency:.4f}s, \"\n                        f\"Second Chunk Latency: {second_chunk_latency if second_chunk_latency is not None else 'N/A'}, \"\n                        f\"Total Latency: {total_request_latency:.4f}s, Duration: {actual_duration:.4f}s\"\n                    )\n                    latency_data.append((total_request_latency, first_chunk_latency, second_chunk_latency, actual_duration))\n                    total_duration += actual_duration\n                else:\n                    print(f\"{name}: Item {i} failed.\")\n\n                del user_data_map[request_id]\n\n            except FileNotFoundError:\n                print(f\"Error: Audio file not found for item {i}: {item['audio_filepath']}\")\n            except Exception as e:\n                print(f\"Error processing item {i} ({item['target_audio_path']}): {e}\")\n                import traceback\n                traceback.print_exc()\n\n    finally:\n        if sync_triton_client:\n            try:\n                print(f\"{name}: Closing stream and sync client...\")\n                sync_triton_client.stop_stream()\n                sync_triton_client.close()\n            except Exception as e:\n                print(f\"{name}: Error closing sync client: {e}\")\n\n    print(f\"{name}: Finished streaming processing. Total duration synthesized: {total_duration:.4f}s\")\n    return total_duration, latency_data\n\n\nasync def send(\n    manifest_item_list: list,\n    name: str,\n    triton_client: tritonclient.grpc.aio.InferenceServerClient,\n    protocol_client: types.ModuleType,\n    log_interval: int,\n    model_name: str,\n    padding_duration: int = None,\n    audio_save_dir: str = \"./\",\n    save_sample_rate: int = 16000,\n    use_spk2info_cache: bool = False,\n):\n    total_duration = 0.0\n    latency_data = []\n    task_id = int(name[5:])\n\n    for i, item in enumerate(manifest_item_list):\n        if i % log_interval == 0:\n            print(f\"{name}: {i}/{len(manifest_item_list)}\")\n        waveform, sample_rate = load_audio(item[\"audio_filepath\"], target_sample_rate=16000)\n        reference_text, target_text = item[\"reference_text\"], item[\"target_text\"]\n\n        inputs, outputs = prepare_request_input_output(\n            protocol_client,\n            waveform,\n            reference_text,\n            target_text,\n            sample_rate,\n            padding_duration=padding_duration,\n            use_spk2info_cache=use_spk2info_cache\n        )\n        sequence_id = 100000000 + i + task_id * 10\n        start = time.time()\n        response = await triton_client.infer(model_name, inputs, request_id=str(sequence_id), outputs=outputs)\n\n        audio = response.as_numpy(\"waveform\").reshape(-1)\n        actual_duration = len(audio) / save_sample_rate\n\n        end = time.time() - start\n\n        audio_save_path = os.path.join(audio_save_dir, f\"{item['target_audio_path']}.wav\")\n        sf.write(audio_save_path, audio, save_sample_rate, \"PCM_16\")\n\n        latency_data.append((end, actual_duration))\n        total_duration += actual_duration\n\n    return total_duration, latency_data\n\n\ndef load_manifests(manifest_path):\n    with open(manifest_path, \"r\") as f:\n        manifest_list = []\n        for line in f:\n            assert len(line.strip().split(\"|\")) == 4\n            utt, prompt_text, prompt_wav, gt_text = line.strip().split(\"|\")\n            utt = Path(utt).stem\n            if not os.path.isabs(prompt_wav):\n                prompt_wav = os.path.join(os.path.dirname(manifest_path), prompt_wav)\n            manifest_list.append(\n                {\n                    \"audio_filepath\": prompt_wav,\n                    \"reference_text\": prompt_text,\n                    \"target_text\": gt_text,\n                    \"target_audio_path\": utt,\n                }\n            )\n    return manifest_list\n\n\ndef split_data(data, k):\n    n = len(data)\n    if n < k:\n        print(f\"Warning: the length of the input list ({n}) is less than k ({k}). Setting k to {n}.\")\n        k = n\n\n    quotient = n // k\n    remainder = n % k\n\n    result = []\n    start = 0\n    for i in range(k):\n        if i < remainder:\n            end = start + quotient + 1\n        else:\n            end = start + quotient\n\n        result.append(data[start:end])\n        start = end\n\n    return result\n\n\nasync def main():\n    args = get_args()\n    url = f\"{args.server_addr}:{args.server_port}\"\n\n    triton_client = None\n    protocol_client = None\n    if args.mode == \"offline\":\n        print(\"Initializing gRPC client for offline mode...\")\n        triton_client = grpcclient_aio.InferenceServerClient(url=url, verbose=False)\n        protocol_client = grpcclient_aio\n    elif args.mode == \"streaming\":\n        print(\"Initializing gRPC client for streaming mode...\")\n        protocol_client = grpcclient_sync\n    else:\n        raise ValueError(f\"Invalid mode: {args.mode}\")\n\n    if args.reference_audio:\n        args.num_tasks = 1\n        args.log_interval = 1\n        manifest_item_list = [\n            {\n                \"reference_text\": args.reference_text,\n                \"target_text\": args.target_text,\n                \"audio_filepath\": args.reference_audio,\n                \"target_audio_path\": \"test\",\n            }\n        ]\n    elif args.huggingface_dataset:\n        import datasets\n\n        dataset = datasets.load_dataset(\n            args.huggingface_dataset,\n            split=args.split_name,\n            trust_remote_code=True,\n        )\n        manifest_item_list = []\n        for i in range(len(dataset)):\n            manifest_item_list.append(\n                {\n                    \"audio_filepath\": dataset[i][\"prompt_audio\"],\n                    \"reference_text\": dataset[i][\"prompt_text\"],\n                    \"target_audio_path\": dataset[i][\"id\"],\n                    \"target_text\": dataset[i][\"target_text\"],\n                }\n            )\n    else:\n        manifest_item_list = load_manifests(args.manifest_path)\n\n    stats_client = None\n    stats_before = None\n    try:\n        print(\"Initializing temporary async client for fetching stats...\")\n        stats_client = grpcclient_aio.InferenceServerClient(url=url, verbose=False)\n        print(\"Fetching inference statistics before running tasks...\")\n        stats_before = await stats_client.get_inference_statistics(model_name=\"\", as_json=True)\n    except Exception as e:\n        print(f\"Could not retrieve statistics before running tasks: {e}\")\n\n    num_tasks = min(args.num_tasks, len(manifest_item_list))\n    manifest_item_list = split_data(manifest_item_list, num_tasks)\n\n    os.makedirs(args.log_dir, exist_ok=True)\n    args.use_spk2info_cache = args.use_spk2info_cache == \"True\" or args.use_spk2info_cache == \"true\"\n    tasks = []\n    start_time = time.time()\n    for i in range(num_tasks):\n        if args.mode == \"offline\":\n            task = asyncio.create_task(\n                send(\n                    manifest_item_list[i],\n                    name=f\"task-{i}\",\n                    triton_client=triton_client,\n                    protocol_client=protocol_client,\n                    log_interval=args.log_interval,\n                    model_name=args.model_name,\n                    audio_save_dir=args.log_dir,\n                    padding_duration=1,\n                    save_sample_rate=16000 if args.model_name == \"spark_tts\" else 24000,\n                    use_spk2info_cache=args.use_spk2info_cache,\n                )\n            )\n        elif args.mode == \"streaming\":\n            task = asyncio.create_task(\n                send_streaming(\n                    manifest_item_list[i],\n                    name=f\"task-{i}\",\n                    server_url=url,\n                    protocol_client=protocol_client,\n                    log_interval=args.log_interval,\n                    model_name=args.model_name,\n                    audio_save_dir=args.log_dir,\n                    padding_duration=10,\n                    save_sample_rate=16000 if args.model_name == \"spark_tts\" else 24000,\n                    chunk_overlap_duration=args.chunk_overlap_duration,\n                    use_spk2info_cache=args.use_spk2info_cache,\n                )\n            )\n        tasks.append(task)\n\n    ans_list = await asyncio.gather(*tasks)\n\n    end_time = time.time()\n    elapsed = end_time - start_time\n\n    total_duration = 0.0\n    latency_data = []\n    for ans in ans_list:\n        if ans:\n            total_duration += ans[0]\n            latency_data.extend(ans[1])\n        else:\n            print(\"Warning: A task returned None, possibly due to an error.\")\n\n    if total_duration == 0:\n        print(\"Total synthesized duration is zero. Cannot calculate RTF or latency percentiles.\")\n        rtf = float('inf')\n    else:\n        rtf = elapsed / total_duration\n\n    s = f\"Mode: {args.mode}\\n\"\n    s += f\"RTF: {rtf:.4f}\\n\"\n    s += f\"total_duration: {total_duration:.3f} seconds\\n\"\n    s += f\"({total_duration / 3600:.2f} hours)\\n\"\n    s += f\"processing time: {elapsed:.3f} seconds ({elapsed / 3600:.2f} hours)\\n\"\n\n    if latency_data:\n        if args.mode == \"offline\":\n            latency_list = [chunk_end for (chunk_end, chunk_duration) in latency_data]\n            if latency_list:\n                latency_ms = sum(latency_list) / float(len(latency_list)) * 1000.0\n                latency_variance = np.var(latency_list, dtype=np.float64) * 1000.0\n                s += f\"latency_variance: {latency_variance:.2f}\\n\"\n                s += f\"latency_50_percentile_ms: {np.percentile(latency_list, 50) * 1000.0:.2f}\\n\"\n                s += f\"latency_90_percentile_ms: {np.percentile(latency_list, 90) * 1000.0:.2f}\\n\"\n                s += f\"latency_95_percentile_ms: {np.percentile(latency_list, 95) * 1000.0:.2f}\\n\"\n                s += f\"latency_99_percentile_ms: {np.percentile(latency_list, 99) * 1000.0:.2f}\\n\"\n                s += f\"average_latency_ms: {latency_ms:.2f}\\n\"\n            else:\n                s += \"No latency data collected for offline mode.\\n\"\n\n        elif args.mode == \"streaming\":\n            total_latency_list = [total for (total, first, second, duration) in latency_data if total is not None]\n            first_chunk_latency_list = [first for (total, first, second, duration) in latency_data if first is not None]\n            second_chunk_latency_list = [second for (total, first, second, duration) in latency_data if second is not None]\n\n            s += \"\\n--- Total Request Latency ---\\n\"\n            if total_latency_list:\n                avg_total_latency_ms = sum(total_latency_list) / len(total_latency_list) * 1000.0\n                variance_total_latency = np.var(total_latency_list, dtype=np.float64) * 1000.0\n                s += f\"total_request_latency_variance: {variance_total_latency:.2f}\\n\"\n                s += f\"total_request_latency_50_percentile_ms: {np.percentile(total_latency_list, 50) * 1000.0:.2f}\\n\"\n                s += f\"total_request_latency_90_percentile_ms: {np.percentile(total_latency_list, 90) * 1000.0:.2f}\\n\"\n                s += f\"total_request_latency_95_percentile_ms: {np.percentile(total_latency_list, 95) * 1000.0:.2f}\\n\"\n                s += f\"total_request_latency_99_percentile_ms: {np.percentile(total_latency_list, 99) * 1000.0:.2f}\\n\"\n                s += f\"average_total_request_latency_ms: {avg_total_latency_ms:.2f}\\n\"\n            else:\n                s += \"No total request latency data collected.\\n\"\n\n            s += \"\\n--- First Chunk Latency ---\\n\"\n            if first_chunk_latency_list:\n                avg_first_chunk_latency_ms = sum(first_chunk_latency_list) / len(first_chunk_latency_list) * 1000.0\n                variance_first_chunk_latency = np.var(first_chunk_latency_list, dtype=np.float64) * 1000.0\n                s += f\"first_chunk_latency_variance: {variance_first_chunk_latency:.2f}\\n\"\n                s += f\"first_chunk_latency_50_percentile_ms: {np.percentile(first_chunk_latency_list, 50) * 1000.0:.2f}\\n\"\n                s += f\"first_chunk_latency_90_percentile_ms: {np.percentile(first_chunk_latency_list, 90) * 1000.0:.2f}\\n\"\n                s += f\"first_chunk_latency_95_percentile_ms: {np.percentile(first_chunk_latency_list, 95) * 1000.0:.2f}\\n\"\n                s += f\"first_chunk_latency_99_percentile_ms: {np.percentile(first_chunk_latency_list, 99) * 1000.0:.2f}\\n\"\n                s += f\"average_first_chunk_latency_ms: {avg_first_chunk_latency_ms:.2f}\\n\"\n            else:\n                s += \"No first chunk latency data collected (check for errors or if all requests failed before first chunk).\\n\"\n\n            s += \"\\n--- Second Chunk Latency ---\\n\"\n            if second_chunk_latency_list:\n                avg_second_chunk_latency_ms = sum(second_chunk_latency_list) / len(second_chunk_latency_list) * 1000.0\n                variance_second_chunk_latency = np.var(second_chunk_latency_list, dtype=np.float64) * 1000.0\n                s += f\"second_chunk_latency_variance: {variance_second_chunk_latency:.2f}\\n\"\n                s += f\"second_chunk_latency_50_percentile_ms: {np.percentile(second_chunk_latency_list, 50) * 1000.0:.2f}\\n\"\n                s += f\"second_chunk_latency_90_percentile_ms: {np.percentile(second_chunk_latency_list, 90) * 1000.0:.2f}\\n\"\n                s += f\"second_chunk_latency_95_percentile_ms: {np.percentile(second_chunk_latency_list, 95) * 1000.0:.2f}\\n\"\n                s += f\"second_chunk_latency_99_percentile_ms: {np.percentile(second_chunk_latency_list, 99) * 1000.0:.2f}\\n\"\n                s += f\"average_second_chunk_latency_ms: {avg_second_chunk_latency_ms:.2f}\\n\"\n            else:\n                s += \"No second chunk latency data collected (check for errors or if all requests failed before second chunk).\\n\"\n    else:\n        s += \"No latency data collected.\\n\"\n\n    print(s)\n    if args.manifest_path:\n        name = Path(args.manifest_path).stem\n    elif args.split_name:\n        name = args.split_name\n    elif args.reference_audio:\n        name = Path(args.reference_audio).stem\n    else:\n        name = \"results\"\n    with open(f\"{args.log_dir}/rtf-{name}.txt\", \"w\") as f:\n        f.write(s)\n\n    try:\n        if stats_client and stats_before:\n            print(\"Fetching inference statistics after running tasks...\")\n            stats_after = await stats_client.get_inference_statistics(model_name=\"\", as_json=True)\n\n            print(\"Calculating statistics difference...\")\n            stats = subtract_stats(stats_after, stats_before)\n\n            print(\"Fetching model config...\")\n            metadata = await stats_client.get_model_config(model_name=args.model_name, as_json=True)\n\n            write_triton_stats(stats, f\"{args.log_dir}/stats_summary-{name}.txt\")\n\n            with open(f\"{args.log_dir}/model_config-{name}.json\", \"w\") as f:\n                json.dump(metadata, f, indent=4)\n        else:\n            print(\"Stats client not available or initial stats were not fetched. Skipping stats reporting.\")\n\n    except Exception as e:\n        print(f\"Could not retrieve statistics or config: {e}\")\n    finally:\n        if stats_client:\n            try:\n                print(\"Closing temporary async stats client...\")\n                await stats_client.close()\n            except Exception as e:\n                print(f\"Error closing async stats client: {e}\")\n\n\nif __name__ == \"__main__\":\n    async def run_main():\n        try:\n            await main()\n        except Exception as e:\n            print(f\"An error occurred in main: {e}\")\n            import traceback\n            traceback.print_exc()\n\n    asyncio.run(run_main())\n"
  },
  {
    "path": "runtime/triton_trtllm/client_http.py",
    "content": "# Copyright 2025, NVIDIA CORPORATION & AFFILIATES. 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\n# are met:\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#  * Neither the name of NVIDIA CORPORATION nor the names of its\n#    contributors may be used to endorse or promote products derived\n#    from this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY\n# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\nimport requests\nimport soundfile as sf\nimport numpy as np\nimport argparse\n\n\ndef get_args():\n    parser = argparse.ArgumentParser(\n        formatter_class=argparse.ArgumentDefaultsHelpFormatter\n    )\n\n    parser.add_argument(\n        \"--server-url\",\n        type=str,\n        default=\"localhost:18000\",\n        help=\"Address of the server\",\n    )\n\n    parser.add_argument(\n        \"--reference-audio\",\n        type=str,\n        default=\"./prompt_audio.wav\",\n        help=\"Path to a single audio file. It can't be specified at the same time with --manifest-dir\",\n    )\n\n    parser.add_argument(\n        \"--reference-text\",\n        type=str,\n        default=\"吃燕窝就选燕之屋，本节目由26年专注高品质燕窝的燕之屋冠名播出。豆奶牛奶换着喝，营养更均衡，本节目由豆本豆豆奶特约播出。\",\n        help=\"\",\n    )\n\n    parser.add_argument(\n        \"--target-text\",\n        type=str,\n        default=\"身临其境，换新体验。塑造开源语音合成新范式，让智能语音更自然。\",\n        help=\"\",\n    )\n\n    parser.add_argument(\n        \"--model-name\",\n        type=str,\n        default=\"cosyvoice3\",\n        choices=[\n            \"f5_tts\",\n            \"cosyvoice3\",\n            \"spark_tts\",\n            \"cosyvoice2\"],\n        help=\"triton model_repo module name to request\",\n    )\n\n    parser.add_argument(\n        \"--output-audio\",\n        type=str,\n        default=\"output.wav\",\n        help=\"Path to save the output audio\",\n    )\n    return parser.parse_args()\n\n\ndef prepare_request(\n    waveform,\n    reference_text,\n    target_text,\n    sample_rate=16000,\n    padding_duration: int = None,\n    audio_save_dir: str = \"./\",\n):\n    assert len(waveform.shape) == 1, \"waveform should be 1D\"\n    lengths = np.array([[len(waveform)]], dtype=np.int32)\n    if padding_duration:\n        # padding to nearset 10 seconds\n        samples = np.zeros(\n            (\n                1,\n                padding_duration\n                * sample_rate\n                * ((int(len(waveform) / sample_rate) // padding_duration) + 1),\n            ),\n            dtype=np.float32,\n        )\n\n        samples[0, : len(waveform)] = waveform\n    else:\n        samples = waveform\n\n    samples = samples.reshape(1, -1).astype(np.float32)\n\n    data = {\n        \"inputs\": [\n            {\n                \"name\": \"reference_wav\",\n                \"shape\": samples.shape,\n                \"datatype\": \"FP32\",\n                \"data\": samples.tolist()\n            },\n            {\n                \"name\": \"reference_wav_len\",\n                \"shape\": lengths.shape,\n                \"datatype\": \"INT32\",\n                \"data\": lengths.tolist(),\n            },\n            {\n                \"name\": \"reference_text\",\n                \"shape\": [1, 1],\n                \"datatype\": \"BYTES\",\n                \"data\": [reference_text]\n            },\n            {\n                \"name\": \"target_text\",\n                \"shape\": [1, 1],\n                \"datatype\": \"BYTES\",\n                \"data\": [target_text]\n            }\n        ]\n    }\n\n    return data\n\n\nif __name__ == \"__main__\":\n    args = get_args()\n    server_url = args.server_url\n    if not server_url.startswith((\"http://\", \"https://\")):\n        server_url = f\"http://{server_url}\"\n\n    url = f\"{server_url}/v2/models/{args.model_name}/infer\"\n    waveform, sr = sf.read(args.reference_audio)\n    assert sr == 16000, \"sample rate hardcoded in server\"\n\n    samples = np.array(waveform, dtype=np.float32)\n    data = prepare_request(samples, args.reference_text, args.target_text)\n\n    rsp = requests.post(\n        url,\n        headers={\"Content-Type\": \"application/json\"},\n        json=data,\n        verify=False,\n        params={\"request_id\": '0'}\n    )\n    result = rsp.json()\n    audio = result[\"outputs\"][0][\"data\"]\n    audio = np.array(audio, dtype=np.float32)\n    if args.model_name == \"spark_tts\":\n        sample_rate = 16000\n    else:\n        sample_rate = 24000\n    sf.write(args.output_audio, audio, sample_rate, \"PCM_16\")\n"
  },
  {
    "path": "runtime/triton_trtllm/docker-compose.cosyvoice2.dit.yml",
    "content": "services:\n  tts:\n    image: soar97/triton-cosyvoice:25.06\n    shm_size: '1gb'\n    ports:\n      - \"8000:8000\"\n      - \"8001:8001\"\n      - \"8002:8002\"\n    environment:\n      - PYTHONIOENCODING=utf-8\n      - MODEL_ID=${MODEL_ID}\n    deploy:\n      resources:\n        reservations:\n          devices:\n            - driver: nvidia\n              device_ids: ['0']\n              capabilities: [gpu]\n    command: >\n      /bin/bash -c \"pip install modelscope && cd /workspace && git clone https://github.com/yuekaizhang/Step-Audio2.git -b trt && git clone https://github.com/yuekaizhang/CosyVoice.git -b streaming && cd CosyVoice && git submodule update --init --recursive && cd runtime/triton_trtllm && bash run_stepaudio2_dit_token2wav.sh 0 3\""
  },
  {
    "path": "runtime/triton_trtllm/docker-compose.cosyvoice2.unet.yml",
    "content": "services:\n  tts:\n    image: soar97/triton-cosyvoice:25.06\n    shm_size: '1gb'\n    ports:\n      - \"8000:8000\"\n      - \"8001:8001\"\n      - \"8002:8002\"\n    environment:\n      - PYTHONIOENCODING=utf-8\n      - MODEL_ID=${MODEL_ID}\n    deploy:\n      resources:\n        reservations:\n          devices:\n            - driver: nvidia\n              device_ids: ['0']\n              capabilities: [gpu]\n    command: >\n      /bin/bash -c \"pip install modelscope && cd /workspace && git clone https://github.com/FunAudioLLM/CosyVoice.git && cd CosyVoice && git submodule update --init --recursive && cd runtime/triton_trtllm && bash run.sh 0 3\""
  },
  {
    "path": "runtime/triton_trtllm/docker-compose.cosyvoice3.yml",
    "content": "services:\n  tts:\n    image: soar97/triton-cosyvoice:25.06\n    shm_size: '1gb'\n    ports:\n      - \"8000:8000\"\n      - \"8001:8001\"\n      - \"8002:8002\"\n    environment:\n      - PYTHONIOENCODING=utf-8\n      - MODEL_ID=${MODEL_ID}\n    deploy:\n      resources:\n        reservations:\n          devices:\n            - driver: nvidia\n              device_ids: ['0']\n              capabilities: [gpu]\n    command: >\n      /bin/bash -c \"cd /workspace && git clone https://github.com/FunAudioLLM/CosyVoice.git && cd CosyVoice && git submodule update --init --recursive && cd runtime/triton_trtllm && bash run_cosyvoice3.sh 0 3\""
  },
  {
    "path": "runtime/triton_trtllm/infer_cosyvoice3.py",
    "content": "\"\"\" Example Usage\n    CUDA_VISIBLE_DEVICES=0 \\\n        python3 infer_cosyvoice3_token2wav.py \\\n            --output-dir $output_dir \\\n            --llm-model-name-or-path $huggingface_model_local_dir \\\n            --token2wav-path $token2wav_model_dir \\\n            --backend $backend \\\n            --batch-size $batch_size --token2wav-batch-size $token2wav_batch_size \\\n            --engine-dir $trt_engines_dir \\\n            --split-name ${dataset} || exit 1\n\"\"\"\nimport argparse\nimport json\nimport os\nimport time\nimport asyncio\n\nimport torch\nimport torchaudio\nimport s3tokenizer\nimport soundfile as sf\nimport requests\nimport httpx\nfrom transformers import AutoTokenizer\nfrom datasets import load_dataset\nfrom torch.utils.data import DataLoader\nfrom functools import partial\nfrom tqdm import tqdm\n\nfrom token2wav_cosyvoice3 import CosyVoice3_Token2Wav\n\ntry:\n    torch.multiprocessing.set_start_method(\"spawn\")\nexcept RuntimeError:\n    pass\n\n\nasync def send_request_async(client, url, payload):\n    response = await client.post(url, json=payload, timeout=None)\n    response.raise_for_status()\n    response_json = response.json()\n    return response_json['choices'][0]['message']['content']\n\n\nasync def send_batch_requests_async(api_base, model_name, chats, temperature, top_p, top_k):\n    async with httpx.AsyncClient() as client:\n        tasks = []\n        for chat in chats:\n            payload = {\n                \"model\": model_name,\n                \"messages\": chat,\n                \"max_tokens\": 2048,\n                \"temperature\": temperature,\n                \"top_p\": top_p,\n                \"top_k\": top_k,\n                \"repetition_penalty\": 1.1,\n                \"stop\": [\"<|eos1|>\", \"<|eos|>\"],\n                \"stream\": False,\n            }\n            tasks.append(send_request_async(client, api_base, payload))\n        return await asyncio.gather(*tasks)\n\n\ndef extract_speech_ids(speech_tokens_str):\n    \"\"\"Extract speech IDs from token strings like <|s_23456|>\"\"\"\n    speech_ids = []\n    for token_str in speech_tokens_str:\n        if token_str.startswith('<|s_') and token_str.endswith('|>'):\n            num_str = token_str[4:-2]\n            num = int(num_str)\n            speech_ids.append(num)\n        else:\n            print(f\"Unexpected token: {token_str}\")\n    return speech_ids\n\n\ndef convert_cosy3_tokens_to_speech_id_str(cosy3_tokens):\n    \"\"\"Convert CosyVoice3 tokens to speech IDs string like <|s_23456|>\"\"\"\n    if hasattr(cosy3_tokens, 'cpu'):\n        cosy3_tokens = cosy3_tokens.cpu().numpy().tolist()\n    speech_id_str = \"\"\n    for token in cosy3_tokens:\n        speech_id_str += f\"<|s_{token}|>\"\n    return speech_id_str\n\n\ndef get_args():\n    parser = argparse.ArgumentParser(description=\"Speech generation using LLM + CosyVoice3\")\n    parser.add_argument(\n        \"--split-name\", type=str, default=\"wenetspeech4tts\",\n        help=\"huggingface dataset split name\",\n    )\n    parser.add_argument(\n        \"--output-dir\", required=True, type=str, help=\"dir to save result\",\n    )\n    parser.add_argument(\n        \"--batch-size\", default=1, type=int,\n        help=\"batch size (per-device) for LLM inference\",\n    )\n    parser.add_argument(\n        \"--token2wav-batch-size\", default=1, type=int,\n        help=\"batch size (per-device) for token2wav inference\",\n    )\n    parser.add_argument(\n        \"--num-workers\", type=int, default=0, help=\"workers for dataloader\",\n    )\n    parser.add_argument(\n        \"--prefetch\", type=int, default=None, help=\"prefetch for dataloader\",\n    )\n    parser.add_argument(\n        \"--llm-model-name-or-path\", required=True, type=str,\n        help=\"CosyVoice3 HF LLM path (e.g. ./hf_cosyvoice3_llm)\",\n    )\n    parser.add_argument(\n        \"--token2wav-path\", required=True, type=str,\n        help=\"CosyVoice3 model path (e.g. /workspace_yuekai/HF/Fun-CosyVoice3-0.5B-2512)\",\n    )\n    parser.add_argument(\n        \"--enable-trt\", action=\"store_true\",\n        help=\"Enable TensorRT for flow decoder estimator\",\n    )\n    parser.add_argument(\n        \"--streaming\", action=\"store_true\",\n        help=\"Enable streaming for flow decoder estimator\",\n    )\n    parser.add_argument(\n        \"--top-p\", type=float, default=0.95, help=\"top p for sampling\",\n    )\n    parser.add_argument(\n        \"--temperature\", type=float, default=0.8, help=\"temperature for sampling\",\n    )\n    parser.add_argument(\n        \"--top-k\", type=int, default=15, help=\"top k for sampling\",\n    )\n    parser.add_argument(\n        \"--backend\", type=str, default=\"hf\",\n        choices=[\"hf\", \"trtllm\", \"vllm\", \"trtllm-serve\"],\n        help=\"Backend to use for LLM inference\",\n    )\n    parser.add_argument(\n        \"--engine-dir\", type=str, default=None,\n        help=\"TensorRT-LLM engine directory (required when backend is 'trtllm')\",\n    )\n    parser.add_argument(\n        \"--kv-cache-free-gpu-memory-fraction\", type=float, default=0.6,\n        help=\"Fraction of GPU memory to free for KV cache (TensorRT-LLM only)\",\n    )\n    parser.add_argument(\n        \"--openai-api-base\", type=str,\n        default=\"http://localhost:8000/v1/chat/completions\",\n        help=\"OpenAI API base URL (for trtllm-serve backend)\",\n    )\n    parser.add_argument(\n        \"--openai-model-name\", type=str, default=\"trt_engines_bfloat16\",\n        help=\"Model name to use with OpenAI API (for trtllm-serve backend)\",\n    )\n    parser.add_argument(\n        \"--epoch\", type=int, default=1, help=\"Epoch to run\",\n    )\n    return parser.parse_args()\n\n\ndef data_collator(batch, tokenizer, s3_tokenizer):\n    \"\"\"Data collator: extracts cosy3 tokens from prompt_audio using v3 s3 tokenizer.\"\"\"\n    device = s3_tokenizer.device if s3_tokenizer is not None else torch.device(\"cpu\")\n    target_sample_rate = 16000\n\n    input_ids_list, prompt_audio_list, prompt_text_list = [], [], []\n    mels, prompt_audio_cosy3tokens_list, full_text_list = [], [], []\n    chat_list = []\n\n    for item in batch:\n        prompt_text, target_text = item[\"prompt_text\"], item[\"target_text\"]\n        prompt_text_list.append(prompt_text)\n        full_text = 'You are a helpful assistant.<|endofprompt|>' + prompt_text + target_text\n        full_text_list.append(full_text)\n\n        # Get prompt audio (convert to 16kHz for s3 tokenizer)\n        ref_audio = torch.from_numpy(item[\"prompt_audio\"][\"array\"]).float().unsqueeze(0)\n        ref_sr = item[\"prompt_audio\"][\"sampling_rate\"]\n        if ref_sr != target_sample_rate:\n            ref_audio = torchaudio.transforms.Resample(ref_sr, target_sample_rate)(ref_audio)\n        prompt_audio_list.append(ref_audio)\n\n        # Extract cosy3 tokens from prompt_audio using v3 s3 tokenizer\n        mels.append(s3tokenizer.log_mel_spectrogram(ref_audio.squeeze(0)))\n\n    # Batch tokenization with v3 tokenizer\n    if len(mels) > 0:\n        mels_padded, mels_lens = s3tokenizer.padding(mels)\n        codes, codes_lens = s3_tokenizer.quantize(mels_padded.to(device), mels_lens.to(device))\n        for i in range(len(codes)):\n            prompt_audio_cosy3tokens_list.append(codes[i, :codes_lens[i].item()])\n\n    # Build LLM inputs\n    for i, prompt_audio_cosy3tokens in enumerate(prompt_audio_cosy3tokens_list):\n        prompt_audio_cosy3_id_str = convert_cosy3_tokens_to_speech_id_str(\n            prompt_audio_cosy3tokens)\n        chat = [\n            {\"role\": \"user\", \"content\": full_text_list[i]},\n            {\"role\": \"assistant\", \"content\": prompt_audio_cosy3_id_str}\n        ]\n        chat_list.append(chat)\n        input_ids = tokenizer.apply_chat_template(\n            chat, tokenize=True, return_tensors='pt', continue_final_message=True)\n        input_ids_list.append(input_ids.squeeze(0))\n\n    ids = [item[\"id\"] for item in batch]\n\n    return {\n        \"input_ids\": input_ids_list,\n        \"ids\": ids,\n        \"prompt_text\": prompt_text_list,\n        \"prompt_audio_list\": prompt_audio_list,\n        \"chat_list\": chat_list,\n    }\n\n\ndef main(args):\n    os.makedirs(args.output_dir, exist_ok=True)\n\n    assert torch.cuda.is_available()\n    local_rank = 0\n    device = torch.device(f\"cuda:{local_rank}\")\n\n    tokenizer = AutoTokenizer.from_pretrained(args.llm_model_name_or_path)\n\n    if args.backend == \"hf\":\n        model = AutoModelForCausalLM.from_pretrained(args.llm_model_name_or_path)\n        model.eval()\n        model.to(device)\n        runner = None\n    elif args.backend == \"trtllm\":\n        if args.engine_dir is None:\n            raise ValueError(\"--engine-dir is required when backend is 'trtllm'\")\n        runtime_rank = tensorrt_llm.mpi_rank()\n        model = None\n        runner_kwargs = dict(\n            engine_dir=args.engine_dir,\n            rank=runtime_rank,\n            max_output_len=2048,\n            enable_context_fmha_fp32_acc=False,\n            max_batch_size=args.batch_size,\n            max_input_len=512,\n            kv_cache_free_gpu_memory_fraction=args.kv_cache_free_gpu_memory_fraction,\n            cuda_graph_mode=False,\n            gather_generation_logits=False,\n        )\n        runner = ModelRunnerCpp.from_dir(**runner_kwargs)\n    elif args.backend == \"vllm\":\n        model = LLM(model=args.llm_model_name_or_path, gpu_memory_utilization=0.4)\n        runner = None\n    elif args.backend == \"trtllm-serve\":\n        model = None\n        runner = None\n    else:\n        raise ValueError(f\"Unsupported backend: {args.backend}\")\n\n    token2wav_model = CosyVoice3_Token2Wav(\n        model_dir=args.token2wav_path, enable_trt=args.enable_trt, device_id=local_rank, streaming=args.streaming\n    )\n\n    # Load v3 s3 tokenizer for prompt audio tokenization in data_collator\n    s3_tokenizer = s3tokenizer.load_model(\n        f\"{args.token2wav_path}/speech_tokenizer_v3.onnx\"\n    ).to(device).eval()\n\n    dataset = load_dataset(\n        \"yuekai/seed_tts_cosy2\",\n        split=args.split_name,\n        trust_remote_code=True,\n    )\n\n    dataloader = DataLoader(\n        dataset,\n        batch_size=args.batch_size,\n        shuffle=False,\n        num_workers=args.num_workers,\n        prefetch_factor=args.prefetch,\n        collate_fn=partial(data_collator, tokenizer=tokenizer, s3_tokenizer=s3_tokenizer),\n    )\n\n    for epoch in range(args.epoch):\n        print(f\"Running epoch {epoch}\")\n        total_llm_time = 0\n        total_token2wav_time = 0\n        total_data_load_time = 0\n        total_llm_post_processing_time = 0\n        total_audio_save_time = 0\n        total_audio_samples = 0\n        start_time = time.time()\n\n        progress_bar = tqdm(total=len(dataset), desc=\"Processing\", unit=\"wavs\")\n\n        last_batch_end_time = time.time()\n        for batch in dataloader:\n            data_loaded_time = time.time()\n            total_data_load_time += data_loaded_time - last_batch_end_time\n\n            with torch.no_grad():\n                llm_start_time = time.time()\n\n                if args.backend == \"hf\":\n                    input_ids_list = batch[\"input_ids\"]\n                    if len(input_ids_list) == 1:\n                        input_ids = input_ids_list[0].unsqueeze(0)\n                        attention_mask = torch.ones_like(input_ids)\n                    else:\n                        max_len = max([len(ids) for ids in input_ids_list])\n                        input_ids_list_new = [\n                            torch.cat([ids, torch.full((max_len - len(ids),), tokenizer.pad_token_id)])\n                            for ids in input_ids_list\n                        ]\n                        input_ids = torch.stack(input_ids_list_new)\n                        attention_mask = torch.zeros_like(input_ids)\n                        for i in range(len(input_ids_list)):\n                            attention_mask[i, :len(input_ids_list[i])] = 1\n\n                    outputs = model.generate(\n                        input_ids=input_ids.to(device),\n                        attention_mask=attention_mask.to(device),\n                        max_new_tokens=2048,\n                        do_sample=True,\n                        top_p=args.top_p,\n                        temperature=args.temperature,\n                        repetition_penalty=1.1,\n                        top_k=args.top_k,\n                    )\n                    torch.cuda.synchronize()\n\n                elif args.backend == \"trtllm\":\n                    batch_input_ids = list(batch[\"input_ids\"])\n                    input_lengths = [x.size(0) for x in batch_input_ids]\n\n                    end_id = tokenizer.convert_tokens_to_ids(\"<|eos1|>\") if \"<|eos1|>\" in tokenizer.get_vocab() else tokenizer.eos_token_id\n                    outputs = runner.generate(\n                        batch_input_ids=batch_input_ids,\n                        max_new_tokens=2048,\n                        end_id=end_id,\n                        pad_id=end_id,\n                        temperature=args.temperature,\n                        top_k=args.top_k,\n                        top_p=args.top_p,\n                        repetition_penalty=1.1,\n                        num_return_sequences=1,\n                        streaming=False,\n                        output_sequence_lengths=True,\n                        output_generation_logits=False,\n                        return_dict=True,\n                        return_all_generated_tokens=False\n                    )\n                    torch.cuda.synchronize()\n                    output_ids, sequence_lengths = outputs[\"output_ids\"], outputs[\"sequence_lengths\"]\n                    num_output_sents, num_beams, _ = output_ids.size()\n                    assert num_beams == 1\n                    batch_size = len(batch[\"input_ids\"])\n                    num_return_sequences = num_output_sents // batch_size\n                    assert num_return_sequences == 1\n                    outputs = []\n                    for i in range(batch_size * num_return_sequences):\n                        batch_idx = i // num_return_sequences\n                        output_begin = input_lengths[batch_idx]\n                        output_end = sequence_lengths[i][0]\n                        outputs_i = output_ids[i][0][:output_end].tolist()\n                        outputs.append(outputs_i)\n\n                elif args.backend == \"vllm\":\n                    input_ids_list = [ids.tolist() for ids in batch[\"input_ids\"]]\n                    sampling_params = SamplingParams(\n                        temperature=args.temperature,\n                        top_p=args.top_p,\n                        top_k=args.top_k,\n                        repetition_penalty=1.1,\n                        max_tokens=2048,\n                    )\n                    outputs = model.generate(prompt_token_ids=input_ids_list, sampling_params=sampling_params)\n                    for j, output in enumerate(outputs):\n                        outputs[j] = input_ids_list[j] + output.outputs[0].token_ids\n\n                elif args.backend == \"trtllm-serve\":\n                    if args.batch_size > 1:\n                        outputs = asyncio.run(send_batch_requests_async(\n                            args.openai_api_base,\n                            args.openai_model_name,\n                            batch[\"chat_list\"],\n                            args.temperature,\n                            args.top_p,\n                            args.top_k,\n                        ))\n                    else:\n                        outputs = []\n                        for chat in batch[\"chat_list\"]:\n                            payload = {\n                                \"model\": args.openai_model_name,\n                                \"messages\": chat,\n                                \"max_tokens\": 2048,\n                                \"temperature\": args.temperature,\n                                \"top_p\": args.top_p,\n                                \"top_k\": args.top_k,\n                                \"repetition_penalty\": 1.1,\n                                \"stop\": [\"<|eos1|>\", \"<|eos|>\"],\n                                \"stream\": False,\n                            }\n                            response = requests.post(args.openai_api_base, json=payload)\n                            response.raise_for_status()\n                            response_json = response.json()\n                            generated_content = response_json['choices'][0]['message']['content']\n                            outputs.append(generated_content)\n\n                llm_end_time = time.time()\n                total_llm_time += (llm_end_time - llm_start_time)\n\n                items_for_token_2wav = []\n                for i in range(len(batch[\"ids\"])):\n                    llm_post_processing_start_time = time.time()\n                    if args.backend == \"trtllm-serve\":\n                        speech_tokens_str = outputs[i].strip().split('><')\n                        if len(speech_tokens_str) > 1:\n                            speech_tokens_str = [\n                                t if t.startswith('<') else '<' + t for t in speech_tokens_str\n                            ]\n                            speech_tokens_str = [\n                                t if t.endswith('>') else t + '>' for t in speech_tokens_str\n                            ]\n                        speech_ids = extract_speech_ids(speech_tokens_str)\n                    else:\n                        input_length = len(batch[\"input_ids\"][i])\n                        generated_ids = outputs[i][input_length:]\n                        speech_tokens_str = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)\n                        speech_ids = extract_speech_ids(speech_tokens_str)\n                    print(i, speech_ids[:10], \"...\", f\"total={len(speech_ids)}\")\n                    if len(speech_ids) == 0:\n                        print(f\"Warning: No speech tokens generated for sample {batch['ids'][i]}, skipping\")\n                        llm_post_processing_end_time = time.time()\n                        total_llm_post_processing_time += llm_post_processing_end_time - llm_post_processing_start_time\n                        continue\n\n                    current_prompt_audio = batch[\"prompt_audio_list\"][i]\n\n                    llm_post_processing_end_time = time.time()\n                    total_llm_post_processing_time += llm_post_processing_end_time - llm_post_processing_start_time\n\n                    items_for_token_2wav.append({\n                        \"speech_ids\": speech_ids,\n                        \"prompt_audio\": current_prompt_audio.squeeze(0),\n                        \"id\": batch[\"ids\"][i]\n                    })\n\n                for i in range(0, len(items_for_token_2wav), args.token2wav_batch_size):\n                    t2w_batch = items_for_token_2wav[i:i + args.token2wav_batch_size]\n                    if not t2w_batch:\n                        continue\n\n                    t2w_speech_tokens = [item[\"speech_ids\"] for item in t2w_batch]\n                    t2w_prompt_audios = [item[\"prompt_audio\"] for item in t2w_batch]\n                    t2w_sample_rates = [16000] * len(t2w_batch)\n\n                    token2wav_start_time = time.time()\n                    generated_wavs = token2wav_model(\n                        t2w_speech_tokens, t2w_prompt_audios, t2w_sample_rates,\n                        streaming=args.streaming,\n                    )\n                    token2wav_end_time = time.time()\n                    total_token2wav_time += (token2wav_end_time - token2wav_start_time)\n\n                    audio_save_start_time = time.time()\n                    for j, audio_hat in enumerate(generated_wavs):\n                        wav = audio_hat.squeeze().cpu().numpy()\n                        total_audio_samples += len(wav)\n                        sf.write(f\"{args.output_dir}/{t2w_batch[j]['id']}.wav\", wav, 24000)\n                        print(f\"Generated audio for sample {t2w_batch[j]['id']} with {len(t2w_speech_tokens[j])} tokens\")\n                    audio_save_end_time = time.time()\n                    total_audio_save_time += audio_save_end_time - audio_save_start_time\n\n            progress_bar.update(len(batch[\"ids\"]))\n            last_batch_end_time = time.time()\n\n        progress_bar.close()\n        end_time = time.time()\n        total_audio_duration_seconds = total_audio_samples / 24000\n\n        log_file_path = os.path.join(args.output_dir, \"log.txt\")\n        with open(log_file_path, 'w') as f:\n            log_data = {\n                \"args\": vars(args),\n                \"data_load_time_seconds\": total_data_load_time,\n                \"llm_time_seconds\": total_llm_time,\n                \"llm_post_processing_time_seconds\": total_llm_post_processing_time,\n                \"token2wav_time_seconds\": total_token2wav_time,\n                \"audio_save_time_seconds\": total_audio_save_time,\n                \"total_audio_duration_seconds\": total_audio_duration_seconds,\n                \"pipeline_time_seconds\": end_time - start_time,\n            }\n            print(log_data)\n            f.write(json.dumps(log_data, indent=4))\n        print(f\"Metrics logged to {log_file_path}\")\n\n\nif __name__ == \"__main__\":\n    args = get_args()\n    if args.backend == \"vllm\":\n        from vllm import LLM, SamplingParams\n    elif args.backend == \"trtllm\":\n        import tensorrt_llm\n        from tensorrt_llm.runtime import ModelRunnerCpp\n    elif args.backend == \"hf\":\n        from transformers import AutoModelForCausalLM\n    elif args.backend == \"trtllm-serve\":\n        pass\n    else:\n        raise ValueError(f\"Unsupported backend: {args.backend}\")\n    main(args)\n"
  },
  {
    "path": "runtime/triton_trtllm/model_repo/audio_tokenizer/1/model.py",
    "content": "# Copyright 2025, NVIDIA CORPORATION & AFFILIATES. 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\n# are met:\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#  * Neither the name of NVIDIA CORPORATION nor the names of its\n#    contributors may be used to endorse or promote products derived\n#    from this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY\n# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\nimport json\nimport torch\nfrom torch.utils.dlpack import to_dlpack\n\nimport triton_python_backend_utils as pb_utils\n\nimport os\nimport numpy as np\nimport s3tokenizer\ntorch.set_num_threads(1)\nORIGINAL_VOCAB_SIZE = 151663\n\n\nclass TritonPythonModel:\n    \"\"\"Triton Python model for audio tokenization.\n\n    This model takes reference audio input and extracts semantic tokens\n    using s3tokenizer.\n    \"\"\"\n\n    def initialize(self, args):\n        \"\"\"Initialize the model.\n\n        Args:\n            args: Dictionary containing model configuration\n        \"\"\"\n        # Parse model parameters\n        parameters = json.loads(args['model_config'])['parameters']\n        model_params = {k: v[\"string_value\"] for k, v in parameters.items()}\n\n        self.device = torch.device(\"cuda\")\n        model_path = os.path.join(model_params[\"model_dir\"], \"speech_tokenizer_v2.onnx\")\n        self.audio_tokenizer = s3tokenizer.load_model(model_path).to(self.device)\n\n    def execute(self, requests):\n        \"\"\"Execute inference on the batched requests.\n\n        Args:\n            requests: List of inference requests\n\n        Returns:\n            List of inference responses containing tokenized outputs\n        \"\"\"\n        mels = []\n\n        # Process each request in batch\n        for request in requests:\n            # Extract input tensors\n            wav_array = pb_utils.get_input_tensor_by_name(\n                request, \"reference_wav\").as_numpy()\n            wav_len = pb_utils.get_input_tensor_by_name(\n                request, \"reference_wav_len\").as_numpy().item()\n\n            wav_array = torch.from_numpy(wav_array).to(self.device)\n            # Prepare inputs\n            wav = wav_array[:, :wav_len].squeeze(0)\n            mels.append(s3tokenizer.log_mel_spectrogram(wav))\n\n        mels, mels_lens = s3tokenizer.padding(mels)\n        codes, codes_lens = self.audio_tokenizer.quantize(mels.to(self.device), mels_lens.to(self.device))\n        codes = codes.clone() + ORIGINAL_VOCAB_SIZE\n\n        responses = []\n        for i in range(len(requests)):\n            prompt_speech_tokens = codes[i, :codes_lens[i].item()]\n            prompt_speech_tokens_tensor = pb_utils.Tensor.from_dlpack(\n                \"prompt_speech_tokens\", to_dlpack(prompt_speech_tokens))\n            inference_response = pb_utils.InferenceResponse(\n                output_tensors=[prompt_speech_tokens_tensor])\n            responses.append(inference_response)\n\n        return responses\n"
  },
  {
    "path": "runtime/triton_trtllm/model_repo/audio_tokenizer/config.pbtxt",
    "content": "# Copyright (c) 2025, NVIDIA CORPORATION.  All rights reserved.\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\nname: \"audio_tokenizer\"\nbackend: \"python\"\nmax_batch_size: ${triton_max_batch_size}\ndynamic_batching {\n    max_queue_delay_microseconds: ${max_queue_delay_microseconds}\n}\nparameters [\n  {\n   key: \"model_dir\",\n   value: {string_value:\"${model_dir}\"}\n  }\n]\n\ninput [\n  {\n    name: \"reference_wav\"\n    data_type: TYPE_FP32\n    dims: [-1]\n  },\n  {\n    name: \"reference_wav_len\"\n    data_type: TYPE_INT32\n    dims: [1]\n  }\n]\noutput [\n  {\n    name: \"prompt_speech_tokens\"\n    data_type: TYPE_INT32\n    dims: [-1]\n  }\n]\n\ninstance_group [\n  {\n    count: 1\n    kind: KIND_CPU\n  }\n]"
  },
  {
    "path": "runtime/triton_trtllm/model_repo/cosyvoice2/1/model.py",
    "content": "# Copyright 2025, NVIDIA CORPORATION & AFFILIATES. 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\n# are met:\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#  * Neither the name of NVIDIA CORPORATION nor the names of its\n#    contributors may be used to endorse or promote products derived\n#    from this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY\n# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nimport json\nimport os\nimport threading\nimport time\nfrom uuid import uuid4\n\nimport numpy as np\nimport torch\nfrom torch.utils.dlpack import from_dlpack, to_dlpack\nimport triton_python_backend_utils as pb_utils\nfrom transformers import AutoTokenizer\n\nimport torchaudio\n\n\nfrom matcha.utils.audio import mel_spectrogram\n\nORIGINAL_VOCAB_SIZE = 151663\ntorch.set_num_threads(1)\n\n\nclass TritonPythonModel:\n    \"\"\"Triton Python model for Spark TTS.\n\n    This model orchestrates the end-to-end TTS pipeline by coordinating\n    between audio tokenizer, LLM, and vocoder components.\n    \"\"\"\n\n    def initialize(self, args):\n        \"\"\"Initialize the model.\n\n        Args:\n            args: Dictionary containing model configuration\n        \"\"\"\n        self.logger = pb_utils.Logger\n        # Parse model parameters\n        self.model_config = json.loads(args['model_config'])\n        parameters = self.model_config['parameters']\n        model_params = {k: v[\"string_value\"] for k, v in parameters.items()}\n        self.logger.log_info(f\"model_params:{model_params}\")\n        self.dynamic_chunk_strategy = model_params.get(\"dynamic_chunk_strategy\", \"exponential\")  # \"exponential\" or \"time_based\"\n        self.logger.log_info(f\"Using dynamic chunk strategy: {self.dynamic_chunk_strategy}\")\n\n        # Initialize tokenizer\n        llm_tokenizer_dir = model_params[\"llm_tokenizer_dir\"]\n        self.tokenizer = AutoTokenizer.from_pretrained(llm_tokenizer_dir)\n        self.prompt_template = \"<|sos|>{input_text}<|task_id|>\"\n        self.eos_token_id = self.tokenizer.convert_tokens_to_ids(\"<|eos1|>\")\n\n        self.device = torch.device(\"cuda\")\n        self.decoupled = pb_utils.using_decoupled_model_transaction_policy(self.model_config)\n\n        self.token_frame_rate = 25\n        self.flow_pre_lookahead_len = 3\n        self.token_hop_len = 15\n\n        spk_info_path = os.path.join(model_params[\"model_dir\"], \"spk2info.pt\")\n        if not os.path.exists(spk_info_path):\n            raise ValueError(f\"spk2info.pt not found in {model_params['model_dir']}\")\n        spk_info = torch.load(spk_info_path, map_location=\"cpu\", weights_only=False)\n        self.default_spk_info = spk_info[\"001\"]\n\n    def forward_llm(self, input_ids):\n        \"\"\"\n        Prepares the response from the language model based on the provided\n        inputs. Creates a `pb_utils.InferenceRequest` object with passed\n        `llm_request_inputs` to send to a decoupled TensorRTLLM model.\n        For each response from the language model:\n            - Checks for errors and raise an exception if any are found.\n            - Extracts the \"output_ids\" tensor from the response.\n            - Determines the finish reason based on the presence of the\n              end-of-sequence token or reaching the maximum length.\n            - Appends the generated token IDs to `output_ids`.\n            - If the finish reason is determined, decodes the output IDs to text\n              and prepares the final response.\n\n        The final response includes the generated text, finish reason,\n        completion tokens, prompt tokens, and total tokens.\n\n        Parameters\n        ----------\n        - llm_request_inputs (dict): A dictionary containing the inputs for the language model.\n\n        Returns\n        -------\n        - pb_utils.InferenceResponse: The response object containing the generated text and additional metadata.\n        \"\"\"\n        # convert input_ids to numpy, with shape [1, sequence_length]\n        input_ids = input_ids.cpu().numpy()\n        max_tokens = 750\n        input_dict = {\n            \"request_output_len\": np.array([[max_tokens]], dtype=np.int32),\n            \"end_id\": np.array([[self.eos_token_id]], dtype=np.int32),\n            \"pad_id\": np.array([[self.eos_token_id]], dtype=np.int32),\n            \"streaming\": np.array([[self.decoupled]], dtype=np.bool_),\n            \"runtime_top_p\": np.array([[0.95]], dtype=np.float32),\n            \"runtime_top_k\": np.array([[50]], dtype=np.int32),\n            \"temperature\": np.array([[0.8]], dtype=np.float32),\n            \"repetition_penalty\": np.array([[1.1]], dtype=np.float32),\n            \"random_seed\": np.array([[42]], dtype=np.uint64),\n            \"input_ids\": input_ids,\n            \"input_lengths\": np.array([[input_ids.shape[1]]], dtype=np.int32),\n        }\n\n        # Convert inputs to Triton tensors\n        input_tensor_list = [\n            pb_utils.Tensor(k, v) for k, v in input_dict.items()\n        ]\n\n        # Create and execute inference request\n        llm_request = pb_utils.InferenceRequest(\n            model_name=\"tensorrt_llm\",\n            requested_output_names=[\"output_ids\", \"sequence_length\"],\n            inputs=input_tensor_list,\n        )\n\n        llm_responses = llm_request.exec(decoupled=self.decoupled)\n        if self.decoupled:\n            for llm_response in llm_responses:\n                if llm_response.has_error():\n                    raise pb_utils.TritonModelException(llm_response.error().message())\n\n                # Extract and process output\n                output_ids = pb_utils.get_output_tensor_by_name(\n                    llm_response, \"output_ids\").as_numpy()\n                seq_lens = pb_utils.get_output_tensor_by_name(\n                    llm_response, \"sequence_length\").as_numpy()\n\n                # Get actual output IDs up to the sequence length\n                actual_output_ids = output_ids[0][0][:seq_lens[0][0]]\n\n                yield actual_output_ids\n        else:\n            llm_response = llm_responses\n            if llm_response.has_error():\n                raise pb_utils.TritonModelException(llm_response.error().message())\n\n            # Extract and process output\n            output_ids = pb_utils.get_output_tensor_by_name(\n                llm_response, \"output_ids\").as_numpy()\n            seq_lens = pb_utils.get_output_tensor_by_name(\n                llm_response, \"sequence_length\").as_numpy()\n\n            # Get actual output IDs up to the sequence length\n            actual_output_ids = output_ids[0][0][:seq_lens[0][0]]\n\n            yield actual_output_ids\n\n    def forward_audio_tokenizer(self, wav, wav_len):\n        \"\"\"Forward pass through the audio tokenizer component.\n\n        Args:\n            wav: Input waveform tensor\n            wav_len: Waveform length tensor\n\n        Returns:\n            Tuple of global and semantic tokens\n        \"\"\"\n        inference_request = pb_utils.InferenceRequest(\n            model_name='audio_tokenizer',\n            requested_output_names=['prompt_speech_tokens'],\n            inputs=[wav, wav_len]\n        )\n\n        inference_response = inference_request.exec()\n        if inference_response.has_error():\n            raise pb_utils.TritonModelException(inference_response.error().message())\n\n        # Extract and convert output tensors\n        prompt_speech_tokens = pb_utils.get_output_tensor_by_name(inference_response, 'prompt_speech_tokens')\n        prompt_speech_tokens = torch.utils.dlpack.from_dlpack(prompt_speech_tokens.to_dlpack()).cpu()\n\n        return prompt_speech_tokens\n\n    def forward_speaker_embedding(self, wav):\n        \"\"\"Forward pass through the speaker embedding component.\n\n        Args:\n            wav: Input waveform tensor\n\n        Returns:\n            Prompt speaker embedding tensor\n        \"\"\"\n        inference_request = pb_utils.InferenceRequest(\n            model_name='speaker_embedding',\n            requested_output_names=['prompt_spk_embedding'],\n            inputs=[pb_utils.Tensor.from_dlpack(\"reference_wav\", to_dlpack(wav))]\n        )\n\n        inference_response = inference_request.exec()\n        if inference_response.has_error():\n            raise pb_utils.TritonModelException(inference_response.error().message())\n\n        # Extract and convert output tensors\n        prompt_spk_embedding = pb_utils.get_output_tensor_by_name(inference_response, 'prompt_spk_embedding')\n        prompt_spk_embedding = torch.utils.dlpack.from_dlpack(prompt_spk_embedding.to_dlpack())\n\n        return prompt_spk_embedding\n\n    def forward_token2wav(\n            self,\n            target_speech_tokens: torch.Tensor,\n            request_id: str,\n            prompt_speech_tokens: torch.Tensor = None,\n            prompt_speech_feat: torch.Tensor = None,\n            prompt_spk_embedding: torch.Tensor = None,\n            token_offset: int = None,\n            finalize: bool = None) -> torch.Tensor:\n        \"\"\"Forward pass through the vocoder component.\n\n        Args:\n            prompt_speech_tokens: Prompt speech tokens tensor\n            prompt_speech_feat: Prompt speech feat tensor\n            prompt_spk_embedding: Prompt spk embedding tensor\n            target_speech_tokens: Target speech tokens tensor\n\n        Returns:\n            Generated waveform tensor\n        \"\"\"\n        target_speech_tokens_tensor = pb_utils.Tensor.from_dlpack(\"target_speech_tokens\", to_dlpack(target_speech_tokens))\n\n        inputs_tensor = [target_speech_tokens_tensor]\n\n        if token_offset is not None:\n            assert finalize is not None\n            token_offset_tensor = pb_utils.Tensor(\"token_offset\", np.array([[token_offset]], dtype=np.int32))\n            finalize_tensor = pb_utils.Tensor(\"finalize\", np.array([[finalize]], dtype=np.bool_))\n            inputs_tensor.append(token_offset_tensor)\n            inputs_tensor.append(finalize_tensor)\n\n        if prompt_spk_embedding is not None:\n            assert prompt_speech_feat is not None\n            prompt_speech_tokens_tensor = pb_utils.Tensor.from_dlpack(\"prompt_speech_tokens\", to_dlpack(prompt_speech_tokens))\n            prompt_speech_feat_tensor = pb_utils.Tensor.from_dlpack(\"prompt_speech_feat\", to_dlpack(prompt_speech_feat))\n            prompt_spk_embedding_tensor = pb_utils.Tensor.from_dlpack(\"prompt_spk_embedding\", to_dlpack(prompt_spk_embedding))\n            inputs_tensor.extend([prompt_speech_tokens_tensor, prompt_speech_feat_tensor, prompt_spk_embedding_tensor])\n\n        # Create and execute inference request\n        inference_request = pb_utils.InferenceRequest(\n            model_name='token2wav',\n            requested_output_names=['waveform'],\n            inputs=inputs_tensor,\n            request_id=request_id,\n        )\n\n        inference_response = inference_request.exec()\n        if inference_response.has_error():\n            raise pb_utils.TritonModelException(inference_response.error().message())\n\n        # Extract and convert output waveform\n        waveform = pb_utils.get_output_tensor_by_name(inference_response, 'waveform')\n        waveform = torch.utils.dlpack.from_dlpack(waveform.to_dlpack()).cpu()\n\n        return waveform\n\n    def parse_input(self, text, prompt_text, prompt_speech_tokens):\n        total_text = f\"{prompt_text}{text}\"\n        prompt = self.prompt_template.format(input_text=total_text)\n        input_ids = self.tokenizer.encode(prompt)\n        input_ids = torch.tensor([input_ids], dtype=torch.int32)\n        input_ids = torch.cat([input_ids, prompt_speech_tokens], dim=1)\n        return input_ids\n\n    def _extract_speech_feat(self, speech):\n        speech_feat = mel_spectrogram(\n            speech,\n            n_fft=1920,\n            num_mels=80,\n            sampling_rate=24000,\n            hop_size=480,\n            win_size=1920,\n            fmin=0,\n            fmax=8000).squeeze(\n            dim=0).transpose(\n            0,\n            1).to(\n                self.device)\n        speech_feat = speech_feat.unsqueeze(dim=0)\n        return speech_feat\n\n    def _llm_gen_thread(self, generated_ids_iter, semantic_token_ids_arr, llm_is_done_flag):\n        for generated_ids in generated_ids_iter:\n            generated_ids = generated_ids.tolist()\n            if len(generated_ids) == 0:\n                break\n            semantic_token_ids_arr.extend(generated_ids)\n        llm_is_done_flag[0] = True\n\n    def execute(self, requests):\n        \"\"\"Execute inference on the batched requests.\n\n        Args:\n            requests: List of inference requests\n\n        Returns:\n            List of inference responses containing generated audio\n        \"\"\"\n        responses = []\n\n        for request in requests:\n            request_id = request.request_id()\n            # Extract input tensors\n            wav = pb_utils.get_input_tensor_by_name(request, \"reference_wav\")\n\n            # Process reference audio through audio tokenizer\n            if wav is not None:\n                wav_len = pb_utils.get_input_tensor_by_name(request, \"reference_wav_len\")\n                prompt_speech_tokens = self.forward_audio_tokenizer(wav, wav_len)\n                prompt_speech_tokens = prompt_speech_tokens.unsqueeze(0)\n\n                wav_tensor = wav.as_numpy()\n                wav_tensor = torch.from_numpy(wav_tensor)[:, :wav_len.as_numpy()[0][0]]\n                prompt_speech_resample = torchaudio.transforms.Resample(orig_freq=16000, new_freq=24000)(wav_tensor)\n                speech_feat = self._extract_speech_feat(prompt_speech_resample)\n                token_len = min(int(speech_feat.shape[1] / 2), prompt_speech_tokens.shape[-1])\n                prompt_speech_feat = speech_feat[:, :2 * token_len].contiguous().half()\n                prompt_speech_tokens = prompt_speech_tokens[:, :token_len].contiguous()\n\n                reference_text = pb_utils.get_input_tensor_by_name(request, \"reference_text\").as_numpy()\n                reference_text = reference_text[0][0].decode('utf-8')\n                prompt_spk_embedding = self.forward_speaker_embedding(wav_tensor)\n            else:\n                # using pre-cached reference text\n                reference_text = self.default_spk_info[\"prompt_text\"]\n                prompt_speech_tokens = self.default_spk_info[\"speech_token\"] + ORIGINAL_VOCAB_SIZE\n                prompt_speech_feat = None\n                prompt_spk_embedding = None\n\n            target_text = pb_utils.get_input_tensor_by_name(request, \"target_text\").as_numpy()\n            target_text = target_text[0][0].decode('utf-8')\n\n            # Prepare prompt for LLM\n            input_ids = self.parse_input(\n                text=target_text,\n                prompt_text=reference_text,\n                prompt_speech_tokens=prompt_speech_tokens,\n            )\n\n            # Generate semantic tokens with LLM\n            generated_ids_iter = self.forward_llm(input_ids)\n\n            token2wav_request_id = request_id or str(uuid4())\n            if self.decoupled:\n                response_sender = request.get_response_sender()\n\n                semantic_token_ids_arr = []\n                llm_is_done_flag = [False]\n\n                llm_thread = threading.Thread(\n                    target=self._llm_gen_thread,\n                    args=(generated_ids_iter, semantic_token_ids_arr, llm_is_done_flag)\n                )\n\n                llm_thread.start()\n\n                token_offset, chunk_index = 0, 0\n                start_time = time.time()\n                this_token_hop_len = self.token_hop_len\n\n                while True:\n                    pending_num = len(semantic_token_ids_arr) - token_offset\n\n                    if llm_is_done_flag[0]:\n                        break\n\n                    if pending_num >= this_token_hop_len + self.flow_pre_lookahead_len:\n                        this_tts_speech_token = semantic_token_ids_arr[:token_offset + this_token_hop_len + self.flow_pre_lookahead_len]\n                        this_tts_speech_token = torch.tensor(this_tts_speech_token).unsqueeze(dim=0).to(torch.int32).to(self.device)\n\n                        sub_tts_speech = self.forward_token2wav(\n                            this_tts_speech_token, token2wav_request_id, prompt_speech_tokens,\n                            prompt_speech_feat, prompt_spk_embedding, token_offset, False\n                        )\n\n                        audio_tensor = pb_utils.Tensor.from_dlpack(\"waveform\", to_dlpack(sub_tts_speech))\n                        inference_response = pb_utils.InferenceResponse(output_tensors=[audio_tensor])\n                        response_sender.send(inference_response)\n\n                        token_offset += this_token_hop_len\n                        self.logger.log_info(f\"chunk_index: {chunk_index}, current_token_hop_len: {this_token_hop_len}\")\n\n                        if self.dynamic_chunk_strategy == \"exponential\":\n                            this_token_hop_len = self.token_frame_rate * (2 ** chunk_index)\n                        elif self.dynamic_chunk_strategy == \"time_based\":\n                            # see https://github.com/qi-hua/async_cosyvoice/blob/main/model.py#L306\n                            cost_time = time.time() - start_time\n                            duration = token_offset / self.token_frame_rate\n                            if chunk_index > 0 and cost_time > 0:\n                                avg_chunk_processing_time = cost_time / (chunk_index + 1)\n                                if avg_chunk_processing_time > 0:\n                                    multiples = (duration - cost_time) / avg_chunk_processing_time\n                                    self.logger.log_info(f\"multiples: {multiples}\")\n                                    next_pending_num = len(semantic_token_ids_arr) - token_offset\n                                    if multiples > 4:\n                                        this_token_hop_len = (next_pending_num // self.token_hop_len + 1) * self.token_hop_len\n                                    elif multiples > 2:\n                                        this_token_hop_len = (next_pending_num // self.token_hop_len) * self.token_hop_len\n                                    else:\n                                        this_token_hop_len = self.token_hop_len\n                                    this_token_hop_len = max(self.token_hop_len, this_token_hop_len)\n                        chunk_index += 1\n                    else:\n                        time.sleep(0.02)\n\n                this_tts_speech_token = torch.tensor(semantic_token_ids_arr).unsqueeze(dim=0).to(torch.int32).to(self.device)\n                sub_tts_speech = self.forward_token2wav(this_tts_speech_token, token2wav_request_id, prompt_speech_tokens, prompt_speech_feat, prompt_spk_embedding, token_offset, True)\n                audio_tensor = pb_utils.Tensor.from_dlpack(\"waveform\", to_dlpack(sub_tts_speech))\n                inference_response = pb_utils.InferenceResponse(output_tensors=[audio_tensor])\n                response_sender.send(inference_response)\n\n                llm_thread.join()\n                response_sender.send(flags=pb_utils.TRITONSERVER_RESPONSE_COMPLETE_FINAL)\n                self.logger.log_info(\"send tritonserver_response_complete_final to end\")\n            else:\n                generated_ids = next(generated_ids_iter)\n                generated_ids = torch.tensor(generated_ids).unsqueeze(0).to(self.device)\n                if generated_ids is None or len(generated_ids) == 0:\n                    raise pb_utils.TritonModelException(\"Generated IDs is None or empty\")\n\n                audio = self.forward_token2wav(generated_ids, token2wav_request_id, prompt_speech_tokens, prompt_speech_feat, prompt_spk_embedding)\n\n                # Prepare response\n                audio_tensor = pb_utils.Tensor.from_dlpack(\"waveform\", to_dlpack(audio))\n                inference_response = pb_utils.InferenceResponse(output_tensors=[audio_tensor])\n                responses.append(inference_response)\n\n        if not self.decoupled:\n            return responses\n"
  },
  {
    "path": "runtime/triton_trtllm/model_repo/cosyvoice2/config.pbtxt",
    "content": "# Copyright (c) 2025, NVIDIA CORPORATION.  All rights reserved.\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\nname: \"cosyvoice2\"\nbackend: \"python\"\nmax_batch_size: ${triton_max_batch_size}\ndynamic_batching {\n    max_queue_delay_microseconds: ${max_queue_delay_microseconds}\n}\nmodel_transaction_policy {\n  decoupled: ${decoupled_mode}\n}\nparameters [\n  {\n   key: \"llm_tokenizer_dir\",\n   value: {string_value:\"${llm_tokenizer_dir}\"}\n  },\n  {\n   key: \"model_dir\",\n   value: {string_value:\"${model_dir}\"}\n  }\n]\n\ninput [\n  {\n    name: \"reference_wav\"\n    data_type: TYPE_FP32\n    dims: [-1]\n    optional: true\n  },\n  {\n    name: \"reference_wav_len\"\n    data_type: TYPE_INT32\n    dims: [1]\n    optional: true\n  },\n  {\n    name: \"reference_text\"\n    data_type: TYPE_STRING\n    dims: [1]\n    optional: true\n  },\n  {\n    name: \"target_text\"\n    data_type: TYPE_STRING\n    dims: [1]\n  }\n]\noutput [\n  {\n    name: \"waveform\"\n    data_type: TYPE_FP32\n    dims: [ -1 ]\n  }\n]\n\ninstance_group [\n  {\n    count: ${bls_instance_num}\n    kind: KIND_CPU\n  }\n]"
  },
  {
    "path": "runtime/triton_trtllm/model_repo/cosyvoice2_dit/1/model.py",
    "content": "# Copyright 2025, NVIDIA CORPORATION & AFFILIATES. 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\n# are met:\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#  * Neither the name of NVIDIA CORPORATION nor the names of its\n#    contributors may be used to endorse or promote products derived\n#    from this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY\n# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nimport json\nimport math\nimport os\nimport re\nimport time\nfrom typing import Dict, List, Tuple, Optional, Union\nimport asyncio\nimport httpx\n\nimport numpy as np\nimport torch\nfrom torch.utils.dlpack import from_dlpack, to_dlpack\nimport triton_python_backend_utils as pb_utils\nfrom transformers import AutoTokenizer\n\nimport torchaudio\n\n\nfrom matcha.utils.audio import mel_spectrogram\n\n\nORIGINAL_VOCAB_SIZE = 151663\ntorch.set_num_threads(1)\n\n\ndef parse_speech_token_string(response_text: str) -> List[int]:\n    \"\"\"\n    Parses a string of speech tokens (e.g., \"<|s_123|><|s_456|>\") into a list of integer IDs.\n    \"\"\"\n    speech_tokens = response_text.strip().split('><')\n    if len(speech_tokens) > 1:\n        # Add back the missing '<' and '>' for proper parsing\n        speech_tokens = ['<' + t if not t.startswith('<') else t for t in speech_tokens]\n        speech_tokens = [t + '>' if not t.endswith('>') else t for t in speech_tokens]\n\n    speech_ids = []\n    for token_str in speech_tokens:\n        match = re.match(r'<\\|s_(\\d+)\\|>', token_str)\n        if match:\n            speech_ids.append(int(match.group(1)))\n    return speech_ids\n\n\nclass TritonPythonModel:\n    \"\"\"Triton Python model for Spark TTS.\n\n    This model orchestrates the end-to-end TTS pipeline by coordinating\n    between audio tokenizer, LLM, and vocoder components.\n    \"\"\"\n\n    def initialize(self, args):\n        \"\"\"Initialize the model.\n\n        Args:\n            args: Dictionary containing model configuration\n        \"\"\"\n        self.logger = pb_utils.Logger\n        # Parse model parameters\n        self.model_config = json.loads(args['model_config'])\n        parameters = self.model_config['parameters']\n        model_params = {k: v[\"string_value\"] for k, v in parameters.items()}\n        self.dynamic_chunk_strategy = model_params.get(\"dynamic_chunk_strategy\", \"exponential\")  # \"exponential\" or \"time_based\"\n        self.logger.log_info(f\"Using dynamic chunk strategy: {self.dynamic_chunk_strategy}\")\n\n        # Initialize tokenizer\n        llm_tokenizer_dir = model_params[\"llm_tokenizer_dir\"]\n        self.tokenizer = AutoTokenizer.from_pretrained(llm_tokenizer_dir)\n        self.prompt_template = \"<|sos|>{input_text}<|task_id|>\"\n        self.eos_token_id = self.tokenizer.convert_tokens_to_ids(\"<|eos1|>\")\n\n        self.device = torch.device(\"cuda\")\n        self.decoupled = pb_utils.using_decoupled_model_transaction_policy(self.model_config)\n\n        self.token_frame_rate = 25\n        self.flow_pre_lookahead_len = 3\n        self.token_hop_len = 15\n\n        self.http_client = httpx.AsyncClient()\n        self.api_base = \"http://localhost:8000/v1/chat/completions\"\n        self.speaker_cache = {}\n\n    def _convert_speech_tokens_to_str(self, speech_tokens: Union[torch.Tensor, List]) -> str:\n        \"\"\"Converts a tensor or list of speech token IDs to a string representation.\"\"\"\n        if isinstance(speech_tokens, torch.Tensor):\n            # Ensure tensor is on CPU and flattened\n            speech_tokens = speech_tokens.cpu().numpy().flatten().tolist()\n\n        speech_id_str = \"\"\n        for token_id in speech_tokens:\n            # Convert token ID back to the speech number N\n            token_num = token_id - ORIGINAL_VOCAB_SIZE\n            speech_id_str += f\"<|s_{token_num}|>\"\n        return speech_id_str\n\n    async def forward_llm_async(self, target_text: str, reference_text: str, prompt_speech_tokens: Union[torch.Tensor, List]):\n        \"\"\"\n        Asynchronously sends a request to the TRTLLM-serve endpoint and processes the streaming response.\n        \"\"\"\n        full_text = f\"{reference_text}{target_text}\"\n        prompt_speech_tokens_str = self._convert_speech_tokens_to_str(prompt_speech_tokens)\n\n        chat = [\n            {\"role\": \"user\", \"content\": full_text},\n            {\"role\": \"assistant\", \"content\": prompt_speech_tokens_str}\n        ]\n\n        payload = {\n            \"model\": \"trt_engines_bfloat16\",\n            \"messages\": chat,\n            \"max_tokens\": 750,\n            \"temperature\": 0.8,\n            \"top_p\": 0.95,\n            \"top_k\": 50,\n            \"repetition_penalty\": 1.1,\n            \"stop\": [\"<|eos1|>\", \"<|eos|>\"],\n            \"stream\": True,\n        }\n\n        buffer = \"\"\n        async with self.http_client.stream(\"POST\", self.api_base, json=payload, timeout=None) as response:\n            response.raise_for_status()\n            async for line in response.aiter_lines():\n                if line.startswith(\"data: \"):\n                    line_data = line[len(\"data: \"):].strip()\n                    if line_data == \"[DONE]\":\n                        break\n                    try:\n                        json_data = json.loads(line_data)\n                        content = json_data.get(\"choices\", [{}])[0].get(\"delta\", {}).get(\"content\")\n                        if content:\n                            buffer += content\n                            while True:\n                                match = re.search(r\"<\\|s_(\\d+)\\|>\", buffer)\n                                if not match:\n                                    break\n\n                                token_num = int(match.group(1))\n                                final_id = token_num + ORIGINAL_VOCAB_SIZE\n                                yield final_id\n                                buffer = buffer[match.end():]\n                    except json.JSONDecodeError:\n                        self.logger.log_info(f\"Skipping non-JSON line: {line_data}\")\n                        continue\n\n        # Process any remaining complete tokens in the buffer after the stream ends\n        while True:\n            match = re.search(r\"<\\|s_(\\d+)\\|>\", buffer)\n            if not match:\n                break\n            token_num = int(match.group(1))\n            final_id = token_num + ORIGINAL_VOCAB_SIZE\n            yield final_id\n            buffer = buffer[match.end():]\n\n    def forward_audio_tokenizer(self, wav, wav_len):\n        \"\"\"Forward pass through the audio tokenizer component.\n\n        Args:\n            wav: Input waveform tensor\n            wav_len: Waveform length tensor\n\n        Returns:\n            Tuple of global and semantic tokens\n        \"\"\"\n        inference_request = pb_utils.InferenceRequest(\n            model_name='audio_tokenizer',\n            requested_output_names=['prompt_speech_tokens'],\n            inputs=[wav, wav_len]\n        )\n\n        inference_response = inference_request.exec()\n        if inference_response.has_error():\n            raise pb_utils.TritonModelException(inference_response.error().message())\n\n        # Extract and convert output tensors\n        prompt_speech_tokens = pb_utils.get_output_tensor_by_name(inference_response, 'prompt_speech_tokens')\n        prompt_speech_tokens = torch.utils.dlpack.from_dlpack(prompt_speech_tokens.to_dlpack()).cpu()\n\n        return prompt_speech_tokens\n\n    def forward_speaker_embedding(self, wav):\n        \"\"\"Forward pass through the speaker embedding component.\n\n        Args:\n            wav: Input waveform tensor\n\n        Returns:\n            Prompt speaker embedding tensor\n        \"\"\"\n        inference_request = pb_utils.InferenceRequest(\n            model_name='speaker_embedding',\n            requested_output_names=['prompt_spk_embedding'],\n            inputs=[pb_utils.Tensor.from_dlpack(\"reference_wav\", to_dlpack(wav))]\n        )\n\n        inference_response = inference_request.exec()\n        if inference_response.has_error():\n            raise pb_utils.TritonModelException(inference_response.error().message())\n\n        # Extract and convert output tensors\n        prompt_spk_embedding = pb_utils.get_output_tensor_by_name(inference_response, 'prompt_spk_embedding')\n        prompt_spk_embedding = torch.utils.dlpack.from_dlpack(prompt_spk_embedding.to_dlpack())\n\n        return prompt_spk_embedding\n\n    async def forward_token2wav(\n            self,\n            index: int,\n            target_speech_tokens: torch.Tensor,\n            request_id: str,\n            reference_wav: object,\n            reference_wav_len: object,\n            finalize: bool = None) -> torch.Tensor:\n        \"\"\"Forward pass through the vocoder component.\n\n        Args:\n            index: Index of the request\n            target_speech_tokens: Target speech tokens tensor\n            request_id: Request ID\n            reference_wav: Reference waveform tensor\n            reference_wav_len: Reference waveform length tensor\n            finalize: Whether to finalize the request\n\n        Returns:\n            Generated waveform tensor\n        \"\"\"\n        target_speech_tokens_tensor = pb_utils.Tensor.from_dlpack(\"target_speech_tokens\", to_dlpack(target_speech_tokens))\n        finalize_tensor = pb_utils.Tensor(\"finalize\", np.array([[finalize]], dtype=np.bool_))\n        inputs_tensor = [target_speech_tokens_tensor, reference_wav, reference_wav_len, finalize_tensor]\n\n        # Create and execute inference request\n        inference_request = pb_utils.InferenceRequest(\n            model_name='token2wav_dit',\n            requested_output_names=[\n                \"waveform\",\n            ],\n            inputs=inputs_tensor,\n            request_id=request_id,\n            parameters={\"priority\": index + 1},\n        )\n\n        inference_response = await inference_request.async_exec()\n        if inference_response.has_error():\n            raise pb_utils.TritonModelException(inference_response.error().message())\n\n        # Extract and convert output waveform\n        waveform = pb_utils.get_output_tensor_by_name(inference_response, 'waveform')\n        waveform = torch.utils.dlpack.from_dlpack(waveform.to_dlpack()).cpu()\n\n        return waveform\n\n    def _extract_speech_feat(self, speech):\n        speech_feat = mel_spectrogram(\n            speech,\n            n_fft=1920,\n            num_mels=80,\n            sampling_rate=24000,\n            hop_size=480,\n            win_size=1920,\n            fmin=0,\n            fmax=8000).squeeze(\n            dim=0).transpose(\n            0,\n            1).to(\n                self.device)\n        speech_feat = speech_feat.unsqueeze(dim=0)\n        return speech_feat\n\n    async def _process_request(self, request):\n        request_id = request.request_id()\n\n        reference_text = pb_utils.get_input_tensor_by_name(request, \"reference_text\").as_numpy()\n        reference_text = reference_text[0][0].decode('utf-8')\n\n        wav = pb_utils.get_input_tensor_by_name(request, \"reference_wav\")\n        wav_len = pb_utils.get_input_tensor_by_name(request, \"reference_wav_len\")\n\n        if reference_text not in self.speaker_cache:\n            self.speaker_cache[reference_text] = self.forward_audio_tokenizer(wav, wav_len).unsqueeze(0)\n        prompt_speech_tokens = self.speaker_cache[reference_text]\n\n        target_text = pb_utils.get_input_tensor_by_name(request, \"target_text\").as_numpy()\n        target_text = target_text[0][0].decode('utf-8')\n\n        if self.decoupled:\n            response_sender = request.get_response_sender()\n\n            semantic_token_ids_arr = []\n            token_offset, chunk_index = 0, 0\n            start_time = time.time()\n            this_token_hop_len = self.token_hop_len\n            async for generated_ids in self.forward_llm_async(\n                target_text=target_text,\n                reference_text=reference_text,\n                prompt_speech_tokens=prompt_speech_tokens,\n            ):\n                if not generated_ids:\n                    break\n                semantic_token_ids_arr.append(generated_ids)\n                while True:\n                    pending_num = len(semantic_token_ids_arr) - token_offset\n                    if pending_num >= this_token_hop_len + self.flow_pre_lookahead_len:\n                        this_tts_speech_token = semantic_token_ids_arr[token_offset:token_offset + this_token_hop_len + self.flow_pre_lookahead_len]\n                        this_tts_speech_token = torch.tensor(this_tts_speech_token).unsqueeze(dim=0).to(torch.int32).to(self.device)\n                        sub_tts_speech = await self.forward_token2wav(\n                            chunk_index,\n                            this_tts_speech_token, request_id, wav, wav_len, False\n                        )\n                        audio_tensor = pb_utils.Tensor.from_dlpack(\"waveform\", to_dlpack(sub_tts_speech))\n                        inference_response = pb_utils.InferenceResponse(output_tensors=[audio_tensor])\n                        response_sender.send(inference_response)\n\n                        token_offset += this_token_hop_len\n\n                        if self.dynamic_chunk_strategy == \"exponential\":\n                            this_token_hop_len = self.token_frame_rate * (2 ** chunk_index)\n                        elif self.dynamic_chunk_strategy == \"equal\":\n                            this_token_hop_len = self.token_hop_len\n                        elif self.dynamic_chunk_strategy == \"time_based\":\n                            # see https://github.com/qi-hua/async_cosyvoice/blob/main/model.py#L306\n                            cost_time = time.time() - start_time\n                            duration = token_offset / self.token_frame_rate\n                            if chunk_index > 0 and cost_time > 0:\n                                avg_chunk_processing_time = cost_time / (chunk_index + 1)\n                                if avg_chunk_processing_time > 0:\n                                    multiples = (duration - cost_time) / avg_chunk_processing_time\n                                    next_pending_num = len(semantic_token_ids_arr) - token_offset\n                                    if multiples > 4:\n                                        this_token_hop_len = (next_pending_num // self.token_hop_len + 1) * self.token_hop_len\n                                    elif multiples > 2:\n                                        this_token_hop_len = (next_pending_num // self.token_hop_len) * self.token_hop_len\n                                    else:\n                                        this_token_hop_len = self.token_hop_len\n                                    this_token_hop_len = max(self.token_hop_len, this_token_hop_len)\n                        chunk_index += 1\n                    else:\n                        break\n\n            this_tts_speech_token = torch.tensor(semantic_token_ids_arr[token_offset:]).unsqueeze(dim=0).to(torch.int32).to(self.device)\n            sub_tts_speech = await self.forward_token2wav(chunk_index, this_tts_speech_token, request_id, wav, wav_len, True)\n            audio_tensor = pb_utils.Tensor.from_dlpack(\"waveform\", to_dlpack(sub_tts_speech))\n            inference_response = pb_utils.InferenceResponse(output_tensors=[audio_tensor])\n            response_sender.send(inference_response)\n\n            response_sender.send(flags=pb_utils.TRITONSERVER_RESPONSE_COMPLETE_FINAL)\n        else:\n            raise NotImplementedError(\"Offline TTS mode is not supported\")\n\n    async def execute(self, requests):\n        \"\"\"Execute inference on the batched requests.\n\n        Args:\n            requests: List of inference requests\n\n        Returns:\n            List of inference responses containing generated audio\n        \"\"\"\n        tasks = [\n            asyncio.create_task(self._process_request(request))\n            for request in requests\n        ]\n        await asyncio.gather(*tasks)\n        return None\n\n    def finalize(self):\n        self.logger.log_info(\"Finalizing CosyVoice DIT model\")\n        if hasattr(self, \"http_client\"):\n            asyncio.run(self.http_client.aclose())\n"
  },
  {
    "path": "runtime/triton_trtllm/model_repo/cosyvoice2_dit/config.pbtxt",
    "content": "# Copyright (c) 2025, NVIDIA CORPORATION.  All rights reserved.\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\nname: \"cosyvoice2_dit\"\nbackend: \"python\"\nmax_batch_size: ${triton_max_batch_size}\ndynamic_batching {\n    max_queue_delay_microseconds: ${max_queue_delay_microseconds}\n}\nmodel_transaction_policy {\n  decoupled: ${decoupled_mode}\n}\nparameters [\n  {\n   key: \"llm_tokenizer_dir\",\n   value: {string_value:\"${llm_tokenizer_dir}\"}\n  },\n  {\n   key: \"model_dir\",\n   value: {string_value:\"${model_dir}\"}\n  }\n]\n\ninput [\n  {\n    name: \"reference_wav\"\n    data_type: TYPE_FP32\n    dims: [-1]\n    optional: true\n  },\n  {\n    name: \"reference_wav_len\"\n    data_type: TYPE_INT32\n    dims: [1]\n    optional: true\n  },\n  {\n    name: \"reference_text\"\n    data_type: TYPE_STRING\n    dims: [1]\n    optional: true\n  },\n  {\n    name: \"target_text\"\n    data_type: TYPE_STRING\n    dims: [1]\n  }\n]\noutput [\n  {\n    name: \"waveform\"\n    data_type: TYPE_FP32\n    dims: [ -1 ]\n  }\n]\n\ninstance_group [\n  {\n    count: ${bls_instance_num}\n    kind: KIND_CPU\n  }\n]"
  },
  {
    "path": "runtime/triton_trtllm/model_repo/speaker_embedding/1/model.py",
    "content": "# Copyright 2025, NVIDIA CORPORATION & AFFILIATES. 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\n# are met:\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#  * Neither the name of NVIDIA CORPORATION nor the names of its\n#    contributors may be used to endorse or promote products derived\n#    from this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY\n# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\nimport json\nimport torch\nfrom torch.utils.dlpack import to_dlpack\n\nimport triton_python_backend_utils as pb_utils\n\nimport os\nimport numpy as np\nimport torchaudio.compliance.kaldi as kaldi\nfrom cosyvoice.utils.file_utils import convert_onnx_to_trt\nfrom cosyvoice.utils.common import TrtContextWrapper\nimport onnxruntime\n\n\nclass TritonPythonModel:\n    \"\"\"Triton Python model for audio tokenization.\n\n    This model takes reference audio input and extracts semantic tokens\n    using s3tokenizer.\n    \"\"\"\n\n    def initialize(self, args):\n        \"\"\"Initialize the model.\n\n        Args:\n            args: Dictionary containing model configuration\n        \"\"\"\n        # Parse model parameters\n        parameters = json.loads(args['model_config'])['parameters']\n        model_params = {k: v[\"string_value\"] for k, v in parameters.items()}\n\n        self.device = torch.device(\"cuda\")\n\n        model_dir = model_params[\"model_dir\"]\n        gpu = \"l20\"\n        enable_trt = True\n        if enable_trt:\n            self.load_spk_trt(f'{model_dir}/campplus.{gpu}.fp32.trt',\n                              f'{model_dir}/campplus.onnx',\n                              1,\n                              False)\n        else:\n            campplus_model = f'{model_dir}/campplus.onnx'\n            option = onnxruntime.SessionOptions()\n            option.graph_optimization_level = onnxruntime.GraphOptimizationLevel.ORT_ENABLE_ALL\n            option.intra_op_num_threads = 1\n            self.spk_model = onnxruntime.InferenceSession(campplus_model, sess_options=option, providers=[\"CPUExecutionProvider\"])\n\n    def load_spk_trt(self, spk_model, spk_onnx_model, trt_concurrent=1, fp16=True):\n        if not os.path.exists(spk_model) or os.path.getsize(spk_model) == 0:\n            trt_kwargs = self.get_spk_trt_kwargs()\n            convert_onnx_to_trt(spk_model, trt_kwargs, spk_onnx_model, fp16)\n        import tensorrt as trt\n        with open(spk_model, 'rb') as f:\n            spk_engine = trt.Runtime(trt.Logger(trt.Logger.INFO)).deserialize_cuda_engine(f.read())\n        assert spk_engine is not None, 'failed to load trt {}'.format(spk_model)\n        self.spk_model = TrtContextWrapper(spk_engine, trt_concurrent=trt_concurrent, device=self.device)\n\n    def get_spk_trt_kwargs(self):\n        min_shape = [(1, 4, 80)]\n        opt_shape = [(1, 500, 80)]\n        max_shape = [(1, 3000, 80)]\n        input_names = [\"input\"]\n        return {'min_shape': min_shape, 'opt_shape': opt_shape, 'max_shape': max_shape, 'input_names': input_names}\n\n    def _extract_spk_embedding(self, speech):\n        feat = kaldi.fbank(speech,\n                           num_mel_bins=80,\n                           dither=0,\n                           sample_frequency=16000)\n        spk_feat = feat - feat.mean(dim=0, keepdim=True)\n\n        if isinstance(self.spk_model, onnxruntime.InferenceSession):\n            embedding = self.spk_model.run(\n                None, {self.spk_model.get_inputs()[0].name: spk_feat.unsqueeze(dim=0).cpu().numpy()}\n            )[0].flatten().tolist()\n            embedding = torch.tensor([embedding]).to(self.device)\n        else:\n            [spk_model, stream], trt_engine = self.spk_model.acquire_estimator()\n            # NOTE need to synchronize when switching stream\n            with torch.cuda.device(self.device):\n                torch.cuda.current_stream().synchronize()\n                spk_feat = spk_feat.unsqueeze(dim=0).to(self.device)\n                batch_size = spk_feat.size(0)\n\n                with stream:\n                    spk_model.set_input_shape('input', (batch_size, spk_feat.size(1), 80))\n                    embedding = torch.empty((batch_size, 192), device=spk_feat.device)\n\n                    data_ptrs = [spk_feat.contiguous().data_ptr(),\n                                 embedding.contiguous().data_ptr()]\n                    for i, j in enumerate(data_ptrs):\n\n                        spk_model.set_tensor_address(trt_engine.get_tensor_name(i), j)\n                    # run trt engine\n                    assert spk_model.execute_async_v3(torch.cuda.current_stream().cuda_stream) is True\n                    torch.cuda.current_stream().synchronize()\n                self.spk_model.release_estimator(spk_model, stream)\n\n        return embedding.half()\n\n    def execute(self, requests):\n        \"\"\"Execute inference on the batched requests.\n\n        Args:\n            requests: List of inference requests\n\n        Returns:\n            List of inference responses containing tokenized outputs\n        \"\"\"\n        responses = []\n        # Process each request in batch\n        for request in requests:\n            # Extract input tensors\n            wav_array = pb_utils.get_input_tensor_by_name(\n                request, \"reference_wav\").as_numpy()\n            wav_array = torch.from_numpy(wav_array).to(self.device)\n\n            embedding = self._extract_spk_embedding(wav_array)\n\n            prompt_spk_embedding_tensor = pb_utils.Tensor.from_dlpack(\n                \"prompt_spk_embedding\", to_dlpack(embedding))\n            inference_response = pb_utils.InferenceResponse(\n                output_tensors=[prompt_spk_embedding_tensor])\n\n            responses.append(inference_response)\n\n        return responses\n"
  },
  {
    "path": "runtime/triton_trtllm/model_repo/speaker_embedding/config.pbtxt",
    "content": "# Copyright (c) 2025, NVIDIA CORPORATION.  All rights reserved.\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\nname: \"speaker_embedding\"\nbackend: \"python\"\nmax_batch_size: ${triton_max_batch_size}\ndynamic_batching {\n    max_queue_delay_microseconds: ${max_queue_delay_microseconds}\n}\nparameters [\n  {\n   key: \"model_dir\",\n   value: {string_value:\"${model_dir}\"}\n  }\n]\n\ninput [\n  {\n    name: \"reference_wav\"\n    data_type: TYPE_FP32\n    dims: [-1]\n  }\n]\noutput [\n  {\n    name: \"prompt_spk_embedding\"\n    data_type: TYPE_FP16\n    dims: [-1]\n  }\n]\n\ninstance_group [\n  {\n    count: 1\n    kind: KIND_CPU\n  }\n]"
  },
  {
    "path": "runtime/triton_trtllm/model_repo/tensorrt_llm/1/.gitkeep",
    "content": ""
  },
  {
    "path": "runtime/triton_trtllm/model_repo/tensorrt_llm/config.pbtxt",
    "content": "# Copyright 2024, NVIDIA CORPORATION & AFFILIATES. 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\n# are met:\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#  * Neither the name of NVIDIA CORPORATION nor the names of its\n#    contributors may be used to endorse or promote products derived\n#    from this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY\n# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nname: \"tensorrt_llm\"\nbackend: \"${triton_backend}\"\nmax_batch_size: ${triton_max_batch_size}\n\nmodel_transaction_policy {\n  decoupled: ${decoupled_mode}\n}\n\ndynamic_batching {\n    preferred_batch_size: [ ${triton_max_batch_size} ]\n    max_queue_delay_microseconds: ${max_queue_delay_microseconds}\n    default_queue_policy: { max_queue_size: ${max_queue_size} }\n}\n\ninput [\n  {\n    name: \"input_ids\"\n    data_type: TYPE_INT32\n    dims: [ -1 ]\n    allow_ragged_batch: true\n    optional: true\n  },\n  {\n    name: \"encoder_input_features\"\n    data_type: ${encoder_input_features_data_type}\n    dims: [ -1, -1 ]\n    allow_ragged_batch: true\n    optional: true\n  },\n  {\n    name: \"encoder_output_lengths\"\n    data_type: TYPE_INT32\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  {\n    name: \"input_lengths\"\n    data_type: TYPE_INT32\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n  },\n  {\n    name: \"request_output_len\"\n    data_type: TYPE_INT32\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n  },\n  {\n    name: \"num_return_sequences\"\n    data_type: TYPE_INT32\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  {\n    name: \"draft_input_ids\"\n    data_type: TYPE_INT32\n    dims: [ -1 ]\n    optional: true\n    allow_ragged_batch: true\n  },\n  {\n    name: \"decoder_input_ids\"\n    data_type: TYPE_INT32\n    dims: [ -1 ]\n    optional: true\n    allow_ragged_batch: true\n  },\n  {\n    name: \"decoder_input_lengths\"\n    data_type: TYPE_INT32\n    dims: [ 1 ]\n    optional: true\n    reshape: { shape: [ ] }\n  },\n  {\n    name: \"draft_logits\"\n    data_type: ${logits_datatype}\n    dims: [ -1, -1 ]\n    optional: true\n    allow_ragged_batch: true\n  },\n  {\n    name: \"draft_acceptance_threshold\"\n    data_type: TYPE_FP32\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  {\n    name: \"end_id\"\n    data_type: TYPE_INT32\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  {\n    name: \"pad_id\"\n    data_type: TYPE_INT32\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  {\n    name: \"stop_words_list\"\n    data_type: TYPE_INT32\n    dims: [ 2, -1 ]\n    optional: true\n    allow_ragged_batch: true\n  },\n  {\n    name: \"bad_words_list\"\n    data_type: TYPE_INT32\n    dims: [ 2, -1 ]\n    optional: true\n    allow_ragged_batch: true\n  },\n  {\n    name: \"embedding_bias\"\n    data_type: TYPE_FP32\n    dims: [ -1 ]\n    optional: true\n    allow_ragged_batch: true\n  },\n  {\n    name: \"beam_width\"\n    data_type: TYPE_INT32\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  {\n    name: \"temperature\"\n    data_type: TYPE_FP32\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  {\n    name: \"runtime_top_k\"\n    data_type: TYPE_INT32\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  {\n    name: \"runtime_top_p\"\n    data_type: TYPE_FP32\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  {\n    name: \"runtime_top_p_min\"\n    data_type: TYPE_FP32\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  {\n    name: \"runtime_top_p_decay\"\n    data_type: TYPE_FP32\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  {\n    name: \"runtime_top_p_reset_ids\"\n    data_type: TYPE_INT32\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  {\n    name: \"len_penalty\"\n    data_type: TYPE_FP32\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  {\n    name: \"early_stopping\"\n    data_type: TYPE_BOOL\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  {\n    name: \"repetition_penalty\"\n    data_type: TYPE_FP32\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  {\n    name: \"min_length\"\n    data_type: TYPE_INT32\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  {\n    name: \"beam_search_diversity_rate\"\n    data_type: TYPE_FP32\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  {\n    name: \"presence_penalty\"\n    data_type: TYPE_FP32\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  {\n    name: \"frequency_penalty\"\n    data_type: TYPE_FP32\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  {\n    name: \"random_seed\"\n    data_type: TYPE_UINT64\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  {\n    name: \"return_log_probs\"\n    data_type: TYPE_BOOL\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  {\n    name: \"return_context_logits\"\n    data_type: TYPE_BOOL\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  {\n    name: \"return_generation_logits\"\n    data_type: TYPE_BOOL\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  {\n    name: \"return_perf_metrics\"\n    data_type: TYPE_BOOL\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  {\n    name: \"exclude_input_in_output\"\n    data_type: TYPE_BOOL\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  {\n    name: \"stop\"\n    data_type: TYPE_BOOL\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  {\n    name: \"streaming\"\n    data_type: TYPE_BOOL\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  {\n    name: \"prompt_embedding_table\"\n    data_type: TYPE_FP16\n    dims: [ -1, -1 ]\n    optional: true\n    allow_ragged_batch: true\n  },\n  {\n    name: \"prompt_table_extra_ids\"\n    data_type: TYPE_UINT64\n    dims: [ -1 ]\n    optional: true\n    allow_ragged_batch: true\n  },\n  {\n    name: \"prompt_vocab_size\"\n    data_type: TYPE_INT32\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  # cross_attention_mask shape `[bs, seq_len, num_images*num_tiles]`\n  {\n    name: \"cross_attention_mask\"\n    data_type: TYPE_BOOL\n    dims: [ -1, -1 ]\n    optional: true\n    allow_ragged_batch: true\n  },\n  # Mrope param when mrope is used\n  {\n    name: \"mrope_rotary_cos_sin\"\n    data_type: TYPE_FP32\n    dims: [ -1 ]\n    optional: true\n  },\n  {\n    name: \"mrope_position_deltas\"\n    data_type: TYPE_INT64\n    dims: [ 1 ]\n    optional: true\n  },\n  # the unique task ID for the given LoRA.\n  # To perform inference with a specific LoRA for the first time `lora_task_id` `lora_weights` and `lora_config` must all be given.\n  # The LoRA will be cached, so that subsequent requests for the same task only require `lora_task_id`.\n  # If the cache is full the oldest LoRA will be evicted to make space for new ones.  An error is returned if `lora_task_id` is not cached.\n  {\n    name: \"lora_task_id\"\n    data_type: TYPE_UINT64\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  # weights for a lora adapter shape [ num_lora_modules_layers, D x Hi + Ho x D ]\n  # where the last dimension holds the in / out adapter weights for the associated module (e.g. attn_qkv) and model layer\n  # each of the in / out tensors are first flattened and then concatenated together in the format above.\n  # D=adapter_size (R value), Hi=hidden_size_in, Ho=hidden_size_out.\n  {\n    name: \"lora_weights\"\n    data_type: TYPE_FP16\n    dims: [ -1, -1 ]\n    optional: true\n    allow_ragged_batch: true\n  },\n  # module identifier (same size a first dimension of lora_weights)\n  # See LoraModule::ModuleType for model id mapping\n  #\n  # \"attn_qkv\": 0     # compbined qkv adapter\n  # \"attn_q\": 1       # q adapter\n  # \"attn_k\": 2       # k adapter\n  # \"attn_v\": 3       # v adapter\n  # \"attn_dense\": 4   # adapter for the dense layer in attention\n  # \"mlp_h_to_4h\": 5  # for llama2 adapter for gated mlp layer after attention / RMSNorm: up projection\n  # \"mlp_4h_to_h\": 6  # for llama2 adapter for gated mlp layer after attention / RMSNorm: down projection\n  # \"mlp_gate\": 7     # for llama2 adapter for gated mlp later after attention / RMSNorm: gate\n  #\n  # last dim holds [ module_id, layer_idx, adapter_size (D aka R value) ]\n  {\n    name: \"lora_config\"\n    data_type: TYPE_INT32\n    dims: [ -1, 3 ]\n    optional: true\n    allow_ragged_batch: true\n  },\n  {\n    name: \"context_phase_params\"\n    data_type: TYPE_UINT8\n    dims: [ -1 ]\n    optional: true\n    allow_ragged_batch: true\n  },\n  # skip_cross_attn_blocks shape `[bs, 1]`, only used in mllama\n  {\n    name: \"skip_cross_attn_blocks\"\n    data_type: TYPE_BOOL\n    dims: [ 1 ]\n    optional: true\n    allow_ragged_batch: true\n  },\n  {\n    name: \"retention_token_range_starts\"\n    data_type: TYPE_INT32\n    dims: [ -1 ]\n    optional: true\n    allow_ragged_batch: true\n  },\n  {\n    name: \"retention_token_range_ends\"\n    data_type: TYPE_INT32\n    dims: [ -1 ]\n    optional: true\n    allow_ragged_batch: true\n  },\n  {\n    name: \"retention_token_range_priorities\"\n    data_type: TYPE_INT32\n    dims: [ -1 ]\n    optional: true\n    allow_ragged_batch: true\n  },\n  {\n    name: \"retention_token_range_durations_ms\"\n    data_type: TYPE_INT32\n    dims: [ -1 ]\n    optional: true\n    allow_ragged_batch: true\n  },\n  {\n    name: \"retention_decode_priority\"\n    data_type: TYPE_INT32\n    dims: [ 1 ]\n    optional: true\n    allow_ragged_batch: true\n  },\n  {\n    name: \"retention_decode_duration_ms\"\n    data_type: TYPE_INT32\n    dims: [ 1 ]\n    optional: true\n    allow_ragged_batch: true\n  },\n  {\n    name: \"guided_decoding_guide_type\"\n    data_type: TYPE_STRING\n    dims: [ 1 ]\n    optional: true\n    allow_ragged_batch: true\n  },\n  {\n    name: \"guided_decoding_guide\"\n    data_type: TYPE_STRING\n    dims: [ 1 ]\n    optional: true\n    allow_ragged_batch: true\n  },\n  {\n    name: \"lookahead_window_size\"\n    data_type: TYPE_INT32\n    dims: [ 1 ]\n    optional: true\n    allow_ragged_batch: true\n  },\n  {\n    name: \"lookahead_ngram_size\"\n    data_type: TYPE_INT32\n    dims: [ 1 ]\n    optional: true\n    allow_ragged_batch: true\n  },\n  {\n    name: \"lookahead_verification_set_size\"\n    data_type: TYPE_INT32\n    dims: [ 1 ]\n    optional: true\n    allow_ragged_batch: true\n  }\n]\noutput [\n  {\n    name: \"output_ids\"\n    data_type: TYPE_INT32\n    dims: [ -1, -1 ]\n  },\n  {\n    name: \"sequence_length\"\n    data_type: TYPE_INT32\n    dims: [ -1 ]\n  },\n  {\n    name: \"cum_log_probs\"\n    data_type: TYPE_FP32\n    dims: [ -1 ]\n  },\n  {\n    name: \"output_log_probs\"\n    data_type: TYPE_FP32\n    dims: [ -1, -1 ]\n  },\n  {\n    name: \"context_logits\"\n    data_type: ${logits_datatype}\n    dims: [ -1, -1 ]\n  },\n  {\n    name: \"generation_logits\"\n    data_type: ${logits_datatype}\n    dims: [ -1, -1, -1 ]\n  },\n  {\n    name: \"batch_index\"\n    data_type: TYPE_INT32\n    dims: [ 1 ]\n  },\n  {\n    name: \"sequence_index\"\n    data_type: TYPE_INT32\n    dims: [ 1 ]\n  },\n  {\n    name: \"context_phase_params\"\n    data_type: TYPE_UINT8\n    dims: [ -1 ]\n  },\n  {\n    name: \"kv_cache_alloc_new_blocks\"\n    data_type: TYPE_INT32\n    dims: [ 1 ]\n  },\n  {\n    name: \"kv_cache_reused_blocks\"\n    data_type: TYPE_INT32\n    dims: [ 1 ]\n  },\n  {\n    name: \"kv_cache_alloc_total_blocks\"\n    data_type: TYPE_INT32\n    dims: [ 1 ]\n  },\n  {\n    name: \"arrival_time_ns\"\n    data_type: TYPE_INT64\n    dims: [ 1 ]\n  },\n  {\n    name: \"first_scheduled_time_ns\"\n    data_type: TYPE_INT64\n    dims: [ 1 ]\n  },\n  {\n    name: \"first_token_time_ns\"\n    data_type: TYPE_INT64\n    dims: [ 1 ]\n  },\n  {\n    name: \"last_token_time_ns\"\n    data_type: TYPE_INT64\n    dims: [ 1 ]\n  },\n  {\n    name: \"acceptance_rate\"\n    data_type: TYPE_FP32\n    dims: [ 1 ]\n  },\n  {\n    name: \"total_accepted_draft_tokens\"\n    data_type: TYPE_INT32\n    dims: [ 1 ]\n  },\n  {\n    name: \"total_draft_tokens\"\n    data_type: TYPE_INT32\n    dims: [ 1 ]\n  }\n]\ninstance_group [\n  {\n    count: 1\n    kind : KIND_CPU\n  }\n]\nparameters: {\n  key: \"max_beam_width\"\n  value: {\n    string_value: \"${max_beam_width}\"\n  }\n}\nparameters: {\n  key: \"FORCE_CPU_ONLY_INPUT_TENSORS\"\n  value: {\n    string_value: \"no\"\n  }\n}\nparameters: {\n  key: \"gpt_model_type\"\n  value: {\n    string_value: \"${batching_strategy}\"\n  }\n}\nparameters: {\n  key: \"gpt_model_path\"\n  value: {\n    string_value: \"${engine_dir}\"\n  }\n}\nparameters: {\n  key: \"encoder_model_path\"\n  value: {\n    string_value: \"${encoder_engine_dir}\"\n  }\n}\nparameters: {\n  key: \"max_tokens_in_paged_kv_cache\"\n  value: {\n    string_value: \"${max_tokens_in_paged_kv_cache}\"\n  }\n}\nparameters: {\n  key: \"max_attention_window_size\"\n  value: {\n    string_value: \"${max_attention_window_size}\"\n  }\n}\nparameters: {\n  key: \"sink_token_length\"\n  value: {\n    string_value: \"${sink_token_length}\"\n  }\n}\nparameters: {\n  key: \"batch_scheduler_policy\"\n  value: {\n    string_value: \"${batch_scheduler_policy}\"\n  }\n}\nparameters: {\n  key: \"kv_cache_free_gpu_mem_fraction\"\n  value: {\n    string_value: \"${kv_cache_free_gpu_mem_fraction}\"\n  }\n}\nparameters: {\n  key: \"cross_kv_cache_fraction\"\n  value: {\n    string_value: \"${cross_kv_cache_fraction}\"\n  }\n}\nparameters: {\n  key: \"kv_cache_host_memory_bytes\"\n  value: {\n    string_value: \"${kv_cache_host_memory_bytes}\"\n  }\n}\n# kv_cache_onboard_blocks is for internal implementation.\nparameters: {\n  key: \"kv_cache_onboard_blocks\"\n  value: {\n    string_value: \"${kv_cache_onboard_blocks}\"\n  }\n}\n# enable_trt_overlap is deprecated and doesn't have any effect on the runtime\n# parameters: {\n#   key: \"enable_trt_overlap\"\n#   value: {\n#     string_value: \"${enable_trt_overlap}\"\n#   }\n# }\nparameters: {\n  key: \"exclude_input_in_output\"\n  value: {\n    string_value: \"${exclude_input_in_output}\"\n  }\n}\nparameters: {\n  key: \"cancellation_check_period_ms\"\n  value: {\n    string_value: \"${cancellation_check_period_ms}\"\n  }\n}\nparameters: {\n  key: \"stats_check_period_ms\"\n  value: {\n    string_value: \"${stats_check_period_ms}\"\n  }\n}\nparameters: {\n  key: \"iter_stats_max_iterations\"\n  value: {\n    string_value: \"${iter_stats_max_iterations}\"\n  }\n}\nparameters: {\n  key: \"request_stats_max_iterations\"\n  value: {\n    string_value: \"${request_stats_max_iterations}\"\n  }\n}\nparameters: {\n  key: \"enable_kv_cache_reuse\"\n  value: {\n    string_value: \"${enable_kv_cache_reuse}\"\n  }\n}\nparameters: {\n  key: \"normalize_log_probs\"\n  value: {\n    string_value: \"${normalize_log_probs}\"\n  }\n}\nparameters: {\n  key: \"enable_chunked_context\"\n  value: {\n    string_value: \"${enable_chunked_context}\"\n  }\n}\nparameters: {\n  key: \"gpu_device_ids\"\n  value: {\n    string_value: \"${gpu_device_ids}\"\n  }\n}\nparameters: {\n  key: \"participant_ids\"\n  value: {\n    string_value: \"${participant_ids}\"\n  }\n}\nparameters: {\n  key: \"lora_cache_optimal_adapter_size\"\n  value: {\n    string_value: \"${lora_cache_optimal_adapter_size}\"\n  }\n}\nparameters: {\n  key: \"lora_cache_max_adapter_size\"\n  value: {\n    string_value: \"${lora_cache_max_adapter_size}\"\n  }\n}\nparameters: {\n  key: \"lora_cache_gpu_memory_fraction\"\n  value: {\n    string_value: \"${lora_cache_gpu_memory_fraction}\"\n  }\n}\nparameters: {\n  key: \"lora_cache_host_memory_bytes\"\n  value: {\n    string_value: \"${lora_cache_host_memory_bytes}\"\n  }\n}\nparameters: {\n  key: \"lora_prefetch_dir\"\n  value: {\n    string_value: \"${lora_prefetch_dir}\"\n  }\n}\nparameters: {\n  key: \"decoding_mode\"\n  value: {\n    string_value: \"${decoding_mode}\"\n  }\n}\nparameters: {\n  key: \"executor_worker_path\"\n  value: {\n    string_value: \"/opt/tritonserver/backends/tensorrtllm/trtllmExecutorWorker\"\n  }\n}\nparameters: {\n  key: \"lookahead_window_size\"\n    value: {\n      string_value: \"${lookahead_window_size}\"\n  }\n}\nparameters: {\n  key: \"lookahead_ngram_size\"\n    value: {\n      string_value: \"${lookahead_ngram_size}\"\n  }\n}\nparameters: {\n  key: \"lookahead_verification_set_size\"\n    value: {\n      string_value: \"${lookahead_verification_set_size}\"\n  }\n}\nparameters: {\n  key: \"medusa_choices\"\n    value: {\n      string_value: \"${medusa_choices}\"\n  }\n}\nparameters: {\n  key: \"eagle_choices\"\n    value: {\n      string_value: \"${eagle_choices}\"\n  }\n}\nparameters: {\n  key: \"gpu_weights_percent\"\n    value: {\n      string_value: \"${gpu_weights_percent}\"\n  }\n}\nparameters: {\n  key: \"enable_context_fmha_fp32_acc\"\n  value: {\n    string_value: \"${enable_context_fmha_fp32_acc}\"\n  }\n}\nparameters: {\n  key: \"multi_block_mode\"\n  value: {\n    string_value: \"${multi_block_mode}\"\n  }\n}\nparameters: {\n  key: \"cuda_graph_mode\"\n  value: {\n    string_value: \"${cuda_graph_mode}\"\n  }\n}\nparameters: {\n  key: \"cuda_graph_cache_size\"\n  value: {\n    string_value: \"${cuda_graph_cache_size}\"\n  }\n}\nparameters: {\n  key: \"speculative_decoding_fast_logits\"\n  value: {\n    string_value: \"${speculative_decoding_fast_logits}\"\n  }\n}\nparameters: {\n  key: \"tokenizer_dir\"\n  value: {\n    string_value: \"${tokenizer_dir}\"\n  }\n}\nparameters: {\n  key: \"guided_decoding_backend\"\n  value: {\n    string_value: \"${guided_decoding_backend}\"\n  }\n}\nparameters: {\n  key: \"xgrammar_tokenizer_info_path\"\n  value: {\n    string_value: \"${xgrammar_tokenizer_info_path}\"\n  }\n}\n"
  },
  {
    "path": "runtime/triton_trtllm/model_repo/token2wav/1/model.py",
    "content": "# Copyright 2025, NVIDIA CORPORATION & AFFILIATES. 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\n# are met:\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#  * Neither the name of NVIDIA CORPORATION nor the names of its\n#    contributors may be used to endorse or promote products derived\n#    from this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY\n# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nimport json\nimport os\n\nimport logging\n\nimport torch\nfrom torch.utils.dlpack import to_dlpack\nfrom torch.nn import functional as F\n\nimport triton_python_backend_utils as pb_utils\n\nfrom hyperpyyaml import load_hyperpyyaml\nfrom cosyvoice.utils.common import fade_in_out\nfrom cosyvoice.utils.file_utils import convert_onnx_to_trt, export_cosyvoice2_vllm\nfrom cosyvoice.utils.common import TrtContextWrapper\nfrom collections import defaultdict\nimport numpy as np\n\nlogging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')\nlogger = logging.getLogger(__name__)\n\nORIGINAL_VOCAB_SIZE = 151663\ntorch.set_num_threads(1)\n\n\nclass CosyVoice2:\n\n    def __init__(self, model_dir, load_jit=False, load_trt=False, fp16=False, trt_concurrent=1, device='cuda'):\n\n        self.model_dir = model_dir\n        self.fp16 = fp16\n\n        hyper_yaml_path = '{}/cosyvoice2.yaml'.format(model_dir)\n        if not os.path.exists(hyper_yaml_path):\n            raise ValueError('{} not found!'.format(hyper_yaml_path))\n        with open(hyper_yaml_path, 'r') as f:\n            configs = load_hyperpyyaml(f, overrides={'qwen_pretrain_path': os.path.join(model_dir, 'CosyVoice-BlankEN')})\n        self.model = CosyVoice2Model(configs['flow'], configs['hift'], fp16, device)\n        self.model.load('{}/flow.pt'.format(model_dir), '{}/hift.pt'.format(model_dir))\n        if load_jit:\n            self.model.load_jit('{}/flow.encoder.{}.zip'.format(model_dir, 'fp16' if self.fp16 is True else 'fp32'))\n        if load_trt:\n            self.model.load_trt('{}/flow.decoder.estimator.{}.mygpu.plan'.format(model_dir, 'fp16' if self.fp16 is True else 'fp32'),\n                                '{}/flow.decoder.estimator.fp32.onnx'.format(model_dir),\n                                trt_concurrent,\n                                self.fp16)\n\n\nclass CosyVoice2Model:\n\n    def __init__(self,\n                 flow: torch.nn.Module,\n                 hift: torch.nn.Module,\n                 fp16: bool = False,\n                 device: str = 'cuda'):\n        self.device = device\n        self.flow = flow\n        self.hift = hift\n        self.fp16 = fp16\n        if self.fp16 is True:\n            self.flow.half()\n\n        # streaming tts config\n        self.token_hop_len = 25\n        self.mel_cache_len = 8\n        self.source_cache_len = int(self.mel_cache_len * 480)\n        self.speech_window = np.hamming(2 * self.source_cache_len)\n        self.hift_cache_dict = defaultdict(lambda: None)\n\n    def load_jit(self, flow_encoder_model):\n        flow_encoder = torch.jit.load(flow_encoder_model, map_location=self.device)\n        self.flow.encoder = flow_encoder\n\n    def load(self, flow_model, hift_model):\n        self.flow.load_state_dict(torch.load(flow_model, map_location=self.device), strict=True)\n        self.flow.to(self.device).eval()\n        # in case hift_model is a hifigan model\n        hift_state_dict = {k.replace('generator.', ''): v for k, v in torch.load(hift_model, map_location=self.device).items()}\n        self.hift.load_state_dict(hift_state_dict, strict=True)\n        self.hift.to(self.device).eval()\n\n    def load_trt(self, flow_decoder_estimator_model, flow_decoder_onnx_model, trt_concurrent, fp16):\n        assert torch.cuda.is_available(), 'tensorrt only supports gpu!'\n        if not os.path.exists(flow_decoder_estimator_model) or os.path.getsize(flow_decoder_estimator_model) == 0:\n            convert_onnx_to_trt(flow_decoder_estimator_model, self.get_trt_kwargs(), flow_decoder_onnx_model, fp16)\n        del self.flow.decoder.estimator\n        import tensorrt as trt\n        with open(flow_decoder_estimator_model, 'rb') as f:\n            estimator_engine = trt.Runtime(trt.Logger(trt.Logger.INFO)).deserialize_cuda_engine(f.read())\n        assert estimator_engine is not None, 'failed to load trt {}'.format(flow_decoder_estimator_model)\n        self.flow.decoder.estimator = TrtContextWrapper(estimator_engine, trt_concurrent=trt_concurrent, device=self.device)\n\n    def get_trt_kwargs(self):\n        min_shape = [(2, 80, 4), (2, 1, 4), (2, 80, 4), (2, 80, 4)]\n        opt_shape = [(2, 80, 500), (2, 1, 500), (2, 80, 500), (2, 80, 500)]\n        max_shape = [(2, 80, 3000), (2, 1, 3000), (2, 80, 3000), (2, 80, 3000)]\n        input_names = [\"x\", \"mask\", \"mu\", \"cond\"]\n        return {'min_shape': min_shape, 'opt_shape': opt_shape, 'max_shape': max_shape, 'input_names': input_names}\n\n    def token2wav(self, token, prompt_token, prompt_feat, embedding, token_offset, uuid, stream=False, finalize=False, speed=1.0):\n        with torch.cuda.amp.autocast(self.fp16):\n            tts_mel, _ = self.flow.inference(token=token.to(self.device),\n                                             token_len=torch.tensor([token.shape[1]], dtype=torch.int32).to(self.device),\n                                             prompt_token=prompt_token.to(self.device),\n                                             prompt_token_len=torch.tensor([prompt_token.shape[1]], dtype=torch.int32).to(self.device),\n                                             prompt_feat=prompt_feat.to(self.device),\n                                             prompt_feat_len=torch.tensor([prompt_feat.shape[1]], dtype=torch.int32).to(self.device),\n                                             embedding=embedding.to(self.device),\n                                             streaming=stream,\n                                             finalize=finalize)\n        tts_mel = tts_mel[:, :, token_offset * self.flow.token_mel_ratio:]\n        # append hift cache\n        if self.hift_cache_dict[uuid] is not None:\n            hift_cache_mel, hift_cache_source = self.hift_cache_dict[uuid]['mel'], self.hift_cache_dict[uuid]['source']\n            tts_mel = torch.concat([hift_cache_mel, tts_mel], dim=2)\n        else:\n            hift_cache_source = torch.zeros(1, 1, 0)\n        # keep overlap mel and hift cache\n        if finalize is False:\n            tts_speech, tts_source = self.hift.inference(speech_feat=tts_mel, cache_source=hift_cache_source)\n            if self.hift_cache_dict[uuid] is not None:\n                tts_speech = fade_in_out(tts_speech, self.hift_cache_dict[uuid]['speech'], self.speech_window)\n            self.hift_cache_dict[uuid] = {'mel': tts_mel[:, :, -self.mel_cache_len:],\n                                          'source': tts_source[:, :, -self.source_cache_len:],\n                                          'speech': tts_speech[:, -self.source_cache_len:]}\n            tts_speech = tts_speech[:, :-self.source_cache_len]\n        else:\n            if speed != 1.0:\n                assert self.hift_cache_dict[uuid] is None, 'speed change only support non-stream inference mode'\n                tts_mel = F.interpolate(tts_mel, size=int(tts_mel.shape[2] / speed), mode='linear')\n            tts_speech, tts_source = self.hift.inference(speech_feat=tts_mel, cache_source=hift_cache_source)\n            if self.hift_cache_dict[uuid] is not None:\n                tts_speech = fade_in_out(tts_speech, self.hift_cache_dict[uuid]['speech'], self.speech_window)\n        return tts_speech\n\n\nclass TritonPythonModel:\n    \"\"\"Triton Python model for vocoder.\n\n    This model takes global and semantic tokens as input and generates audio waveforms\n    using the BiCodec vocoder.\n    \"\"\"\n\n    def initialize(self, args):\n        \"\"\"Initialize the model.\n\n        Args:\n            args: Dictionary containing model configuration\n        \"\"\"\n        # Parse model parameters\n        parameters = json.loads(args['model_config'])['parameters']\n        model_params = {key: value[\"string_value\"] for key, value in parameters.items()}\n        model_dir = model_params[\"model_dir\"]\n\n        # Initialize device and vocoder\n        self.device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n        logger.info(f\"Initializing vocoder from {model_dir} on {self.device}\")\n\n        self.token2wav_model = CosyVoice2(\n            model_dir, load_jit=False, load_trt=True, fp16=True, device=self.device\n        )\n\n        spk_info_path = os.path.join(model_dir, \"spk2info.pt\")\n        if not os.path.exists(spk_info_path):\n            raise ValueError(f\"spk2info.pt not found in {model_dir}\")\n        spk_info = torch.load(spk_info_path, map_location=\"cpu\", weights_only=False)\n        self.default_spk_info = spk_info[\"001\"]\n\n        logger.info(\"Token2Wav initialized successfully\")\n\n    def execute(self, requests):\n        \"\"\"Execute inference on the batched requests.\n\n        Args:\n            requests: List of inference requests\n\n        Returns:\n            List of inference responses containing generated waveforms\n        \"\"\"\n        responses = []\n        # Process each request in batch\n        for request in requests:\n            target_speech_tokens_tensor = pb_utils.get_input_tensor_by_name(request, \"target_speech_tokens\").as_numpy()\n            target_speech_tokens = torch.from_numpy(target_speech_tokens_tensor).to(self.device)\n\n            prompt_speech_tokens_tensor = pb_utils.get_input_tensor_by_name(request, \"prompt_speech_tokens\")\n            if prompt_speech_tokens_tensor is not None:\n                prompt_speech_tokens_tensor = prompt_speech_tokens_tensor.as_numpy()\n                prompt_speech_feat_tensor = pb_utils.get_input_tensor_by_name(request, \"prompt_speech_feat\").as_numpy()\n                prompt_spk_embedding_tensor = pb_utils.get_input_tensor_by_name(request, \"prompt_spk_embedding\").as_numpy()\n                prompt_speech_tokens = torch.from_numpy(prompt_speech_tokens_tensor).to(self.device)\n                prompt_speech_feat = torch.from_numpy(prompt_speech_feat_tensor).to(self.device)\n                prompt_spk_embedding = torch.from_numpy(prompt_spk_embedding_tensor).to(self.device)\n                prompt_speech_tokens = prompt_speech_tokens - ORIGINAL_VOCAB_SIZE\n            else:\n                prompt_speech_tokens = self.default_spk_info[\"speech_token\"].to(self.device)\n                prompt_speech_feat = self.default_spk_info[\"speech_feat\"].to(torch.float16).to(self.device)\n                prompt_spk_embedding = self.default_spk_info[\"embedding\"].to(torch.float16).to(self.device)\n\n            # shift the speech tokens according to the original vocab size\n            target_speech_tokens = target_speech_tokens - ORIGINAL_VOCAB_SIZE\n\n            # We set token_offset as an optional input to support streaming/offline tts. It has to be None when offline tts.\n            token_offset = pb_utils.get_input_tensor_by_name(request, \"token_offset\")\n            if token_offset is not None:\n                token_offset = token_offset.as_numpy().item()\n                finalize = pb_utils.get_input_tensor_by_name(request, \"finalize\").as_numpy().item()\n                if not finalize:\n                    stream = True\n                else:\n                    stream = False\n                request_id = request.request_id()\n                audio_hat = self.token2wav_model.model.token2wav(token=target_speech_tokens,\n                                                                 prompt_token=prompt_speech_tokens,\n                                                                 prompt_feat=prompt_speech_feat,\n                                                                 embedding=prompt_spk_embedding,\n                                                                 token_offset=token_offset,\n                                                                 uuid=request_id,\n                                                                 stream=stream,\n                                                                 finalize=finalize)\n                if finalize:\n                    self.token2wav_model.model.hift_cache_dict.pop(request_id)\n\n            else:\n                tts_mel, _ = self.token2wav_model.model.flow.inference(\n                    token=target_speech_tokens,\n                    token_len=torch.tensor([target_speech_tokens.shape[1]], dtype=torch.int32).to(\n                        self.device\n                    ),\n                    prompt_token=prompt_speech_tokens,\n                    prompt_token_len=torch.tensor(\n                        [prompt_speech_tokens.shape[1]], dtype=torch.int32\n                    ).to(self.device),\n                    prompt_feat=prompt_speech_feat,\n                    prompt_feat_len=torch.tensor([prompt_speech_feat.shape[1]], dtype=torch.int32).to(self.device),\n                    embedding=prompt_spk_embedding,\n                    streaming=False,\n                    finalize=True,\n                )\n\n                audio_hat, _ = self.token2wav_model.model.hift.inference(\n                    speech_feat=tts_mel, cache_source=torch.zeros(1, 1, 0)\n                )\n\n            generated_wave = audio_hat.squeeze(0).cpu().numpy()\n\n            wav_tensor = pb_utils.Tensor.from_dlpack(\"waveform\", to_dlpack(audio_hat))\n            inference_response = pb_utils.InferenceResponse(output_tensors=[wav_tensor])\n            responses.append(inference_response)\n\n        return responses\n"
  },
  {
    "path": "runtime/triton_trtllm/model_repo/token2wav/config.pbtxt",
    "content": "# Copyright (c) 2025, NVIDIA CORPORATION.  All rights reserved.\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\nname: \"token2wav\"\nbackend: \"python\"\nmax_batch_size: ${triton_max_batch_size}\ndynamic_batching {\n    max_queue_delay_microseconds: ${max_queue_delay_microseconds}\n}\nparameters [\n  {\n   key: \"model_dir\",\n   value: {string_value:\"${model_dir}\"}\n  }\n]\n\ninput [\n  {\n    name: \"target_speech_tokens\"\n    data_type: TYPE_INT32\n    dims: [-1]\n  },\n  {\n    name: \"prompt_speech_tokens\"\n    data_type: TYPE_INT32\n    dims: [-1]\n    optional: true\n  },\n  {\n    name: \"prompt_speech_feat\"\n    data_type: TYPE_FP16\n    dims: [-1, 80]\n    optional: true\n  },\n  {\n    name: \"prompt_spk_embedding\"\n    data_type: TYPE_FP16\n    dims: [-1]\n    optional: true\n  },\n  {\n    name: \"token_offset\"\n    data_type: TYPE_INT32\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  {\n    name: \"finalize\"\n    data_type: TYPE_BOOL\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  }\n]\noutput [\n  {\n    name: \"waveform\"\n    data_type: TYPE_FP32\n    dims: [ -1 ]\n  }\n]\n\ninstance_group [\n  {\n    count: 1\n    kind: KIND_CPU\n  }\n]"
  },
  {
    "path": "runtime/triton_trtllm/model_repo/token2wav_dit/1/model.py",
    "content": "# Copyright 2025, NVIDIA CORPORATION & AFFILIATES. 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\n# are met:\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#  * Neither the name of NVIDIA CORPORATION nor the names of its\n#    contributors may be used to endorse or promote products derived\n#    from this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY\n# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nimport json\nimport os\n\nimport logging\nfrom typing import List, Dict\n\nimport torch\nfrom torch.utils.dlpack import to_dlpack\nfrom torch.nn import functional as F\n\nimport triton_python_backend_utils as pb_utils\n\nfrom hyperpyyaml import load_hyperpyyaml\nfrom cosyvoice.utils.common import fade_in_out\nfrom cosyvoice.utils.file_utils import convert_onnx_to_trt, export_cosyvoice2_vllm\nfrom cosyvoice.utils.common import TrtContextWrapper\nfrom collections import defaultdict\nimport numpy as np\nfrom .token2wav_dit import CosyVoice2_Token2Wav\nimport hashlib\n\nlogging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')\nlogger = logging.getLogger(__name__)\n\n\nORIGINAL_VOCAB_SIZE = 151663\ntorch.set_num_threads(1)\n\n\ndef get_spk_id_from_prompt_audio(tensor: torch.Tensor) -> str:\n    \"\"\"\n    Generates a unique ID for a torch.Tensor.\n    Tensors with the same elements and properties will have the same ID.\n    \"\"\"\n    # Convert tensor to a byte string\n    tensor_bytes = tensor.numpy().tobytes()\n\n    # Create a SHA-256 hash of the byte string\n    hasher = hashlib.sha256()\n    hasher.update(tensor_bytes)\n\n    return hasher.hexdigest()\n\n\nclass TritonPythonModel:\n    \"\"\"Triton Python model for vocoder.\n\n    This model takes global and semantic tokens as input and generates audio waveforms\n    using the BiCodec vocoder.\n    \"\"\"\n\n    def initialize(self, args):\n        \"\"\"Initialize the model.\n\n        Args:\n            args: Dictionary containing model configuration\n        \"\"\"\n        # Parse model parameters\n        parameters = json.loads(args['model_config'])['parameters']\n        model_params = {key: value[\"string_value\"] for key, value in parameters.items()}\n        model_dir = model_params[\"model_dir\"]\n\n        # Initialize device and vocoder\n        self.device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n        logger.info(f\"Initializing vocoder from {model_dir} on {self.device}\")\n\n        # FIXME: device id settings\n        self.token2wav_model = CosyVoice2_Token2Wav(\n            model_dir, enable_trt=True, streaming=True\n        )\n        logger.info(\"Token2Wav initialized successfully\")\n\n    def execute(self, requests):\n        \"\"\"Execute inference on the batched requests.\n\n        Args:\n            requests: List of inference requests\n\n        Returns:\n            List of inference responses containing generated waveforms\n        \"\"\"\n        responses = []\n        # Process each request in batch\n        for request in requests:\n            target_speech_tokens_tensor = pb_utils.get_input_tensor_by_name(request, \"target_speech_tokens\").as_numpy()\n            target_speech_tokens = torch.from_numpy(target_speech_tokens_tensor)\n            target_speech_tokens = target_speech_tokens - ORIGINAL_VOCAB_SIZE\n            target_speech_tokens = target_speech_tokens.squeeze().tolist()\n\n            finalize = pb_utils.get_input_tensor_by_name(request, \"finalize\").as_numpy().item()\n\n            request_id = request.request_id()\n\n            wav_array = pb_utils.get_input_tensor_by_name(\n                request, \"reference_wav\").as_numpy()\n            wav_len = pb_utils.get_input_tensor_by_name(\n                request, \"reference_wav_len\").as_numpy().item()\n\n            wav_array = torch.from_numpy(wav_array)\n            wav = wav_array[:, :wav_len].squeeze(0)\n\n            spk_id = get_spk_id_from_prompt_audio(wav)\n\n            audio_hat = self.token2wav_model.forward_streaming(\n                target_speech_tokens, finalize, request_id=request_id,\n                speaker_id=f\"{spk_id}\", prompt_audio=wav, prompt_audio_sample_rate=16000\n            )\n\n            outputs = []\n\n            wav_tensor = pb_utils.Tensor.from_dlpack(\"waveform\", to_dlpack(audio_hat))\n            outputs.append(wav_tensor)\n            inference_response = pb_utils.InferenceResponse(output_tensors=outputs)\n            responses.append(inference_response)\n\n        return responses\n"
  },
  {
    "path": "runtime/triton_trtllm/model_repo/token2wav_dit/1/token2wav_dit.py",
    "content": "# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION.  All rights reserved.\n# SPDX-License-Identifier: Apache-2.0\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\"\"\" Example Usage\n    CUDA_VISIBLE_DEVICES=0 \\\n        python3 token2wav.py --enable-trt || exit 1\n\"\"\"\nimport torch\n# from flashcosyvoice.modules.flow import CausalMaskedDiffWithXvec\nfrom flashcosyvoice.modules.hifigan import HiFTGenerator\nfrom flashcosyvoice.utils.audio import mel_spectrogram\nimport torchaudio.compliance.kaldi as kaldi\nimport onnxruntime\nimport s3tokenizer\nfrom torch.utils.data import DataLoader\nfrom datasets import load_dataset\nimport torchaudio\nimport os\nimport logging\nimport argparse\nimport queue\nimport time\nimport numpy as np\nfrom hyperpyyaml import load_hyperpyyaml\n\n\ndef fade_in_out(fade_in_mel: torch.Tensor, fade_out_mel: torch.Tensor, window: torch.Tensor):\n    \"\"\"perform fade_in_out in tensor style\n    \"\"\"\n    mel_overlap_len = int(window.shape[0] / 2)\n    fade_in_mel = fade_in_mel.clone()\n    fade_in_mel[..., :mel_overlap_len] = \\\n        fade_in_mel[..., :mel_overlap_len] * window[:mel_overlap_len] + \\\n        fade_out_mel[..., -mel_overlap_len:] * window[mel_overlap_len:]\n    return fade_in_mel\n\n\ndef convert_onnx_to_trt(trt_model, trt_kwargs, onnx_model, dtype):\n    import tensorrt as trt\n    logging.info(\"Converting onnx to trt...\")\n    network_flags = 1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)\n    logger = trt.Logger(trt.Logger.INFO)\n    builder = trt.Builder(logger)\n    network = builder.create_network(network_flags)\n    parser = trt.OnnxParser(network, logger)\n    config = builder.create_builder_config()\n    # config.set_memory_pool_limit(trt.MemoryPoolType.WORKSPACE, 1 << 32)  # 4GB\n    if dtype == torch.float16:\n        config.set_flag(trt.BuilderFlag.FP16)\n\n    profile = builder.create_optimization_profile()\n    # load onnx model\n    with open(onnx_model, \"rb\") as f:\n        if not parser.parse(f.read()):\n            for error in range(parser.num_errors):\n                print(parser.get_error(error))\n            raise ValueError('failed to parse {}'.format(onnx_model))\n    # set input shapes\n    for i in range(len(trt_kwargs['input_names'])):\n        profile.set_shape(trt_kwargs['input_names'][i], trt_kwargs['min_shape'][i], trt_kwargs['opt_shape'][i], trt_kwargs['max_shape'][i])\n    if dtype == torch.float16:\n        tensor_dtype = trt.DataType.HALF\n    elif dtype == torch.bfloat16:\n        tensor_dtype = trt.DataType.BF16\n    elif dtype == torch.float32:\n        tensor_dtype = trt.DataType.FLOAT\n    else:\n        raise ValueError('invalid dtype {}'.format(dtype))\n    # set input and output data type\n    for i in range(network.num_inputs):\n        input_tensor = network.get_input(i)\n        input_tensor.dtype = tensor_dtype\n    for i in range(network.num_outputs):\n        output_tensor = network.get_output(i)\n        output_tensor.dtype = tensor_dtype\n    config.add_optimization_profile(profile)\n    engine_bytes = builder.build_serialized_network(network, config)\n    # save trt engine\n    with open(trt_model, \"wb\") as f:\n        f.write(engine_bytes)\n    logging.info(\"Succesfully convert onnx to trt...\")\n\n\nclass TrtContextWrapper:\n    def __init__(self, trt_engine, trt_concurrent=1, device='cuda:0'):\n        self.trt_context_pool = queue.Queue(maxsize=trt_concurrent)\n        self.trt_engine = trt_engine\n        self.device = device\n        for _ in range(trt_concurrent):\n            trt_context = trt_engine.create_execution_context()\n            trt_stream = torch.cuda.stream(torch.cuda.Stream(torch.device(device)))\n            assert trt_context is not None, 'failed to create trt context, maybe not enough CUDA memory, try reduce current trt concurrent {}'.format(trt_concurrent)\n            self.trt_context_pool.put([trt_context, trt_stream])\n        assert self.trt_context_pool.empty() is False, 'no avaialbe estimator context'\n\n    def acquire_estimator(self):\n        return self.trt_context_pool.get(), self.trt_engine\n\n    def release_estimator(self, context, stream):\n        self.trt_context_pool.put([context, stream])\n\n\nclass CosyVoice2_Token2Wav(torch.nn.Module):\n    def __init__(self, model_dir: str, enable_trt: bool = False, device_id: int = 0, streaming: bool = False, dtype: torch.dtype = torch.float16):\n        super().__init__()\n        self.device_id = device_id\n        self.device = f\"cuda:{device_id}\"\n        with open(f\"{model_dir}/flow.yaml\", \"r\") as f:\n            configs = load_hyperpyyaml(f)\n            self.flow = configs['flow']\n\n        self.dtype = dtype\n        self.flow.to(self.dtype)\n\n        self.flow.load_state_dict(torch.load(f\"{model_dir}/flow.pt\", map_location=\"cpu\", weights_only=True), strict=True)\n        self.flow.to(self.device).eval()\n\n        self.hift = HiFTGenerator()\n        hift_state_dict = {k.replace('generator.', ''): v for k, v in torch.load(f\"{model_dir}/hift.pt\", map_location=\"cpu\", weights_only=True).items()}\n        self.hift.load_state_dict(hift_state_dict, strict=True)\n        self.hift.to(self.device).eval()\n\n        option = onnxruntime.SessionOptions()\n        option.graph_optimization_level = onnxruntime.GraphOptimizationLevel.ORT_ENABLE_ALL\n        option.intra_op_num_threads = 1\n        self.spk_model = onnxruntime.InferenceSession(\n            f\"{model_dir}/campplus.onnx\", sess_options=option,\n            providers=[\"CPUExecutionProvider\"])\n        self.audio_tokenizer = s3tokenizer.load_model(f\"{model_dir}/speech_tokenizer_v2_25hz.onnx\").to(self.device).eval()\n\n        gpu = \"l20\"\n        if enable_trt:\n            if streaming:\n                self.load_trt(\n                    f'{model_dir}/flow.decoder.estimator.{self.dtype}.dynamic_batch.chunk.{gpu}.plan',\n                    f'{model_dir}/flow.decoder.estimator.chunk.fp32.dynamic_batch.simplify.onnx',\n                    1,\n                    self.dtype, streaming\n                )\n            else:\n                self.load_trt(\n                    f'{model_dir}/flow.decoder.estimator.{self.dtype}.dynamic_batch.{gpu}.plan',\n                    f'{model_dir}/flow.decoder.estimator.fp32.dynamic_batch.onnx',\n                    1,\n                    self.dtype\n                )\n            self.load_spk_trt(\n                f'{model_dir}/campplus.{gpu}.fp32.trt',\n                f'{model_dir}/campplus.onnx',\n                1,\n                False\n            )\n\n        self.streaming_flow_cache = {}\n        self.speaker_cache = {}\n\n        self.mel_cache_len = 8  # hard-coded, 160ms\n        self.source_cache_len = int(self.mel_cache_len * 480)   # 50hz mel -> 24kHz wave\n        self.speech_window = torch.from_numpy(np.hamming(2 * self.source_cache_len)).cuda()\n\n        # hifigan cache for streaming tts\n        self.hift_cache_dict = {}\n\n    def forward_spk_embedding(self, spk_feat):\n        if isinstance(self.spk_model, onnxruntime.InferenceSession):\n            return self.spk_model.run(\n                None, {self.spk_model.get_inputs()[0].name: spk_feat.unsqueeze(dim=0).cpu().numpy()}\n            )[0].flatten().tolist()\n        else:\n            [spk_model, stream], trt_engine = self.spk_model.acquire_estimator()\n            # NOTE need to synchronize when switching stream\n            with torch.cuda.device(self.device_id):\n                torch.cuda.current_stream().synchronize()\n                spk_feat = spk_feat.unsqueeze(dim=0).to(self.device)\n                batch_size = spk_feat.size(0)\n\n                with stream:\n                    spk_model.set_input_shape('input', (batch_size, spk_feat.size(1), 80))\n                    output_tensor = torch.empty((batch_size, 192), device=spk_feat.device)\n\n                    data_ptrs = [spk_feat.contiguous().data_ptr(),\n                                 output_tensor.contiguous().data_ptr()]\n                    for i, j in enumerate(data_ptrs):\n\n                        spk_model.set_tensor_address(trt_engine.get_tensor_name(i), j)\n                    # run trt engine\n                    assert spk_model.execute_async_v3(torch.cuda.current_stream().cuda_stream) is True\n                    torch.cuda.current_stream().synchronize()\n                self.spk_model.release_estimator(spk_model, stream)\n\n            return output_tensor.cpu().numpy().flatten().tolist()\n\n    def load_spk_trt(self, spk_model, spk_onnx_model, trt_concurrent=1, fp16=True):\n        if not os.path.exists(spk_model) or os.path.getsize(spk_model) == 0:\n            trt_kwargs = self.get_spk_trt_kwargs()\n            convert_onnx_to_trt(spk_model, trt_kwargs, spk_onnx_model, torch.float32)\n        import tensorrt as trt\n        with open(spk_model, 'rb') as f:\n            spk_engine = trt.Runtime(trt.Logger(trt.Logger.INFO)).deserialize_cuda_engine(f.read())\n        assert spk_engine is not None, 'failed to load trt {}'.format(spk_model)\n        self.spk_model = TrtContextWrapper(spk_engine, trt_concurrent=trt_concurrent, device=self.device)\n\n    def get_spk_trt_kwargs(self):\n        min_shape = [(1, 4, 80)]\n        opt_shape = [(1, 500, 80)]\n        max_shape = [(1, 3000, 80)]\n        input_names = [\"input\"]\n        return {'min_shape': min_shape, 'opt_shape': opt_shape, 'max_shape': max_shape, 'input_names': input_names}\n\n    def load_trt(self, flow_decoder_estimator_model, flow_decoder_onnx_model, trt_concurrent=1, dtype=torch.float16, streaming=False):\n        assert torch.cuda.is_available(), 'tensorrt only supports gpu!'\n        if not os.path.exists(flow_decoder_estimator_model) or os.path.getsize(flow_decoder_estimator_model) == 0:\n            opt_batch_size = 2\n            max_batch_size = 16\n            if streaming:\n                opt_batch_size, max_batch_size = 1, 1  # only support batch size 1 for streaming tts\n            trt_kwargs = self.get_trt_kwargs_dynamic_batch(opt_batch_size=opt_batch_size, max_batch_size=max_batch_size, streaming=streaming)\n            convert_onnx_to_trt(flow_decoder_estimator_model, trt_kwargs, flow_decoder_onnx_model, dtype)\n        del self.flow.decoder.estimator\n        import tensorrt as trt\n        with open(flow_decoder_estimator_model, 'rb') as f:\n            estimator_engine = trt.Runtime(trt.Logger(trt.Logger.INFO)).deserialize_cuda_engine(f.read())\n        assert estimator_engine is not None, 'failed to load trt {}'.format(flow_decoder_estimator_model)\n        self.flow.decoder.estimator = TrtContextWrapper(estimator_engine, trt_concurrent=trt_concurrent, device=self.device)\n\n    def get_trt_kwargs_dynamic_batch(self, opt_batch_size=2, max_batch_size=64, streaming=False):\n        if streaming:\n            min_shape = [(2, 80, 4), (2, 80, 4), (2, 80, 4), (2,), (2, 80), (16, 2, 1024, 2), (16, 2, 8, 0, 128)]\n            opt_shape = [\n                (opt_batch_size * 2, 80, 500), (opt_batch_size * 2, 80, 500), (opt_batch_size * 2, 80, 500),\n                (opt_batch_size * 2,), (opt_batch_size * 2, 80), (16, opt_batch_size * 2, 1024, 2),\n                (16, opt_batch_size * 2, 8, 100, 128)\n            ]\n            max_shape = [\n                (max_batch_size * 2, 80, 3000), (max_batch_size * 2, 80, 3000), (max_batch_size * 2, 80, 3000),\n                (max_batch_size * 2,), (max_batch_size * 2, 80), (16, max_batch_size * 2, 1024, 2),\n                (16, max_batch_size * 2, 8, 1000, 128)\n            ]\n            input_names = [\"x\", \"mu\", \"cond\", \"t\", \"spks\", \"cnn_cache\", \"att_cache\"]\n        else:\n            min_shape = [(2, 80, 4), (2, 1, 4), (2, 80, 4), (2, 80, 4), (2,), (2, 80)]\n            opt_shape = [\n                (opt_batch_size * 2, 80, 500), (opt_batch_size * 2, 1, 500), (opt_batch_size * 2, 80, 500),\n                (opt_batch_size * 2, 80, 500), (opt_batch_size * 2,), (opt_batch_size * 2, 80)\n            ]\n            max_shape = [\n                (max_batch_size * 2, 80, 3000), (max_batch_size * 2, 1, 3000), (max_batch_size * 2, 80, 3000),\n                (max_batch_size * 2, 80, 3000), (max_batch_size * 2,), (max_batch_size * 2, 80)\n            ]\n            input_names = [\"x\", \"mask\", \"mu\", \"cond\", \"t\", \"spks\"]\n        return {'min_shape': min_shape, 'opt_shape': opt_shape, 'max_shape': max_shape, 'input_names': input_names}\n\n    def prompt_audio_tokenization(self, prompt_audios_list: list[torch.Tensor]) -> list[list[int]]:\n        prompt_speech_tokens_list, prompt_speech_mels_list = [], []\n        for audio in prompt_audios_list:\n            assert len(audio.shape) == 1\n            log_mel = s3tokenizer.log_mel_spectrogram(audio)  # [num_mels, T]\n            prompt_speech_mels_list.append(log_mel)\n        prompt_mels_for_llm, prompt_mels_lens_for_llm = s3tokenizer.padding(prompt_speech_mels_list)\n        prompt_speech_tokens, prompt_speech_tokens_lens = self.audio_tokenizer.quantize(\n            prompt_mels_for_llm.to(self.device), prompt_mels_lens_for_llm.to(self.device)\n        )\n        for i in range(len(prompt_speech_tokens)):\n            speech_tokens_i = prompt_speech_tokens[i, :prompt_speech_tokens_lens[i].item()].tolist()\n            prompt_speech_tokens_list.append(speech_tokens_i)\n        return prompt_speech_tokens_list\n\n    def get_spk_emb(self, prompt_audios_list: list[torch.Tensor]) -> torch.Tensor:\n        spk_emb_for_flow = []\n        for audio in prompt_audios_list:\n            assert len(audio.shape) == 1\n            spk_feat = kaldi.fbank(audio.unsqueeze(0), num_mel_bins=80, dither=0, sample_frequency=16000)\n            spk_feat = spk_feat - spk_feat.mean(dim=0, keepdim=True)\n            spk_emb = self.forward_spk_embedding(spk_feat)\n\n            spk_emb_for_flow.append(spk_emb)\n        spk_emb_for_flow = torch.tensor(spk_emb_for_flow)\n        if self.dtype != torch.float32:\n            spk_emb_for_flow = spk_emb_for_flow.to(self.dtype)\n        return spk_emb_for_flow\n\n    def get_prompt_mels(self, prompt_audios_list: list[torch.Tensor], prompt_audios_sample_rate: list[int]):\n        prompt_mels_for_flow = []\n        prompt_mels_lens_for_flow = []\n        for audio, sample_rate in zip(prompt_audios_list, prompt_audios_sample_rate):\n            assert len(audio.shape) == 1\n            audio = audio.unsqueeze(0)\n            if sample_rate != 24000:\n                audio = torchaudio.transforms.Resample(orig_freq=sample_rate, new_freq=24000)(audio)\n            mel = mel_spectrogram(audio).transpose(1, 2).squeeze(0)  # [T, num_mels]\n            mel_len = mel.shape[0]\n            prompt_mels_for_flow.append(mel)\n            prompt_mels_lens_for_flow.append(mel_len)\n        prompt_mels_for_flow = torch.nn.utils.rnn.pad_sequence(\n            prompt_mels_for_flow, batch_first=True, padding_value=0\n        )  # [B, T', num_mels=80]\n        prompt_mels_lens_for_flow = torch.tensor(prompt_mels_lens_for_flow)\n        return prompt_mels_for_flow, prompt_mels_lens_for_flow\n\n    def forward_flow(self, prompt_speech_tokens_list: list[list[int]],\n                     generated_speech_tokens_list: list[list[int]],\n                     prompt_mels_for_flow: torch.Tensor,\n                     prompt_mels_lens_for_flow: torch.Tensor,\n                     spk_emb_for_flow: torch.Tensor):\n        batch_size = prompt_mels_for_flow.shape[0]\n        flow_inputs = []\n        flow_inputs_lens = []\n        for prompt_speech_tokens, generated_speech_tokens in zip(prompt_speech_tokens_list, generated_speech_tokens_list):\n            flow_inputs.append(torch.tensor(prompt_speech_tokens + generated_speech_tokens))\n            flow_inputs_lens.append(len(prompt_speech_tokens) + len(generated_speech_tokens))\n\n        flow_inputs = torch.nn.utils.rnn.pad_sequence(flow_inputs, batch_first=True, padding_value=0)\n        flow_inputs_lens = torch.tensor(flow_inputs_lens)\n\n        with torch.amp.autocast(self.device, dtype=torch.float16):\n            generated_mels, generated_mels_lens = self.flow.inference(\n                flow_inputs.to(self.device), flow_inputs_lens.to(self.device),\n                prompt_mels_for_flow.to(self.device), prompt_mels_lens_for_flow.to(self.device), spk_emb_for_flow.to(self.device), 10\n            )\n\n        return generated_mels, generated_mels_lens\n\n    def forward_hift(self, generated_mels: torch.Tensor, generated_mels_lens: torch.Tensor, prompt_mels_lens_for_flow: torch.Tensor):\n        batch_size = generated_mels.shape[0]\n        generated_wavs = []\n        for i in range(batch_size):\n            mel = generated_mels[i, :, prompt_mels_lens_for_flow[i].item():generated_mels_lens[i].item()].unsqueeze(0)\n            wav, _ = self.hift(speech_feat=mel)\n            generated_wavs.append(wav)\n        return generated_wavs\n\n    @torch.inference_mode()\n    def forward(\n        self, generated_speech_tokens_list: list[list[int]], prompt_audios_list: list[torch.Tensor], prompt_audios_sample_rate: list[int]\n    ):\n        assert all(sample_rate == 16000 for sample_rate in prompt_audios_sample_rate)\n\n        prompt_speech_tokens_list, prompt_mels_for_flow, prompt_mels_lens_for_flow, spk_emb_for_flow = self.prepare_prompt_audio(prompt_audios_list, prompt_audios_sample_rate)\n\n        generated_mels, generated_mels_lens = self.forward_flow(\n            prompt_speech_tokens_list, generated_speech_tokens_list,\n            prompt_mels_for_flow, prompt_mels_lens_for_flow, spk_emb_for_flow\n        )\n\n        generated_wavs = self.forward_hift(generated_mels, generated_mels_lens, prompt_mels_lens_for_flow)\n        return generated_wavs\n\n    def prepare_prompt_audio(\n        self, prompt_audios_list: list[torch.Tensor], prompt_audios_sample_rate: list[int]\n    ):\n        assert all(sample_rate == 16000 for sample_rate in prompt_audios_sample_rate)\n\n        prompt_speech_tokens_list = self.prompt_audio_tokenization(prompt_audios_list)\n\n        prompt_mels_for_flow, prompt_mels_lens_for_flow = self.get_prompt_mels(prompt_audios_list, prompt_audios_sample_rate)\n\n        spk_emb_for_flow = self.get_spk_emb(prompt_audios_list)\n        return prompt_speech_tokens_list, prompt_mels_for_flow, prompt_mels_lens_for_flow, spk_emb_for_flow\n\n    def get_prompt_audio_cache_for_streaming_tts(\n        self, prompt_speech_tokens_list, prompt_mels_for_flow, prompt_mels_lens_for_flow, spk_emb_for_flow\n    ):\n        assert len(prompt_speech_tokens_list) == 1, \"only support batch size 1 for streaming tts\"\n        for i, prompt_speech_tokens in enumerate(prompt_speech_tokens_list):\n            prompt_speech_tokens_list[i] = torch.tensor(prompt_speech_tokens + prompt_speech_tokens_list[i][:3])\n        prompt_speech_tokens_tensor = torch.nn.utils.rnn.pad_sequence(prompt_speech_tokens_list, batch_first=True, padding_value=0)\n\n        cache = self.flow.setup_cache(\n            prompt_speech_tokens_tensor.to(self.device),\n            prompt_mels_for_flow.to(self.device),\n            spk_emb_for_flow.to(self.device),\n            n_timesteps=10\n        )\n        new_cache = {k: v.clone() for k, v in cache.items()}\n        # Hack: this is a hack to avoid in-place changes to the cache['estimator_att_cache'] and cache['estimator_cnn_cache']\n        return new_cache\n\n    @torch.inference_mode()\n    def forward_streaming(\n        self, generated_speech_tokens: list[int], last_chunk: bool, request_id: str, speaker_id: str, prompt_audio: torch.Tensor = None, prompt_audio_sample_rate: int = 16000\n    ):\n        if speaker_id not in self.speaker_cache:\n            assert prompt_audio is not None, \"prompt_audio is required for new speaker\"\n            assert prompt_audio_sample_rate == 16000\n\n            prompt_speech_tokens_list, prompt_mels_for_flow, prompt_mels_lens_for_flow, spk_emb_for_flow = self.prepare_prompt_audio([prompt_audio], [prompt_audio_sample_rate])\n\n            token_len = min(int(prompt_mels_for_flow.shape[1] / 2), len(prompt_speech_tokens_list[0]))\n            prompt_mels_for_flow = prompt_mels_for_flow[:, :2 * token_len].contiguous()\n            prompt_speech_tokens_list[0] = prompt_speech_tokens_list[0][:token_len]\n\n            prompt_audio_dict = {'spk_emb_for_flow': spk_emb_for_flow, 'prompt_mels_for_flow': prompt_mels_for_flow}\n\n            cache_dict = self.get_prompt_audio_cache_for_streaming_tts(prompt_speech_tokens_list, prompt_mels_for_flow, prompt_mels_lens_for_flow, spk_emb_for_flow)\n            self.speaker_cache[speaker_id] = {'prompt_audio_dict': prompt_audio_dict, 'cache_dict': cache_dict}\n\n        if request_id not in self.streaming_flow_cache:\n            self.streaming_flow_cache[request_id] = {k: v.clone() for k, v in self.speaker_cache[speaker_id]['cache_dict'].items()}\n            self.hift_cache_dict[request_id] = dict(\n                mel=torch.zeros(1, 80, 0, device='cuda'),\n                source=torch.zeros(1, 1, 0, device='cuda'),\n                speech=torch.zeros(1, 0, device='cuda'),\n            )\n\n        current_request_cache = self.streaming_flow_cache[request_id]\n\n        current_prompt_audio_dict = self.speaker_cache[speaker_id]['prompt_audio_dict']\n        generated_speech_tokens = torch.tensor([generated_speech_tokens], dtype=torch.int32, device='cuda')\n\n        chunk_mel, new_streaming_flow_cache = self.flow.inference_chunk(\n            token=generated_speech_tokens,\n            spk=current_prompt_audio_dict['spk_emb_for_flow'].to(self.device),\n            cache=current_request_cache,\n            last_chunk=last_chunk,\n            n_timesteps=10,\n        )\n\n        self.streaming_flow_cache[request_id] = new_streaming_flow_cache\n\n        if self.streaming_flow_cache[request_id]['estimator_att_cache'].shape[4] > (current_prompt_audio_dict['prompt_mels_for_flow'].shape[1] + 100):\n            self.streaming_flow_cache[request_id]['estimator_att_cache'] = torch.cat([\n                self.streaming_flow_cache[request_id]['estimator_att_cache'][:, :, :, :, :current_prompt_audio_dict['prompt_mels_for_flow'].shape[1]],\n                self.streaming_flow_cache[request_id]['estimator_att_cache'][:, :, :, :, -100:],\n            ], dim=4)\n\n        hift_cache_mel = self.hift_cache_dict[request_id]['mel'].clone()\n        hift_cache_source = self.hift_cache_dict[request_id]['source'].clone()\n        hift_cache_speech = self.hift_cache_dict[request_id]['speech'].clone()\n        mel = torch.concat([hift_cache_mel, chunk_mel], dim=2).clone()\n\n        speech, source = self.hift(mel, hift_cache_source)\n\n        # overlap speech smooth\n        if hift_cache_speech.shape[-1] > 0:\n            speech = fade_in_out(speech, hift_cache_speech, self.speech_window)\n\n        # update vocoder cache\n        self.hift_cache_dict[request_id] = dict(\n            mel=mel[..., -self.mel_cache_len:].clone().detach(),\n            source=source[:, :, -self.source_cache_len:].clone().detach(),\n            speech=speech[:, -self.source_cache_len:].clone().detach(),\n        )\n        if not last_chunk:\n            speech = speech[:, :-self.source_cache_len]\n\n        if last_chunk:\n            assert request_id in self.streaming_flow_cache\n            self.streaming_flow_cache.pop(request_id)\n            self.hift_cache_dict.pop(request_id)\n\n        return speech\n\n\ndef collate_fn(batch):\n    ids, generated_speech_tokens_list, prompt_audios_list, prompt_audios_sample_rate = [], [], [], []\n    for item in batch:\n        generated_speech_tokens_list.append(item['target_audio_cosy2_tokens'])\n        audio = torch.from_numpy(item['prompt_audio']['array']).float()\n        prompt_audios_list.append(audio)\n        prompt_audios_sample_rate.append(item['prompt_audio']['sampling_rate'])\n        ids.append(item['id'])\n\n    return ids, generated_speech_tokens_list, prompt_audios_list, prompt_audios_sample_rate\n\n\ndef get_args():\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"--enable-trt\", action=\"store_true\")\n    parser.add_argument(\"--model-dir\", type=str, default=\"./Step-Audio-2-mini/token2wav\")\n    parser.add_argument(\"--batch-size\", type=int, default=1)\n    parser.add_argument(\"--output-dir\", type=str, default=\"generated_wavs\")\n    parser.add_argument(\"--huggingface-dataset-split\", type=str, default=\"wenetspeech4tts\")\n    parser.add_argument(\"--warmup\", type=int, default=3, help=\"Number of warmup epochs, performance statistics will only be collected from the last epoch\")\n    return parser.parse_args()\n\n\nif __name__ == \"__main__\":\n    args = get_args()\n    model = CosyVoice2_Token2Wav(model_dir=args.model_dir, enable_trt=args.enable_trt)\n    if not os.path.exists(args.output_dir):\n        os.makedirs(args.output_dir)\n    dataset_name = \"yuekai/seed_tts_cosy2\"\n\n    dataset = load_dataset(dataset_name, split=args.huggingface_dataset_split, trust_remote_code=True)\n\n    data_loader = DataLoader(dataset, batch_size=args.batch_size, shuffle=False, collate_fn=collate_fn, num_workers=0)\n\n    for _ in range(args.warmup):\n        start_time = time.time()\n        for batch in data_loader:\n            ids, generated_speech_tokens_list, prompt_audios_list, prompt_audios_sample_rate = batch\n\n            generated_wavs = model(generated_speech_tokens_list, prompt_audios_list, prompt_audios_sample_rate)\n\n            for id, wav in zip(ids, generated_wavs):\n                torchaudio.save(f\"{args.output_dir}/{id}.wav\", wav.cpu(), 24000)\n        end_time = time.time()\n        epoch_time = end_time - start_time\n        print(f\"Measurement epoch time taken: {epoch_time:.4f} seconds\")\n"
  },
  {
    "path": "runtime/triton_trtllm/model_repo/token2wav_dit/config.pbtxt",
    "content": "# Copyright (c) 2025, NVIDIA CORPORATION.  All rights reserved.\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\nname: \"token2wav_dit\"\nbackend: \"python\"\nmax_batch_size: ${triton_max_batch_size}\n\ndynamic_batching {\n    max_queue_delay_microseconds: ${max_queue_delay_microseconds}\n    priority_levels: 10\n    default_priority_level: 10\n}\n\nparameters [\n  {\n   key: \"model_dir\",\n   value: {string_value:\"${model_dir}\"}\n  }\n]\n\ninput [\n  {\n    name: \"target_speech_tokens\"\n    data_type: TYPE_INT32\n    dims: [-1]\n  },\n  {\n    name: \"reference_wav\"\n    data_type: TYPE_FP32\n    dims: [-1]\n  },\n  {\n    name: \"reference_wav_len\"\n    data_type: TYPE_INT32\n    dims: [1]\n  },\n  {\n    name: \"finalize\"\n    data_type: TYPE_BOOL\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  }\n]\noutput [\n  {\n    name: \"waveform\"\n    data_type: TYPE_FP32\n    dims: [ -1 ]\n  }\n]\n\ninstance_group [\n  {\n    count: 1\n    kind: KIND_CPU\n  }\n]"
  },
  {
    "path": "runtime/triton_trtllm/model_repo_cosyvoice3/audio_tokenizer/1/model.py",
    "content": "# Copyright 2025, NVIDIA CORPORATION & AFFILIATES. 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\n# are met:\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#  * Neither the name of NVIDIA CORPORATION nor the names of its\n#    contributors may be used to endorse or promote products derived\n#    from this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY\n# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\nimport json\nimport torch\nfrom torch.utils.dlpack import to_dlpack\n\nimport triton_python_backend_utils as pb_utils\n\nimport os\nimport numpy as np\nimport s3tokenizer\ntorch.set_num_threads(1)\n# ORIGINAL_VOCAB_SIZE = 151924\n\n\nclass TritonPythonModel:\n    \"\"\"Triton Python model for audio tokenization.\n\n    This model takes reference audio input and extracts semantic tokens\n    using s3tokenizer.\n    \"\"\"\n\n    def initialize(self, args):\n        \"\"\"Initialize the model.\n\n        Args:\n            args: Dictionary containing model configuration\n        \"\"\"\n        # Parse model parameters\n        parameters = json.loads(args['model_config'])['parameters']\n        model_params = {k: v[\"string_value\"] for k, v in parameters.items()}\n\n        self.device = torch.device(\"cuda\")\n        model_path = os.path.join(model_params[\"model_dir\"], \"speech_tokenizer_v3.onnx\")\n        self.audio_tokenizer = s3tokenizer.load_model(model_path).to(self.device)\n\n    def execute(self, requests):\n        \"\"\"Execute inference on the batched requests.\"\"\"\n        mels = []\n\n        # Process each request in batch\n        for req_idx, request in enumerate(requests):\n            # Extract input tensors\n            wav_array = pb_utils.get_input_tensor_by_name(\n                request, \"reference_wav\").as_numpy()\n            wav_len = pb_utils.get_input_tensor_by_name(\n                request, \"reference_wav_len\").as_numpy().item()\n\n            wav_array = torch.from_numpy(wav_array).to(self.device)\n            # Prepare inputs\n            wav = wav_array[:, :wav_len].squeeze(0)\n            mel = s3tokenizer.log_mel_spectrogram(wav)\n            mels.append(mel)\n\n        mels, mels_lens = s3tokenizer.padding(mels)\n        codes, codes_lens = self.audio_tokenizer.quantize(mels.to(self.device), mels_lens.to(self.device))\n\n        responses = []\n        for i in range(len(requests)):\n            prompt_speech_tokens = codes[i, :codes_lens[i].item()]\n            prompt_speech_tokens_tensor = pb_utils.Tensor.from_dlpack(\n                \"prompt_speech_tokens\", to_dlpack(prompt_speech_tokens))\n            inference_response = pb_utils.InferenceResponse(\n                output_tensors=[prompt_speech_tokens_tensor])\n            responses.append(inference_response)\n\n        return responses\n"
  },
  {
    "path": "runtime/triton_trtllm/model_repo_cosyvoice3/audio_tokenizer/config.pbtxt",
    "content": "# Copyright (c) 2025, NVIDIA CORPORATION.  All rights reserved.\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\nname: \"audio_tokenizer\"\nbackend: \"python\"\nmax_batch_size: ${triton_max_batch_size}\ndynamic_batching {\n    max_queue_delay_microseconds: ${max_queue_delay_microseconds}\n}\nparameters [\n  {\n   key: \"model_dir\",\n   value: {string_value:\"${model_dir}\"}\n  }\n]\n\ninput [\n  {\n    name: \"reference_wav\"\n    data_type: TYPE_FP32\n    dims: [-1]\n  },\n  {\n    name: \"reference_wav_len\"\n    data_type: TYPE_INT32\n    dims: [1]\n  }\n]\noutput [\n  {\n    name: \"prompt_speech_tokens\"\n    data_type: TYPE_INT32\n    dims: [-1]\n  }\n]\n\ninstance_group [\n  {\n    count: 1\n    kind: KIND_CPU\n  }\n]"
  },
  {
    "path": "runtime/triton_trtllm/model_repo_cosyvoice3/cosyvoice3/1/model.py",
    "content": "import json\nimport re\nimport time\nimport asyncio\n\nimport numpy as np\nimport torch\nfrom torch.utils.dlpack import to_dlpack\nimport triton_python_backend_utils as pb_utils\n\nimport httpx\nimport torchaudio\nfrom functools import partial\nfrom matcha.utils.audio import mel_spectrogram as matcha_mel_spectrogram\n\n\ntorch.set_num_threads(1)\n\n# CosyVoice3 mel params: fmax=None (Nyquist), center=False\nmel_spectrogram = partial(matcha_mel_spectrogram,\n    n_fft=1920, num_mels=80, sampling_rate=24000,\n    hop_size=480, win_size=1920, fmin=0, fmax=None, center=False)\n\n\ndef parse_speech_token_string(response_text):\n    \"\"\"Parse speech tokens from string like '<|s_123|><|s_456|>' into list of int IDs.\"\"\"\n    speech_tokens = response_text.strip().split('><')\n    if len(speech_tokens) > 1:\n        speech_tokens = ['<' + t if not t.startswith('<') else t for t in speech_tokens]\n        speech_tokens = [t + '>' if not t.endswith('>') else t for t in speech_tokens]\n    speech_ids = []\n    for token_str in speech_tokens:\n        match = re.match(r'<\\|s_(\\d+)\\|>', token_str)\n        if match:\n            speech_ids.append(int(match.group(1)))\n    return speech_ids\n\n\nclass TritonPythonModel:\n    \"\"\"CosyVoice3 BLS orchestrator for Triton Inference Server.\n\n    Orchestrates: audio_tokenizer, speaker_embedding, remote LLM (httpx),\n    token2wav (flow-only), and vocoder (CausalHiFTGenerator).\n    Supports both streaming (decoupled) and offline (non-decoupled) modes.\n    \"\"\"\n\n    def initialize(self, args):\n        self.logger = pb_utils.Logger\n        self.model_config = json.loads(args['model_config'])\n        parameters = self.model_config['parameters']\n        model_params = {k: v[\"string_value\"] for k, v in parameters.items()}\n\n        self.device = torch.device(\"cuda\")\n        self.decoupled = pb_utils.using_decoupled_model_transaction_policy(self.model_config)\n\n        # Streaming config\n        self.token_frame_rate = 25\n        self.flow_pre_lookahead_len = 3\n        self.token_hop_len = 15\n        self.token_mel_ratio = 2\n        self.dynamic_chunk_strategy = model_params.get(\"dynamic_chunk_strategy\", \"exponential\")\n        self.logger.log_info(f\"CosyVoice3 BLS initialized, decoupled={self.decoupled}, \"\n                             f\"chunk_strategy={self.dynamic_chunk_strategy}\")\n\n        # HTTP client for remote LLM (trtllm-serve default port: 8000)\n        self.http_client = httpx.AsyncClient()\n        self.api_base = model_params.get(\"llm_api_base\", \"http://localhost:8000/v1/chat/completions\")\n\n        # Speaker cache to avoid redundant audio_tokenizer/speaker_embedding calls\n        self.speaker_cache = {}\n\n    def _convert_speech_tokens_to_str(self, speech_tokens):\n        \"\"\"Convert speech token IDs tensor/list to string like '<|s_N|>'.\"\"\"\n        if isinstance(speech_tokens, torch.Tensor):\n            speech_tokens = speech_tokens.cpu().numpy().flatten().tolist()\n        return \"\".join(f\"<|s_{int(tid)}|>\" for tid in speech_tokens)\n\n    def _extract_speech_feat(self, speech):\n        \"\"\"Extract mel spectrogram from 24kHz speech for flow prompt.\"\"\"\n        speech_feat = mel_spectrogram(speech).squeeze(dim=0).transpose(0, 1)\n        speech_feat = speech_feat.unsqueeze(dim=0).to(self.device)\n        return speech_feat\n\n    async def forward_llm_streaming(self, target_text, reference_text, prompt_speech_tokens):\n        \"\"\"Async generator: stream LLM tokens via httpx SSE.\"\"\"\n        full_text = f\"{reference_text}{target_text}\"\n        prompt_speech_tokens_str = self._convert_speech_tokens_to_str(prompt_speech_tokens)\n\n        chat = [\n            {\"role\": \"user\", \"content\": full_text},\n            {\"role\": \"assistant\", \"content\": prompt_speech_tokens_str}\n        ]\n        payload = {\n            \"model\": \"trt_engines_bfloat16\",\n            \"messages\": chat,\n            \"max_tokens\": 750,\n            \"temperature\": 0.8,\n            \"top_p\": 0.95,\n            \"top_k\": 50,\n            \"repetition_penalty\": 1.1,\n            \"stop\": [\"<|eos1|>\", \"<|eos|>\"],\n            \"stream\": True,\n        }\n\n        buffer = \"\"\n        async with self.http_client.stream(\"POST\", self.api_base, json=payload, timeout=None) as response:\n            response.raise_for_status()\n            async for line in response.aiter_lines():\n                if line.startswith(\"data: \"):\n                    line_data = line[len(\"data: \"):].strip()\n                    if line_data == \"[DONE]\":\n                        break\n                    try:\n                        json_data = json.loads(line_data)\n                        content = json_data.get(\"choices\", [{}])[0].get(\"delta\", {}).get(\"content\")\n                        if content:\n                            buffer += content\n                            while True:\n                                match = re.search(r\"<\\|s_(\\d+)\\|>\", buffer)\n                                if not match:\n                                    break\n                                token_num = int(match.group(1))\n                                # final_id = token_num + ORIGINAL_VOCAB_SIZE\n                                yield token_num\n                                buffer = buffer[match.end():]\n                    except json.JSONDecodeError:\n                        continue\n\n        # Flush remaining tokens\n        while True:\n            match = re.search(r\"<\\|s_(\\d+)\\|>\", buffer)\n            if not match:\n                break\n            token_num = int(match.group(1))\n            #final_id = token_num + ORIGINAL_VOCAB_SIZE\n            yield token_num\n            buffer = buffer[match.end():]\n\n    async def forward_llm_offline(self, target_text, reference_text, prompt_speech_tokens):\n        \"\"\"Non-streaming LLM call, returns all speech token IDs at once.\"\"\"\n        full_text = f\"{reference_text}{target_text}\"\n        prompt_speech_tokens_str = self._convert_speech_tokens_to_str(prompt_speech_tokens)\n\n        chat = [\n            {\"role\": \"user\", \"content\": full_text},\n            {\"role\": \"assistant\", \"content\": prompt_speech_tokens_str}\n        ]\n        payload = {\n            \"model\": \"trt_engines_bfloat16\",\n            \"messages\": chat,\n            \"max_tokens\": 750,\n            \"temperature\": 0.8,\n            \"top_p\": 0.95,\n            \"top_k\": 50,\n            \"repetition_penalty\": 1.1,\n            \"stop\": [\"<|eos1|>\", \"<|eos|>\"],\n            \"stream\": False,\n        }\n        response = await self.http_client.post(self.api_base, json=payload, timeout=None)\n        response.raise_for_status()\n        response_json = response.json()\n        generated_content = response_json['choices'][0]['message']['content']\n        speech_ids = parse_speech_token_string(generated_content)\n        # return [sid + ORIGINAL_VOCAB_SIZE for sid in speech_ids]\n        return speech_ids\n\n    def forward_audio_tokenizer(self, wav, wav_len):\n        \"\"\"BLS call to audio_tokenizer.\"\"\"\n        inference_request = pb_utils.InferenceRequest(\n            model_name='audio_tokenizer',\n            requested_output_names=['prompt_speech_tokens'],\n            inputs=[wav, wav_len]\n        )\n        inference_response = inference_request.exec()\n        if inference_response.has_error():\n            raise pb_utils.TritonModelException(inference_response.error().message())\n        prompt_speech_tokens = pb_utils.get_output_tensor_by_name(\n            inference_response, 'prompt_speech_tokens')\n        return torch.utils.dlpack.from_dlpack(prompt_speech_tokens.to_dlpack()).cpu()\n\n    def forward_speaker_embedding(self, wav):\n        \"\"\"BLS call to speaker_embedding.\"\"\"\n        inference_request = pb_utils.InferenceRequest(\n            model_name='speaker_embedding',\n            requested_output_names=['prompt_spk_embedding'],\n            inputs=[pb_utils.Tensor.from_dlpack(\"reference_wav\", to_dlpack(wav))]\n        )\n        inference_response = inference_request.exec()\n        if inference_response.has_error():\n            raise pb_utils.TritonModelException(inference_response.error().message())\n        prompt_spk_embedding = pb_utils.get_output_tensor_by_name(\n            inference_response, 'prompt_spk_embedding')\n        return torch.utils.dlpack.from_dlpack(prompt_spk_embedding.to_dlpack())\n\n    async def forward_token2wav(self, target_speech_tokens, prompt_speech_tokens,\n                                prompt_speech_feat, prompt_spk_embedding,\n                                request_id, token_offset=None, finalize=True,\n                                priority=100):\n        \"\"\"Async BLS call to token2wav (flow-only). Returns mel tensor.\"\"\"\n        target_tokens_pb = pb_utils.Tensor.from_dlpack(\n            \"target_speech_tokens\", to_dlpack(target_speech_tokens))\n        prompt_tokens_pb = pb_utils.Tensor.from_dlpack(\n            \"prompt_speech_tokens\", to_dlpack(prompt_speech_tokens))\n        prompt_feat_pb = pb_utils.Tensor.from_dlpack(\n            \"prompt_speech_feat\", to_dlpack(prompt_speech_feat))\n        prompt_emb_pb = pb_utils.Tensor.from_dlpack(\n            \"prompt_spk_embedding\", to_dlpack(prompt_spk_embedding))\n\n        inputs = [target_tokens_pb, prompt_tokens_pb, prompt_feat_pb, prompt_emb_pb]\n\n        if token_offset is not None:\n            inputs.append(pb_utils.Tensor(\"token_offset\",\n                          np.array([[token_offset]], dtype=np.int32)))\n            inputs.append(pb_utils.Tensor(\"finalize\",\n                          np.array([[finalize]], dtype=np.bool_)))\n\n        inference_request = pb_utils.InferenceRequest(\n            model_name='token2wav',\n            requested_output_names=['mel'],\n            inputs=inputs,\n            request_id=request_id,\n            parameters={\"priority\": priority},\n        )\n\n        inference_response = await inference_request.async_exec()\n        if inference_response.has_error():\n            raise pb_utils.TritonModelException(inference_response.error().message())\n\n        mel = pb_utils.get_output_tensor_by_name(inference_response, 'mel')\n        return torch.utils.dlpack.from_dlpack(mel.to_dlpack())\n\n    async def forward_vocoder(self, mel, finalize):\n        \"\"\"Async BLS call to vocoder. Returns speech tensor.\"\"\"\n        if mel.dim() == 2:\n            mel = mel.unsqueeze(0)  # [80, T] -> [1, 80, T]\n        mel_pb = pb_utils.Tensor.from_dlpack(\"mel\", to_dlpack(mel.float()))\n        finalize_pb = pb_utils.Tensor(\"finalize\",\n                      np.array([[finalize]], dtype=np.bool_))\n\n        inference_request = pb_utils.InferenceRequest(\n            model_name='vocoder',\n            requested_output_names=['tts_speech'],\n            inputs=[mel_pb, finalize_pb],\n        )\n\n        inference_response = await inference_request.async_exec()\n        if inference_response.has_error():\n            raise pb_utils.TritonModelException(inference_response.error().message())\n\n        speech = pb_utils.get_output_tensor_by_name(inference_response, 'tts_speech')\n        return torch.utils.dlpack.from_dlpack(speech.to_dlpack()).cpu()\n\n    def _prepare_prompt(self, request):\n        \"\"\"Extract reference audio, tokenize, compute speaker embedding and mel feat.\"\"\"\n        wav = pb_utils.get_input_tensor_by_name(request, \"reference_wav\")\n        wav_len = pb_utils.get_input_tensor_by_name(request, \"reference_wav_len\")\n\n        reference_text = pb_utils.get_input_tensor_by_name(request, \"reference_text\")\n        reference_text = reference_text.as_numpy()[0][0].decode('utf-8') if reference_text is not None else \"\"\n        if '<|endofprompt|>' not in reference_text:\n            reference_text = 'You are a helpful assistant.<|endofprompt|>' + reference_text\n\n        # Check speaker cache\n        if reference_text in self.speaker_cache:\n            cached = self.speaker_cache[reference_text]\n            return (cached['prompt_speech_tokens_for_llm'], cached['prompt_speech_tokens'],\n                    cached['prompt_speech_feat'], cached['prompt_spk_embedding'], reference_text)\n\n        # Audio tokenizer\n        wav_np = wav.as_numpy()\n        wav_len_val = wav_len.as_numpy()[0][0]\n        prompt_speech_tokens = self.forward_audio_tokenizer(wav, wav_len)\n        prompt_speech_tokens = prompt_speech_tokens.unsqueeze(0)  # [1, T]\n\n        # Speaker embedding\n        wav_tensor = torch.from_numpy(wav_np)\n        wav_tensor = wav_tensor[:, :wav_len_val]\n        prompt_spk_embedding = self.forward_speaker_embedding(wav_tensor)\n\n        # Mel extraction at 24kHz with CosyVoice3 params\n        prompt_speech_resample = torchaudio.transforms.Resample(\n            orig_freq=16000, new_freq=24000)(wav_tensor)\n        speech_feat = self._extract_speech_feat(prompt_speech_resample)\n\n        # Keep full tokens for LLM prefill (untruncated)\n        prompt_speech_tokens_for_llm = prompt_speech_tokens.clone()\n\n        # Align prompt speech feat and tokens to 2:1 ratio (for flow model only)\n        orig_feat_len = speech_feat.shape[1]\n        orig_token_len = prompt_speech_tokens.shape[-1]\n        token_len = min(int(speech_feat.shape[1] / 2), prompt_speech_tokens.shape[-1])\n        prompt_speech_feat = speech_feat[:, :2 * token_len].contiguous().half()\n        prompt_speech_tokens = prompt_speech_tokens[:, :token_len].contiguous()\n\n        # Cache\n        self.speaker_cache[reference_text] = {\n            'prompt_speech_tokens_for_llm': prompt_speech_tokens_for_llm,\n            'prompt_speech_tokens': prompt_speech_tokens,\n            'prompt_speech_feat': prompt_speech_feat,\n            'prompt_spk_embedding': prompt_spk_embedding,\n        }\n\n        return prompt_speech_tokens_for_llm, prompt_speech_tokens, prompt_speech_feat, prompt_spk_embedding, reference_text\n\n    async def _process_request_streaming(self, request):\n        \"\"\"Process a single request in streaming (decoupled) mode.\"\"\"\n        request_id = request.request_id()\n        response_sender = request.get_response_sender()\n\n        try:\n            prompt_speech_tokens_for_llm, prompt_speech_tokens, prompt_speech_feat, \\\n                prompt_spk_embedding, reference_text = self._prepare_prompt(request)\n\n            target_text = pb_utils.get_input_tensor_by_name(request, \"target_text\").as_numpy()\n            target_text = target_text[0][0].decode('utf-8')\n\n            semantic_token_ids_arr = []\n            token_offset = 0\n            chunk_index = 0\n            this_token_hop_len = self.token_hop_len\n            accumulated_mel = None\n            speech_offset = 0\n            start_time = time.time()\n\n            async for generated_id in self.forward_llm_streaming(\n                target_text=target_text,\n                reference_text=reference_text,\n                prompt_speech_tokens=prompt_speech_tokens_for_llm,\n            ):\n                semantic_token_ids_arr.append(generated_id)\n\n                while True:\n                    pending_num = len(semantic_token_ids_arr) - token_offset\n                    if pending_num < this_token_hop_len + self.flow_pre_lookahead_len:\n                        break\n\n                    # Prepare tokens for this chunk\n                    end_idx = token_offset + this_token_hop_len + self.flow_pre_lookahead_len\n                    this_tokens = torch.tensor(\n                        semantic_token_ids_arr[:end_idx]\n                    ).unsqueeze(0).to(torch.int32).to(self.device)\n\n                    # Call token2wav (flow-only) -> mel_chunk\n                    mel_chunk = await self.forward_token2wav(\n                        this_tokens, prompt_speech_tokens,\n                        prompt_speech_feat, prompt_spk_embedding,\n                        request_id, token_offset=token_offset, finalize=False,\n                        priority=chunk_index + 1,\n                    )\n\n                    # Accumulate mel\n                    if mel_chunk.dim() == 2:\n                        mel_chunk = mel_chunk.unsqueeze(0)\n                    if accumulated_mel is None:\n                        accumulated_mel = mel_chunk\n                    else:\n                        accumulated_mel = torch.cat([accumulated_mel, mel_chunk], dim=2)\n\n                    # Call vocoder\n                    speech = await self.forward_vocoder(accumulated_mel, finalize=False)\n\n                    # Extract new speech\n                    new_speech = speech[:, speech_offset:]\n                    speech_offset += new_speech.shape[1]\n\n                    if new_speech.shape[1] > 0:\n                        audio_tensor = pb_utils.Tensor.from_dlpack(\n                            \"waveform\", to_dlpack(new_speech))\n                        inference_response = pb_utils.InferenceResponse(\n                            output_tensors=[audio_tensor])\n                        response_sender.send(inference_response)\n\n                    token_offset += this_token_hop_len\n\n                    # Dynamic chunk strategy\n                    if self.dynamic_chunk_strategy == \"exponential\":\n                        this_token_hop_len = self.token_frame_rate * (2 ** chunk_index)\n                    elif self.dynamic_chunk_strategy == \"time_based\":\n                        cost_time = time.time() - start_time\n                        duration = token_offset / self.token_frame_rate\n                        if chunk_index > 0 and cost_time > 0:\n                            avg_chunk_time = cost_time / (chunk_index + 1)\n                            if avg_chunk_time > 0:\n                                multiples = (duration - cost_time) / avg_chunk_time\n                                next_pending = len(semantic_token_ids_arr) - token_offset\n                                if multiples > 4:\n                                    this_token_hop_len = (next_pending // self.token_hop_len + 1) * self.token_hop_len\n                                elif multiples > 2:\n                                    this_token_hop_len = (next_pending // self.token_hop_len) * self.token_hop_len\n                                else:\n                                    this_token_hop_len = self.token_hop_len\n                                this_token_hop_len = max(self.token_hop_len, this_token_hop_len)\n\n                    chunk_index += 1\n\n            # Final chunk with remaining tokens\n            if len(semantic_token_ids_arr) > 0:\n                remaining_tokens = torch.tensor(\n                    semantic_token_ids_arr\n                ).unsqueeze(0).to(torch.int32).to(self.device)\n\n                mel_chunk = await self.forward_token2wav(\n                    remaining_tokens, prompt_speech_tokens,\n                    prompt_speech_feat, prompt_spk_embedding,\n                    request_id, token_offset=token_offset, finalize=True,\n                    priority=chunk_index + 1,\n                )\n\n                if mel_chunk.dim() == 2:\n                    mel_chunk = mel_chunk.unsqueeze(0)\n                if accumulated_mel is None:\n                    accumulated_mel = mel_chunk\n                else:\n                    accumulated_mel = torch.cat([accumulated_mel, mel_chunk], dim=2)\n\n                speech = await self.forward_vocoder(accumulated_mel, finalize=True)\n\n                new_speech = speech[:, speech_offset:]\n                if new_speech.shape[1] > 0:\n                    audio_tensor = pb_utils.Tensor.from_dlpack(\n                        \"waveform\", to_dlpack(new_speech))\n                    inference_response = pb_utils.InferenceResponse(\n                        output_tensors=[audio_tensor])\n                    response_sender.send(inference_response)\n\n            response_sender.send(flags=pb_utils.TRITONSERVER_RESPONSE_COMPLETE_FINAL)\n        except Exception as e:\n            self.logger.log_error(f\"Error in streaming request: {e}\")\n            error_response = pb_utils.InferenceResponse(\n                error=pb_utils.TritonError(str(e)))\n            response_sender.send(error_response)\n            response_sender.send(flags=pb_utils.TRITONSERVER_RESPONSE_COMPLETE_FINAL)\n\n    async def _process_request_offline(self, request):\n        \"\"\"Process a single request in offline (non-decoupled) mode.\"\"\"\n        request_id = request.request_id()\n\n        prompt_speech_tokens_for_llm, prompt_speech_tokens, prompt_speech_feat, \\\n            prompt_spk_embedding, reference_text = self._prepare_prompt(request)\n\n        target_text = pb_utils.get_input_tensor_by_name(request, \"target_text\").as_numpy()\n        target_text = target_text[0][0].decode('utf-8')\n\n        # Get all speech tokens at once (use full untruncated prompt tokens for LLM)\n        all_token_ids = await self.forward_llm_offline(\n            target_text=target_text,\n            reference_text=reference_text,\n            prompt_speech_tokens=prompt_speech_tokens_for_llm,\n        )\n\n        if len(all_token_ids) == 0:\n            raise pb_utils.TritonModelException(\"LLM generated no speech tokens\")\n\n        all_tokens = torch.tensor(all_token_ids).unsqueeze(0).to(torch.int32).to(self.device)\n\n        # token2wav (no token_offset, finalize=True) -> full mel\n        mel = await self.forward_token2wav(\n            all_tokens, prompt_speech_tokens,\n            prompt_speech_feat, prompt_spk_embedding,\n            request_id,\n        )\n\n        # vocoder -> full speech\n        speech = await self.forward_vocoder(mel, finalize=True)\n\n        audio_tensor = pb_utils.Tensor.from_dlpack(\"waveform\", to_dlpack(speech))\n        return pb_utils.InferenceResponse(output_tensors=[audio_tensor])\n\n    async def execute(self, requests):\n        if self.decoupled:\n            tasks = [\n                asyncio.create_task(self._process_request_streaming(request))\n                for request in requests\n            ]\n            await asyncio.gather(*tasks)\n            return None\n        else:\n            responses = []\n            for request in requests:\n                try:\n                    response = await self._process_request_offline(request)\n                    responses.append(response)\n                except Exception as e:\n                    self.logger.log_error(f\"Error in offline request: {e}\")\n                    responses.append(pb_utils.InferenceResponse(\n                        error=pb_utils.TritonError(str(e))))\n            return responses\n\n    def finalize(self):\n        self.logger.log_info(\"Finalizing CosyVoice3 BLS model\")\n        if hasattr(self, \"http_client\"):\n            asyncio.run(self.http_client.aclose())\n"
  },
  {
    "path": "runtime/triton_trtllm/model_repo_cosyvoice3/cosyvoice3/config.pbtxt",
    "content": "# Copyright (c) 2025, NVIDIA CORPORATION.  All rights reserved.\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\nname: \"cosyvoice3\"\nbackend: \"python\"\nmax_batch_size: ${triton_max_batch_size}\ndynamic_batching {\n    max_queue_delay_microseconds: ${max_queue_delay_microseconds}\n}\nmodel_transaction_policy {\n  decoupled: ${decoupled_mode}\n}\nparameters [\n  {\n   key: \"llm_tokenizer_dir\",\n   value: {string_value:\"${llm_tokenizer_dir}\"}\n  },\n  {\n   key: \"model_dir\",\n   value: {string_value:\"${model_dir}\"}\n  }\n]\n\ninput [\n  {\n    name: \"reference_wav\"\n    data_type: TYPE_FP32\n    dims: [-1]\n    optional: true\n  },\n  {\n    name: \"reference_wav_len\"\n    data_type: TYPE_INT32\n    dims: [1]\n    optional: true\n  },\n  {\n    name: \"reference_text\"\n    data_type: TYPE_STRING\n    dims: [1]\n    optional: true\n  },\n  {\n    name: \"target_text\"\n    data_type: TYPE_STRING\n    dims: [1]\n  }\n]\noutput [\n  {\n    name: \"waveform\"\n    data_type: TYPE_FP32\n    dims: [ -1 ]\n  }\n]\n\ninstance_group [\n  {\n    count: ${bls_instance_num}\n    kind: KIND_CPU\n  }\n]"
  },
  {
    "path": "runtime/triton_trtllm/model_repo_cosyvoice3/speaker_embedding/1/model.py",
    "content": "# Copyright 2025, NVIDIA CORPORATION & AFFILIATES. 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\n# are met:\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#  * Neither the name of NVIDIA CORPORATION nor the names of its\n#    contributors may be used to endorse or promote products derived\n#    from this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY\n# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\nimport json\nimport torch\nfrom torch.utils.dlpack import to_dlpack\n\nimport triton_python_backend_utils as pb_utils\n\nimport os\nimport numpy as np\nimport torchaudio.compliance.kaldi as kaldi\nfrom cosyvoice.utils.file_utils import convert_onnx_to_trt\nfrom cosyvoice.utils.common import TrtContextWrapper\nimport onnxruntime\n\n\nclass TritonPythonModel:\n    \"\"\"Triton Python model for audio tokenization.\n\n    This model takes reference audio input and extracts semantic tokens\n    using s3tokenizer.\n    \"\"\"\n\n    def initialize(self, args):\n        \"\"\"Initialize the model.\n\n        Args:\n            args: Dictionary containing model configuration\n        \"\"\"\n        # Parse model parameters\n        parameters = json.loads(args['model_config'])['parameters']\n        model_params = {k: v[\"string_value\"] for k, v in parameters.items()}\n\n        self.device = torch.device(\"cuda\")\n\n        model_dir = model_params[\"model_dir\"]\n        gpu = \"l20\"\n        enable_trt = True\n        if enable_trt:\n            self.load_spk_trt(f'{model_dir}/campplus.{gpu}.fp32.trt',\n                              f'{model_dir}/campplus.onnx',\n                              1,\n                              False)\n        else:\n            campplus_model = f'{model_dir}/campplus.onnx'\n            option = onnxruntime.SessionOptions()\n            option.graph_optimization_level = onnxruntime.GraphOptimizationLevel.ORT_ENABLE_ALL\n            option.intra_op_num_threads = 1\n            self.spk_model = onnxruntime.InferenceSession(campplus_model, sess_options=option, providers=[\"CPUExecutionProvider\"])\n\n    def load_spk_trt(self, spk_model, spk_onnx_model, trt_concurrent=1, fp16=True):\n        if not os.path.exists(spk_model) or os.path.getsize(spk_model) == 0:\n            trt_kwargs = self.get_spk_trt_kwargs()\n            convert_onnx_to_trt(spk_model, trt_kwargs, spk_onnx_model, fp16)\n        import tensorrt as trt\n        with open(spk_model, 'rb') as f:\n            spk_engine = trt.Runtime(trt.Logger(trt.Logger.INFO)).deserialize_cuda_engine(f.read())\n        assert spk_engine is not None, 'failed to load trt {}'.format(spk_model)\n        self.spk_model = TrtContextWrapper(spk_engine, trt_concurrent=trt_concurrent, device=self.device)\n\n    def get_spk_trt_kwargs(self):\n        min_shape = [(1, 4, 80)]\n        opt_shape = [(1, 500, 80)]\n        max_shape = [(1, 3000, 80)]\n        input_names = [\"input\"]\n        return {'min_shape': min_shape, 'opt_shape': opt_shape, 'max_shape': max_shape, 'input_names': input_names}\n\n    def _extract_spk_embedding(self, speech):\n        feat = kaldi.fbank(speech,\n                           num_mel_bins=80,\n                           dither=0,\n                           sample_frequency=16000)\n        spk_feat = feat - feat.mean(dim=0, keepdim=True)\n\n        if isinstance(self.spk_model, onnxruntime.InferenceSession):\n            embedding = self.spk_model.run(\n                None, {self.spk_model.get_inputs()[0].name: spk_feat.unsqueeze(dim=0).cpu().numpy()}\n            )[0].flatten().tolist()\n            embedding = torch.tensor([embedding]).to(self.device)\n        else:\n            [spk_model, stream], trt_engine = self.spk_model.acquire_estimator()\n            # NOTE need to synchronize when switching stream\n            with torch.cuda.device(self.device):\n                torch.cuda.current_stream().synchronize()\n                spk_feat = spk_feat.unsqueeze(dim=0).to(self.device)\n                batch_size = spk_feat.size(0)\n\n                with stream:\n                    spk_model.set_input_shape('input', (batch_size, spk_feat.size(1), 80))\n                    embedding = torch.empty((batch_size, 192), device=spk_feat.device)\n\n                    data_ptrs = [spk_feat.contiguous().data_ptr(),\n                                 embedding.contiguous().data_ptr()]\n                    for i, j in enumerate(data_ptrs):\n\n                        spk_model.set_tensor_address(trt_engine.get_tensor_name(i), j)\n                    # run trt engine\n                    assert spk_model.execute_async_v3(torch.cuda.current_stream().cuda_stream) is True\n                    torch.cuda.current_stream().synchronize()\n                self.spk_model.release_estimator(spk_model, stream)\n\n        return embedding.half()\n\n    def execute(self, requests):\n        \"\"\"Execute inference on the batched requests.\"\"\"\n        responses = []\n        # Process each request in batch\n        for req_idx, request in enumerate(requests):\n            # Extract input tensors\n            wav_array = pb_utils.get_input_tensor_by_name(\n                request, \"reference_wav\").as_numpy()\n            wav_array = torch.from_numpy(wav_array).to(self.device)\n\n            embedding = self._extract_spk_embedding(wav_array)\n\n            prompt_spk_embedding_tensor = pb_utils.Tensor.from_dlpack(\n                \"prompt_spk_embedding\", to_dlpack(embedding))\n            inference_response = pb_utils.InferenceResponse(\n                output_tensors=[prompt_spk_embedding_tensor])\n\n            responses.append(inference_response)\n\n        return responses\n"
  },
  {
    "path": "runtime/triton_trtllm/model_repo_cosyvoice3/speaker_embedding/config.pbtxt",
    "content": "# Copyright (c) 2025, NVIDIA CORPORATION.  All rights reserved.\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\nname: \"speaker_embedding\"\nbackend: \"python\"\nmax_batch_size: ${triton_max_batch_size}\ndynamic_batching {\n    max_queue_delay_microseconds: ${max_queue_delay_microseconds}\n}\nparameters [\n  {\n   key: \"model_dir\",\n   value: {string_value:\"${model_dir}\"}\n  }\n]\n\ninput [\n  {\n    name: \"reference_wav\"\n    data_type: TYPE_FP32\n    dims: [-1]\n  }\n]\noutput [\n  {\n    name: \"prompt_spk_embedding\"\n    data_type: TYPE_FP16\n    dims: [-1]\n  }\n]\n\ninstance_group [\n  {\n    count: 1\n    kind: KIND_CPU\n  }\n]"
  },
  {
    "path": "runtime/triton_trtllm/model_repo_cosyvoice3/token2wav/1/model.py",
    "content": "import json\nimport os\nimport logging\nimport queue\n\nimport torch\nimport numpy as np\nfrom torch.utils.dlpack import to_dlpack\nimport triton_python_backend_utils as pb_utils\nfrom hyperpyyaml import load_hyperpyyaml\n\nlogging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')\nlogger = logging.getLogger(__name__)\n\n\nclass TrtContextWrapper:\n    def __init__(self, trt_engine, trt_concurrent=1, device='cuda:0'):\n        self.trt_context_pool = queue.Queue(maxsize=trt_concurrent)\n        self.trt_engine = trt_engine\n        self.device = device\n        for _ in range(trt_concurrent):\n            trt_context = trt_engine.create_execution_context()\n            trt_stream = torch.cuda.stream(torch.cuda.Stream(torch.device(device)))\n            assert trt_context is not None\n            self.trt_context_pool.put([trt_context, trt_stream])\n\n    def acquire_estimator(self):\n        return self.trt_context_pool.get(), self.trt_engine\n\n    def release_estimator(self, context, stream):\n        self.trt_context_pool.put([context, stream])\n\n\ndef convert_onnx_to_trt(trt_model, trt_kwargs, onnx_model, fp16, autocast_mode=False):\n    import tensorrt as trt\n    logging.info(\"Converting onnx to trt...\")\n    if autocast_mode:\n        network_flags = 1 << int(trt.NetworkDefinitionCreationFlag.STRONGLY_TYPED)\n    else:\n        network_flags = 1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)\n    trt_logger = trt.Logger(trt.Logger.INFO)\n    builder = trt.Builder(trt_logger)\n    network = builder.create_network(network_flags)\n    parser = trt.OnnxParser(network, trt_logger)\n    config = builder.create_builder_config()\n    config.set_memory_pool_limit(trt.MemoryPoolType.WORKSPACE, 1 << 32)\n    if not autocast_mode and fp16:\n        config.set_flag(trt.BuilderFlag.FP16)\n    profile = builder.create_optimization_profile()\n    with open(onnx_model, \"rb\") as f:\n        if not parser.parse(f.read()):\n            for error in range(parser.num_errors):\n                print(parser.get_error(error))\n            raise ValueError(f'failed to parse {onnx_model}')\n    for i in range(len(trt_kwargs['input_names'])):\n        profile.set_shape(trt_kwargs['input_names'][i],\n                          trt_kwargs['min_shape'][i],\n                          trt_kwargs['opt_shape'][i],\n                          trt_kwargs['max_shape'][i])\n    if not autocast_mode:\n        tensor_dtype = trt.DataType.HALF if fp16 else trt.DataType.FLOAT\n        for i in range(network.num_inputs):\n            network.get_input(i).dtype = tensor_dtype\n        for i in range(network.num_outputs):\n            network.get_output(i).dtype = tensor_dtype\n    config.add_optimization_profile(profile)\n    engine_bytes = builder.build_serialized_network(network, config)\n    with open(trt_model, \"wb\") as f:\n        f.write(engine_bytes)\n    logging.info(\"Successfully converted onnx to trt\")\n\ntorch.set_num_threads(1)\n\n\nclass TritonPythonModel:\n    \"\"\"Triton Python model for CosyVoice3 token2wav (flow-only, stateless).\n\n    Converts speech tokens to mel spectrogram using the CausalMaskedDiffWithDiT flow model.\n    \"\"\"\n\n    def initialize(self, args):\n        parameters = json.loads(args['model_config'])['parameters']\n        model_params = {k: v[\"string_value\"] for k, v in parameters.items()}\n        model_dir = model_params[\"model_dir\"]\n\n        self.device = torch.device(\"cuda\")\n\n        # Load flow model from cosyvoice3.yaml\n        with open(os.path.join(model_dir, 'cosyvoice3.yaml'), 'r') as f:\n            configs = load_hyperpyyaml(f, overrides={\n                'qwen_pretrain_path': os.path.join(model_dir, 'CosyVoice-BlankEN')\n            })\n        self.flow = configs['flow']\n        self.fp16 = True\n        self.flow.half()\n        self.flow.load_state_dict(\n            torch.load(os.path.join(model_dir, 'flow.pt'),\n                        map_location='cpu', weights_only=True),\n            strict=True\n        )\n        self.flow.to(self.device).eval()\n\n        # TRT acceleration for flow decoder estimator\n        self.load_trt(model_dir)\n\n        self.token_mel_ratio = self.flow.token_mel_ratio\n        logger.info(f\"Token2wav (flow-only) initialized, token_mel_ratio={self.token_mel_ratio}\")\n\n    def load_trt(self, model_dir, trt_concurrent=1):\n        device_id = torch.cuda.current_device()\n        onnx_path = os.path.join(model_dir, 'flow.decoder.estimator.autocast_fp16.onnx')\n        trt_path = os.path.join(model_dir, f'flow.decoder.estimator.autocast_fp16.{device_id}.plan')\n\n        if not os.path.exists(trt_path) or os.path.getsize(trt_path) == 0:\n            trt_kwargs = self.get_trt_kwargs()\n            convert_onnx_to_trt(trt_path, trt_kwargs, onnx_path,\n                                fp16=True, autocast_mode=True)\n        del self.flow.decoder.estimator\n        import tensorrt as trt\n        with open(trt_path, 'rb') as f:\n            estimator_engine = trt.Runtime(trt.Logger(trt.Logger.INFO)).deserialize_cuda_engine(f.read())\n        assert estimator_engine is not None, f'failed to load trt {trt_path}'\n        self.flow.decoder.estimator = TrtContextWrapper(\n            estimator_engine, trt_concurrent=trt_concurrent, device=str(self.device))\n\n    def get_trt_kwargs(self):\n        min_shape = [(2, 80, 4), (2, 1, 4), (2, 80, 4), (2, 80, 4)]\n        opt_shape = [(2, 80, 500), (2, 1, 500), (2, 80, 500), (2, 80, 500)]\n        max_shape = [(2, 80, 3000), (2, 1, 3000), (2, 80, 3000), (2, 80, 3000)]\n        input_names = [\"x\", \"mask\", \"mu\", \"cond\"]\n        return {'min_shape': min_shape, 'opt_shape': opt_shape,\n                'max_shape': max_shape, 'input_names': input_names}\n\n    def execute(self, requests):\n        responses = []\n        for req_idx, request in enumerate(requests):\n            target_speech_tokens = pb_utils.get_input_tensor_by_name(\n                request, \"target_speech_tokens\")\n            target_speech_tokens = torch.utils.dlpack.from_dlpack(\n                target_speech_tokens.to_dlpack()).to(self.device)\n            if target_speech_tokens.dim() == 1:\n                target_speech_tokens = target_speech_tokens.unsqueeze(0)\n\n            # Optional inputs\n            prompt_speech_tokens_pb = pb_utils.get_input_tensor_by_name(\n                request, \"prompt_speech_tokens\")\n            if prompt_speech_tokens_pb is not None:\n                prompt_speech_tokens = torch.utils.dlpack.from_dlpack(\n                    prompt_speech_tokens_pb.to_dlpack()).to(self.device)\n                if prompt_speech_tokens.dim() == 1:\n                    prompt_speech_tokens = prompt_speech_tokens.unsqueeze(0)\n\n                prompt_speech_feat = pb_utils.get_input_tensor_by_name(\n                    request, \"prompt_speech_feat\")\n                prompt_speech_feat = torch.utils.dlpack.from_dlpack(\n                    prompt_speech_feat.to_dlpack()).to(self.device)\n                if prompt_speech_feat.dim() == 2:\n                    prompt_speech_feat = prompt_speech_feat.unsqueeze(0)  # [T, 80] -> [1, T, 80]\n\n                prompt_spk_embedding = pb_utils.get_input_tensor_by_name(\n                    request, \"prompt_spk_embedding\")\n                prompt_spk_embedding = torch.utils.dlpack.from_dlpack(\n                    prompt_spk_embedding.to_dlpack()).to(self.device)\n                if prompt_spk_embedding.dim() == 1:\n                    prompt_spk_embedding = prompt_spk_embedding.unsqueeze(0)\n            else:\n                raise ValueError(\"prompt_speech_tokens is required for CosyVoice3 token2wav\")\n\n            token_offset_pb = pb_utils.get_input_tensor_by_name(request, \"token_offset\")\n            finalize_pb = pb_utils.get_input_tensor_by_name(request, \"finalize\")\n\n            token_offset = token_offset_pb.as_numpy().item() if token_offset_pb is not None else None\n            finalize = finalize_pb.as_numpy().item() if finalize_pb is not None else True\n            streaming = not finalize\n\n            with torch.no_grad(), torch.cuda.amp.autocast(self.fp16):\n                mel, _ = self.flow.inference(\n                    token=target_speech_tokens,\n                    token_len=torch.tensor([target_speech_tokens.shape[1]], dtype=torch.int32).to(self.device),\n                    prompt_token=prompt_speech_tokens,\n                    prompt_token_len=torch.tensor([prompt_speech_tokens.shape[1]], dtype=torch.int32).to(self.device),\n                    prompt_feat=prompt_speech_feat,\n                    prompt_feat_len=torch.tensor([prompt_speech_feat.shape[1]], dtype=torch.int32).to(self.device),\n                    embedding=prompt_spk_embedding,\n                    streaming=streaming,\n                    finalize=finalize,\n                )\n\n            # Slice mel from token_offset if provided\n            if token_offset is not None:\n                mel = mel[:, :, token_offset * self.token_mel_ratio:]\n\n            # Output mel as [80, T] (squeeze batch dim for Triton)\n            mel_out = mel.squeeze(0).float()  # [80, T]\n            mel_out = mel_out.cpu() # otherwise, dlpack bug\n            mel_tensor = pb_utils.Tensor.from_dlpack(\"mel\", to_dlpack(mel_out))\n            inference_response = pb_utils.InferenceResponse(output_tensors=[mel_tensor])\n            responses.append(inference_response)\n\n        return responses\n"
  },
  {
    "path": "runtime/triton_trtllm/model_repo_cosyvoice3/token2wav/config.pbtxt",
    "content": "name: \"token2wav\"\nbackend: \"python\"\nmax_batch_size: ${triton_max_batch_size}\n\ndynamic_batching {\n    max_queue_delay_microseconds: ${max_queue_delay_microseconds}\n    priority_levels: 100\n    default_priority_level: 100\n}\n\nparameters [\n  {\n   key: \"model_dir\",\n   value: {string_value:\"${model_dir}\"}\n  }\n]\n\ninput [\n  {\n    name: \"target_speech_tokens\"\n    data_type: TYPE_INT32\n    dims: [-1]\n  },\n  {\n    name: \"prompt_speech_tokens\"\n    data_type: TYPE_INT32\n    dims: [-1]\n    optional: true\n  },\n  {\n    name: \"prompt_speech_feat\"\n    data_type: TYPE_FP16\n    dims: [-1, 80]\n    optional: true\n  },\n  {\n    name: \"prompt_spk_embedding\"\n    data_type: TYPE_FP16\n    dims: [-1]\n    optional: true\n  },\n  {\n    name: \"token_offset\"\n    data_type: TYPE_INT32\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  },\n  {\n    name: \"finalize\"\n    data_type: TYPE_BOOL\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n    optional: true\n  }\n]\noutput [\n  {\n    name: \"mel\"\n    data_type: TYPE_FP32\n    dims: [ 80, -1 ]\n  }\n]\n\ninstance_group [\n  {\n    count: 1\n    kind: KIND_GPU\n    gpus: [ 0 ]\n  }\n]"
  },
  {
    "path": "runtime/triton_trtllm/model_repo_cosyvoice3/vocoder/1/model.py",
    "content": "import json\nimport os\nimport logging\n\nimport torch\nfrom torch.utils.dlpack import to_dlpack\nimport triton_python_backend_utils as pb_utils\nfrom hyperpyyaml import load_hyperpyyaml\n\nlogging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')\nlogger = logging.getLogger(__name__)\n\ntorch.set_num_threads(1)\n\n\nclass TritonPythonModel:\n    \"\"\"Triton Python model for CosyVoice3 vocoder (CausalHiFTGenerator).\n\n    Stateless: converts mel spectrogram to waveform.\n    CausalHiFTGenerator manages its own internal cache.\n    \"\"\"\n\n    def initialize(self, args):\n        parameters = json.loads(args['model_config'])['parameters']\n        model_params = {k: v[\"string_value\"] for k, v in parameters.items()}\n        model_dir = model_params[\"model_dir\"]\n\n        self.device = torch.device(\"cuda\")\n\n        # Load CausalHiFTGenerator from cosyvoice3.yaml\n        with open(os.path.join(model_dir, 'cosyvoice3.yaml'), 'r') as f:\n            configs = load_hyperpyyaml(f, overrides={\n                'qwen_pretrain_path': os.path.join(model_dir, 'CosyVoice-BlankEN')\n            })\n        self.hift = configs['hift']\n        hift_state_dict = {\n            k.replace('generator.', ''): v\n            for k, v in torch.load(\n                os.path.join(model_dir, 'hift.pt'),\n                map_location='cpu', weights_only=True\n            ).items()\n        }\n        self.hift.load_state_dict(hift_state_dict, strict=True)\n        self.hift.to(self.device).eval()\n        logger.info(\"CausalHiFTGenerator initialized successfully\")\n\n    def execute(self, requests):\n        responses = []\n        for req_idx, request in enumerate(requests):\n            mel = pb_utils.get_input_tensor_by_name(request, \"mel\")\n            mel = torch.utils.dlpack.from_dlpack(mel.to_dlpack()).to(self.device)\n            if mel.dim() == 2:\n                mel = mel.unsqueeze(0)  # [80, T] -> [1, 80, T]\n\n            finalize = pb_utils.get_input_tensor_by_name(request, \"finalize\").as_numpy().item()\n\n            with torch.no_grad():\n                speech, _ = self.hift.inference(speech_feat=mel, finalize=finalize)\n\n            # speech shape: [1, 1, S] or [1, S] depending on hift version\n            speech = speech.squeeze()  # flatten to [S]\n\n            speech_tensor = pb_utils.Tensor.from_dlpack(\n                \"tts_speech\", to_dlpack(speech.unsqueeze(0)))  # [1, S] for batch dim\n            inference_response = pb_utils.InferenceResponse(\n                output_tensors=[speech_tensor])\n            responses.append(inference_response)\n\n        return responses\n"
  },
  {
    "path": "runtime/triton_trtllm/model_repo_cosyvoice3/vocoder/config.pbtxt",
    "content": "name: \"vocoder\"\nbackend: \"python\"\nmax_batch_size: ${triton_max_batch_size}\ndynamic_batching {\n    max_queue_delay_microseconds: ${max_queue_delay_microseconds}\n}\nparameters [\n  {\n   key: \"model_dir\",\n   value: {string_value:\"${model_dir}\"}\n  }\n]\n\ninput [\n  {\n    name: \"mel\"\n    data_type: TYPE_FP32\n    dims: [80, -1]\n  },\n  {\n    name: \"finalize\"\n    data_type: TYPE_BOOL\n    dims: [ 1 ]\n    reshape: { shape: [ ] }\n  }\n]\noutput [\n  {\n    name: \"tts_speech\"\n    data_type: TYPE_FP32\n    dims: [ -1 ]\n  }\n]\n\ninstance_group [\n  {\n    count: 1\n    kind: KIND_CPU\n  }\n]"
  },
  {
    "path": "runtime/triton_trtllm/offline_inference.py",
    "content": "# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION.  All rights reserved.\n# SPDX-License-Identifier: Apache-2.0\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\"\"\" Example Usage\n    CUDA_VISIBLE_DEVICES=0 \\\n        python3 offline_inference.py \\\n            --output-dir $output_dir \\\n            --llm-model-name-or-path $huggingface_model_local_dir \\\n            --token2wav-path $model_scope_model_local_dir \\\n            --backend $backend \\\n            --batch-size $batch_size --token2wav-batch-size $token2wav_batch_size \\\n            --engine-dir $trt_engines_dir \\\n            --split-name ${dataset} || exit 1\n\"\"\"\n\nimport argparse\nimport json\nimport os\nimport sys\n\nimport torch\nimport torch.distributed as dist\nimport torch.nn.functional as F\nimport torchaudio\nfrom cosyvoice.utils.file_utils import load_wav\nfrom datasets import load_dataset\nfrom transformers import AutoTokenizer\nfrom torch.utils.data import DataLoader, Dataset\nfrom tqdm import tqdm\nimport soundfile as sf\nimport s3tokenizer\nfrom functools import partial\nimport time\nimport requests\nimport asyncio\nimport httpx\n\nsys.path.append(\"/workspace/CosyVoice/third_party/Matcha-TTS\")\ntry:\n    torch.multiprocessing.set_start_method(\"spawn\")\nexcept RuntimeError:\n    pass\n\n\nasync def send_request_async(client, url, payload):\n    response = await client.post(url, json=payload, timeout=None)\n    response.raise_for_status()\n    response_json = response.json()\n    return response_json['choices'][0]['message']['content']\n\n\nasync def send_batch_requests_async(api_base, model_name, chats, temperature, top_p, top_k):\n    async with httpx.AsyncClient() as client:\n        tasks = []\n        for chat in chats:\n            payload = {\n                \"model\": model_name,\n                \"messages\": chat,\n                \"max_tokens\": 2048,\n                \"temperature\": temperature,\n                \"top_p\": top_p,\n                \"top_k\": top_k,\n                \"repetition_penalty\": 1.1,\n                \"stop\": [\"<|eos1|>\", \"<|eos|>\"],\n                \"stream\": False,\n            }\n            tasks.append(send_request_async(client, api_base, payload))\n        return await asyncio.gather(*tasks)\n\n\ndef extract_speech_ids(speech_tokens_str):\n    \"\"\"Extract speech IDs from token strings like <|s_23456|>\"\"\"\n    speech_ids = []\n    for token_str in speech_tokens_str:\n        if token_str.startswith('<|s_') and token_str.endswith('|>'):\n            num_str = token_str[4:-2]\n            num = int(num_str)\n            speech_ids.append(num)\n        else:\n            print(f\"Unexpected token: {token_str}\")\n    return speech_ids\n\n\ndef convert_cosy2_tokens_to_speech_id_str(cosy2_tokens):\n    \"\"\"Convert CosyVoice2 tokens to speech IDs string like <|s_23456|>\"\"\"\n    speech_id_str = \"\"\n    for token in cosy2_tokens:\n        speech_id_str += f\"<|s_{token}|>\"\n    return speech_id_str\n\n\ndef get_args():\n    parser = argparse.ArgumentParser(description=\"Speech generation using LLM + CosyVoice2\")\n    parser.add_argument(\n        \"--split-name\",\n        type=str,\n        default=\"wenetspeech4tts\",\n        help=\"huggingface dataset split name, see yuekai/CV3-Eval, yuekai/seed_tts_cosy2\",\n    )\n    parser.add_argument(\n        \"--output-dir\", required=True, type=str, help=\"dir to save result\"\n    )\n    parser.add_argument(\n        \"--batch-size\",\n        default=1,\n        type=int,\n        help=\"batch size (per-device) for inference\",\n    )\n    parser.add_argument(\n        \"--token2wav-batch-size\",\n        default=1,\n        type=int,\n        help=\"batch size (per-device) for inference\",\n    )\n    parser.add_argument(\n        \"--num-workers\", type=int, default=0, help=\"workers for dataloader\"\n    )\n    parser.add_argument(\n        \"--prefetch\", type=int, default=None, help=\"prefetch for dataloader\"\n    )\n    parser.add_argument(\n        \"--llm-model-name-or-path\",\n        required=True,\n        type=str,\n        help=\"LLM model path (includes both model and tokenizer)\",\n    )\n    parser.add_argument(\n        \"--token2wav-path\",\n        required=True,\n        type=str,\n        help=\"CosyVoice2 token2wav model path\",\n    )\n    parser.add_argument(\n        \"--prompt-text\",\n        type=str,\n        default=None,\n        help=\"The prompt text for CosyVoice2\",\n    )\n    parser.add_argument(\n        \"--prompt-speech-path\",\n        type=str,\n        default=None,\n        help=\"The path to the prompt speech for CosyVoice2\",\n    )\n    parser.add_argument(\n        \"--top-p\",\n        type=float,\n        default=0.95,\n        help=\"top p for sampling\",\n    )\n    parser.add_argument(\n        \"--temperature\",\n        type=float,\n        default=0.8,\n        help=\"temperature for sampling\",\n    )\n    parser.add_argument(\n        \"--top-k\",\n        type=int,\n        default=50,\n        help=\"top k for sampling\",\n    )\n    parser.add_argument(\n        \"--backend\",\n        type=str,\n        default=\"hf\",\n        choices=[\"hf\", \"trtllm\", \"vllm\", \"trtllm-serve\"],\n        help=\"Backend to use for LLM inference: 'hf' for HuggingFace, 'trtllm' for TensorRT-LLM, 'vllm' for VLLM\",\n    )\n    parser.add_argument(\n        \"--engine-dir\",\n        type=str,\n        default=None,\n        help=\"TensorRT-LLM engine directory (required when backend is 'trtllm')\",\n    )\n    parser.add_argument(\n        \"--kv-cache-free-gpu-memory-fraction\",\n        type=float,\n        default=0.6,\n        help=\"Fraction of GPU memory to free for KV cache (TensorRT-LLM only)\",\n    )\n    parser.add_argument(\n        \"--openai-api-base\",\n        type=str,\n        default=\"http://localhost:8000/v1/chat/completions\",\n        help=\"OpenAI API base URL (for trtllm-serve backend)\",\n    )\n    parser.add_argument(\n        \"--openai-model-name\",\n        type=str,\n        default=\"trt_engines_bfloat16\",\n        help=\"Model name to use with OpenAI API (for trtllm-serve backend)\",\n    )\n    args = parser.parse_args()\n    return args\n\n\ndef data_collator(batch, tokenizer, s3_tokenizer):\n    \"\"\"Simplified data collator for batch_size=1 processing\"\"\"\n    collator_start_time = time.time()\n    total_audio_processing_time = 0\n    total_speech_tokenization_time = 0\n    total_text_tokenization_time = 0\n\n    target_sample_rate = 16000  # CosyVoice2 uses 16kHz for prompt audio\n    device = s3_tokenizer.device if s3_tokenizer is not None else torch.device(\"cpu\")\n    input_ids_list, prompt_audio_list, prompt_text_list = [], [], []\n    prompt_text_after_apply_template_list = []\n    mels, prompt_audio_cosy2tokens_list, full_text_list = [], [], []\n    chat_list = []\n    for _, item in enumerate(batch):\n        audio_processing_start_time = time.time()\n        prompt_text, target_text = (\n            item[\"prompt_text\"],\n            item[\"target_text\"],\n        )\n        prompt_text_list.append(prompt_text)\n        full_text = prompt_text + target_text\n        full_text_list.append(full_text)\n        # remove the unnecessary punctuation for cosyvoice3 zero_shot_zh dataset\n        puncts = ['\"', '(', ')', '“', '”', '‘', '（', '）', '\\'']\n        for p in puncts:\n            if p in full_text:\n                full_text = full_text.replace(p, '')\n                print(f\"removed {p} from {full_text}\")\n\n        # get prompt audio for CosyVoice2 (convert to 16kHz)\n        ref_audio_org, ref_sr = (\n            item[\"prompt_audio\"][\"array\"],\n            item[\"prompt_audio\"][\"sampling_rate\"],\n        )\n        ref_audio_org = torch.from_numpy(ref_audio_org).float().unsqueeze(0)\n        print(ref_audio_org.shape)\n\n        if ref_sr != target_sample_rate:\n            resampler = torchaudio.transforms.Resample(ref_sr, target_sample_rate)\n            ref_audio = resampler(ref_audio_org)\n        else:\n            ref_audio = ref_audio_org\n\n        prompt_audio_list.append(ref_audio)\n        audio_processing_end_time = time.time()\n        total_audio_processing_time += audio_processing_end_time - audio_processing_start_time\n\n        speech_tokenization_start_time = time.time()\n        if \"prompt_audio_cosy2_tokens\" in item:\n            prompt_audio_cosy2tokens = item[\"prompt_audio_cosy2_tokens\"]\n            prompt_audio_cosy2tokens_list.append(prompt_audio_cosy2tokens)\n        else:\n            mels.append(s3tokenizer.log_mel_spectrogram(ref_audio.squeeze(0)))\n\n    if len(mels) > 0:\n        mels, mels_lens = s3tokenizer.padding(mels)\n        codes, codes_lens = s3_tokenizer.quantize(mels.to(device), mels_lens.to(device))\n        for i in range(len(codes)):\n            prompt_audio_cosy2tokens_list.append(codes[i, :codes_lens[i].item()])\n    speech_tokenization_end_time = time.time()\n    total_speech_tokenization_time += speech_tokenization_end_time - speech_tokenization_start_time\n\n    for i, prompt_audio_cosy2tokens in enumerate(prompt_audio_cosy2tokens_list):\n        text_tokenization_start_time = time.time()\n        prompt_audio_cosy2_id_str = convert_cosy2_tokens_to_speech_id_str(prompt_audio_cosy2tokens)\n        # Create chat template for LLM generation\n        chat = [\n            {\"role\": \"user\", \"content\": full_text_list[i]},\n            {\"role\": \"assistant\", \"content\": prompt_audio_cosy2_id_str}\n        ]\n        chat_list.append(chat)\n\n        assert 'system' not in tokenizer.chat_template, \"system is not allowed in the chat template\"\n\n        input_ids = tokenizer.apply_chat_template(\n            chat,\n            tokenize=True,\n            return_tensors='pt',\n            continue_final_message=True\n        )\n        input_ids_list.append(input_ids.squeeze(0))\n\n        prompt_text_after_apply_template = f\"<|sos|>{full_text_list[i]}<|task_id|>{prompt_audio_cosy2_id_str}\"\n\n        prompt_text_after_apply_template_list.append(prompt_text_after_apply_template)\n        text_tokenization_end_time = time.time()\n        total_text_tokenization_time += text_tokenization_end_time - text_tokenization_start_time\n\n    ids = [item[\"id\"] for item in batch]\n\n    return {\n        \"input_ids\": input_ids_list,\n        \"ids\": ids,\n        \"prompt_text\": prompt_text_list,\n        \"prompt_audio_list\": prompt_audio_list,\n        \"prompt_text_after_apply_template\": prompt_text_after_apply_template_list,\n        \"audio_processing_time\": total_audio_processing_time,\n        \"speech_tokenization_time\": total_speech_tokenization_time,\n        \"text_tokenization_time\": total_text_tokenization_time,\n        \"chat_list\": chat_list\n    }\n\n\ndef init_distributed():\n    world_size = int(os.environ.get(\"WORLD_SIZE\", 1))\n    local_rank = int(os.environ.get(\"LOCAL_RANK\", 0))\n    rank = int(os.environ.get(\"RANK\", 0))\n    print(\n        \"Inference on multiple gpus, this gpu {}\".format(local_rank)\n        + \", rank {}, world_size {}\".format(rank, world_size)\n    )\n    torch.cuda.set_device(local_rank)\n    dist.init_process_group(\"nccl\")\n    return world_size, local_rank, rank\n\n\ndef main(args):\n    os.makedirs(args.output_dir, exist_ok=True)\n\n    assert torch.cuda.is_available()\n    local_rank, world_size, rank = 0, 1, 0\n    device = torch.device(f\"cuda:{local_rank}\")\n\n    tokenizer = AutoTokenizer.from_pretrained(args.llm_model_name_or_path)\n\n    if args.backend == \"hf\":\n        model = AutoModelForCausalLM.from_pretrained(args.llm_model_name_or_path)\n        model.eval()\n        model.to(device)\n        runner = None\n    elif args.backend == \"trtllm\":\n        if args.engine_dir is None:\n            raise ValueError(\"--engine-dir is required when backend is 'trtllm'\")\n\n        runtime_rank = tensorrt_llm.mpi_rank()\n        model = None\n\n        runner_kwargs = dict(\n            engine_dir=args.engine_dir,\n            rank=runtime_rank,\n            max_output_len=2048,\n            enable_context_fmha_fp32_acc=False,\n            max_batch_size=args.batch_size,\n            max_input_len=512,\n            kv_cache_free_gpu_memory_fraction=args.kv_cache_free_gpu_memory_fraction,\n            cuda_graph_mode=False,\n            gather_generation_logits=False,\n        )\n\n        runner = ModelRunnerCpp.from_dir(**runner_kwargs)\n    elif args.backend == \"vllm\":\n        model = LLM(model=args.llm_model_name_or_path, gpu_memory_utilization=0.4)\n        runner = None\n    elif args.backend == \"trtllm-serve\":\n        model = None\n        runner = None\n    else:\n        raise ValueError(f\"Unsupported backend: {args.backend}\")\n    if 'Step-Audio-2-mini' in args.token2wav_path:\n        from token2wav_dit import CosyVoice2_Token2Wav\n    else:\n        assert 'CosyVoice2-0.5B' in args.token2wav_path\n        from token2wav import CosyVoice2_Token2Wav\n    token2wav_model = CosyVoice2_Token2Wav(\n        model_dir=args.token2wav_path, enable_trt=True, device_id=local_rank\n    )\n    if args.prompt_speech_path:\n        prompt_speech_16k = load_wav(args.prompt_speech_path, 16000)\n    else:\n        prompt_speech_16k = None\n    s3_tokenizer = s3tokenizer.load_model(f\"{args.token2wav_path}/speech_tokenizer_v2.onnx\").to(device) if 'zero' in args.split_name else None\n    dataset_name = \"yuekai/CV3-Eval\" if 'zero' in args.split_name else \"yuekai/seed_tts_cosy2\"\n    dataset = load_dataset(\n        dataset_name,\n        split=args.split_name,\n        trust_remote_code=True,\n    )\n\n    sampler = None\n    dataloader = DataLoader(\n        dataset,\n        batch_size=args.batch_size,\n        sampler=sampler,\n        shuffle=False,\n        num_workers=args.num_workers,\n        prefetch_factor=args.prefetch,\n        collate_fn=partial(data_collator, tokenizer=tokenizer, s3_tokenizer=s3_tokenizer),\n    )\n    for _ in range(3):\n        print(f\"Running {_} times\")\n        total_llm_time = 0\n        total_token2wav_time = 0\n        total_data_load_time = 0\n        total_llm_post_processing_time = 0\n        total_audio_save_time = 0\n        total_audio_processing_time_in_collator = 0\n        total_speech_tokenization_time_in_collator = 0\n        total_text_tokenization_time_in_collator = 0\n        total_audio_samples = 0\n        start_time = time.time()\n        total_steps = len(dataset)\n\n        if rank == 0:\n            progress_bar = tqdm(total=total_steps, desc=\"Processing\", unit=\"wavs\")\n\n        last_batch_end_time = time.time()\n        for batch in dataloader:\n            data_loaded_time = time.time()\n            total_data_load_time += data_loaded_time - last_batch_end_time\n            total_audio_processing_time_in_collator += batch[\"audio_processing_time\"]\n            total_speech_tokenization_time_in_collator += batch[\"speech_tokenization_time\"]\n            total_text_tokenization_time_in_collator += batch[\"text_tokenization_time\"]\n            with torch.no_grad():\n                llm_start_time = time.time()\n                if args.backend == \"hf\":\n                    input_ids_list = batch[\"input_ids\"]\n                    if len(input_ids_list) == 1:\n                        input_ids = input_ids_list[0].unsqueeze(0)\n                        attention_mask = torch.ones_like(input_ids)\n                    else:\n                        max_len = max([len(input_ids) for input_ids in input_ids_list])\n                        input_ids_list_new = [\n                            torch.cat([input_ids, torch.full((max_len - len(input_ids),), tokenizer.pad_token_id)])\n                            for input_ids in input_ids_list\n                        ]\n                        input_ids = torch.stack(input_ids_list_new)\n                        attention_mask = torch.zeros_like(input_ids)\n                        for i in range(len(input_ids_list)):\n                            attention_mask[i, :len(input_ids_list[i])] = 1\n\n                    input_ids = input_ids.to(device)\n\n                    outputs = model.generate(\n                        input_ids=input_ids.to(device),\n                        attention_mask=attention_mask.to(device),\n                        max_new_tokens=2048,\n                        do_sample=True,\n                        top_p=args.top_p,\n                        temperature=args.temperature,\n                        repetition_penalty=1.1,\n                        top_k=args.top_k,\n                    )\n                    torch.cuda.synchronize()\n                elif args.backend == \"trtllm\":\n                    batch_input_ids = list(batch[\"input_ids\"])\n                    input_lengths = [x.size(0) for x in batch_input_ids]\n\n                    end_id = tokenizer.convert_tokens_to_ids(\"<|eos1|>\") if \"<|eos1|>\" in tokenizer.get_vocab() else tokenizer.eos_token_id\n                    print(f\"end_id: {end_id}, tokenizer.eos_token_id: {tokenizer.eos_token_id} ========================\")\n                    outputs = runner.generate(\n                        batch_input_ids=batch_input_ids,\n                        max_new_tokens=2048,\n                        end_id=end_id,\n                        pad_id=end_id,\n                        temperature=args.temperature,\n                        top_k=args.top_k,\n                        top_p=args.top_p,\n                        repetition_penalty=1.1,\n                        num_return_sequences=1,\n                        streaming=False,\n                        output_sequence_lengths=True,\n                        output_generation_logits=False,\n                        return_dict=True,\n                        return_all_generated_tokens=False\n                    )\n                    torch.cuda.synchronize()\n                    output_ids, sequence_lengths = outputs[\"output_ids\"], outputs[\"sequence_lengths\"]\n                    num_output_sents, num_beams, _ = output_ids.size()\n                    assert num_beams == 1\n                    beam = 0\n                    batch_size = len(batch[\"input_ids\"])\n                    num_return_sequences = num_output_sents // batch_size\n                    assert num_return_sequences == 1\n                    outputs = []\n                    for i in range(batch_size * num_return_sequences):\n                        batch_idx = i // num_return_sequences\n                        seq_idx = i % num_return_sequences\n                        output_begin = input_lengths[batch_idx]\n                        output_end = sequence_lengths[i][beam]\n                        outputs_i = output_ids[i][beam][:output_end].tolist()\n                        outputs.append(outputs_i)\n                elif args.backend == \"vllm\":\n                    input_ids_list = [ids.tolist() for ids in batch[\"input_ids\"]]\n                    sampling_params = SamplingParams(\n                        temperature=args.temperature,\n                        top_p=args.top_p,\n                        top_k=args.top_k,\n                        repetition_penalty=1.1,\n                        max_tokens=2048,\n                    )\n                    outputs = model.generate(prompt_token_ids=input_ids_list, sampling_params=sampling_params)\n                    print(outputs)\n                    for j, output in enumerate(outputs):\n                        outputs[j] = input_ids_list[j] + output.outputs[0].token_ids\n                elif args.backend == \"trtllm-serve\":\n                    if args.batch_size > 1:\n                        outputs = asyncio.run(send_batch_requests_async(\n                            args.openai_api_base,\n                            args.openai_model_name,\n                            batch[\"chat_list\"],\n                            args.temperature,\n                            args.top_p,\n                            args.top_k,\n                        ))\n                    else:\n                        outputs = []\n                        for chat in batch[\"chat_list\"]:\n                            payload = {\n                                \"model\": args.openai_model_name,\n                                \"messages\": chat,\n                                \"max_tokens\": 2048,\n                                \"temperature\": args.temperature,\n                                \"top_p\": args.top_p,\n                                \"top_k\": args.top_k,\n                                \"repetition_penalty\": 1.1,\n                                \"stop\": [\"<|eos1|>\", \"<|eos|>\"],\n                                \"stream\": False,\n                            }\n                            response = requests.post(args.openai_api_base, json=payload)\n                            response.raise_for_status()\n                            response_json = response.json()\n                            generated_content = response_json['choices'][0]['message']['content']\n                            outputs.append(generated_content)\n\n                llm_end_time = time.time()\n                total_llm_time += (llm_end_time - llm_start_time)\n\n                items_for_token_2wav = []\n                for i in range(len(batch[\"ids\"])):\n                    llm_post_processing_start_time = time.time()\n                    if args.backend == \"trtllm-serve\":\n                        speech_tokens_str = outputs[i].strip().split('><')\n                        if len(speech_tokens_str) > 1:\n                            speech_tokens_str = [\n                                t if t.startswith('<') else '<' + t for t in speech_tokens_str\n                            ]\n                            speech_tokens_str = [\n                                t if t.endswith('>') else t + '>' for t in speech_tokens_str\n                            ]\n                        speech_ids = extract_speech_ids(speech_tokens_str)\n                    else:\n                        input_length = len(batch[\"input_ids\"][i])\n                        generated_ids = outputs[i][input_length:]\n                        speech_tokens_str = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)\n                        speech_ids = extract_speech_ids(speech_tokens_str)\n                    print(i, speech_ids)\n                    if len(speech_ids) == 0:\n                        print(f\"Warning: No speech tokens generated for sample {batch['ids'][i]}, skipping\")\n                        continue\n\n                    if args.prompt_text is not None:\n                        current_prompt_text = args.prompt_text\n                        current_prompt_audio = prompt_speech_16k\n                    else:\n                        current_prompt_text = batch[\"prompt_text\"][i]\n                        current_prompt_audio = batch[\"prompt_audio_list\"][i]\n\n                    llm_post_processing_end_time = time.time()\n                    total_llm_post_processing_time += llm_post_processing_end_time - llm_post_processing_start_time\n                    if current_prompt_audio is not None:\n                        items_for_token_2wav.append({\n                            \"speech_ids\": speech_ids,\n                            \"prompt_audio\": current_prompt_audio.squeeze(0),\n                            \"id\": batch[\"ids\"][i]\n                        })\n                    else:\n                        print(f\"Warning: No prompt audio available for sample {batch['ids'][i]}, skipping\")\n\n                for i in range(0, len(items_for_token_2wav), args.token2wav_batch_size):\n                    t2w_batch = items_for_token_2wav[i:i + args.token2wav_batch_size]\n                    if not t2w_batch:\n                        continue\n\n                    t2w_generated_speech_tokens_list = [item[\"speech_ids\"] for item in t2w_batch]\n                    t2w_prompt_audios_list = [item[\"prompt_audio\"] for item in t2w_batch]\n                    t2w_prompt_audios_sample_rate = [16000] * len(t2w_batch)\n                    t2w_ids = [item[\"id\"] for item in t2w_batch]\n\n                    token2wav_start_time = time.time()\n                    generated_wavs = token2wav_model(\n                        t2w_generated_speech_tokens_list,\n                        t2w_prompt_audios_list,\n                        t2w_prompt_audios_sample_rate,\n                    )\n                    token2wav_end_time = time.time()\n                    total_token2wav_time += (token2wav_end_time - token2wav_start_time)\n\n                    audio_save_start_time = time.time()\n                    for j, audio_hat in enumerate(generated_wavs):\n                        generated_wave = audio_hat.squeeze().cpu().numpy()\n                        total_audio_samples += len(generated_wave)\n                        target_sample_rate = 24000\n\n                        utt = t2w_ids[j]\n                        sf.write(f\"{args.output_dir}/{utt}.wav\", generated_wave, target_sample_rate)\n                        print(f\"Generated audio for sample {utt} with {len(t2w_generated_speech_tokens_list[j])} tokens\")\n                    audio_save_end_time = time.time()\n                    total_audio_save_time += audio_save_end_time - audio_save_start_time\n\n            if rank == 0:\n                progress_bar.update(world_size * len(batch[\"ids\"]))\n\n            last_batch_end_time = time.time()\n        if rank == 0:\n            progress_bar.close()\n            end_time = time.time()\n            target_sample_rate = 24000\n            total_audio_duration_seconds = total_audio_samples / target_sample_rate\n\n            log_file_path = os.path.join(args.output_dir, \"log.txt\")\n            with open(log_file_path, 'w') as f:\n                args_dict = vars(args)\n                log_data = {\n                    \"args\": args_dict,\n                    \"data_load_time_seconds\": total_data_load_time,\n                    \"audio_processing_time_in_collator_seconds\": total_audio_processing_time_in_collator,\n                    \"speech_tokenization_time_in_collator_seconds\": total_speech_tokenization_time_in_collator,\n                    \"text_tokenization_time_in_collator_seconds\": total_text_tokenization_time_in_collator,\n                    \"llm_time_seconds\": total_llm_time,\n                    \"llm_post_processing_time_seconds\": total_llm_post_processing_time,\n                    \"token2wav_time_seconds\": total_token2wav_time,\n                    \"audio_save_time_seconds\": total_audio_save_time,\n                    \"total_audio_duration_seconds\": total_audio_duration_seconds,\n                    \"pipeline_time_seconds\": end_time - start_time,\n                }\n                print(log_data)\n                f.write(json.dumps(log_data, indent=4))\n            print(f\"Metrics logged to {log_file_path}\")\n\n\nif __name__ == \"__main__\":\n    args = get_args()\n    if args.backend == \"vllm\":\n        from vllm import LLM, SamplingParams\n    elif args.backend == \"trtllm\":\n        import tensorrt_llm\n        from tensorrt_llm.runtime import ModelRunnerCpp\n    elif args.backend == \"hf\":\n        from transformers import AutoModelForCausalLM\n    elif args.backend == \"trtllm-serve\":\n        pass\n    else:\n        raise ValueError(f\"Unsupported backend: {args.backend}\")\n    main(args)\n"
  },
  {
    "path": "runtime/triton_trtllm/requirements.txt",
    "content": "hyperpyyaml\ns3tokenizer\nonnxruntime-gpu\nomegaconf\nconformer\nhydra-core\nlightning\ngdown\nwget\nlibrosa\npyworld\nopenai-whisper\ntritonclient\nmodelscope\nx_transformers"
  },
  {
    "path": "runtime/triton_trtllm/run.sh",
    "content": "#!/bin/bash\n# Copyright (c) 2025 NVIDIA (authors: Yuekai Zhang)\nexport CUDA_VISIBLE_DEVICES=0\ncosyvoice_path=/workspace/CosyVoice\nexport PYTHONPATH=${cosyvoice_path}:$PYTHONPATH\nexport PYTHONPATH=${cosyvoice_path}/third_party/Matcha-TTS:$PYTHONPATH\nstage=$1\nstop_stage=$2\n\nhuggingface_model_local_dir=./cosyvoice2_llm\nmodel_scope_model_local_dir=./CosyVoice2-0.5B\ntrt_dtype=bfloat16\ntrt_weights_dir=./trt_weights_${trt_dtype}\ntrt_engines_dir=./trt_engines_${trt_dtype}\n\nmodel_repo=./model_repo_cosyvoice2\n\nuse_spk2info_cache=False\n\nif [ $stage -le -1 ] && [ $stop_stage -ge -1 ]; then\n    echo \"Cloning CosyVoice\"\n    git clone --recursive https://github.com/FunAudioLLM/CosyVoice.git $cosyvoice_path\n    cd $cosyvoice_path\n    git submodule update --init --recursive\n    cd runtime/triton_trtllm\nfi\n\nif [ $stage -le 0 ] && [ $stop_stage -ge 0 ]; then\n    echo \"Downloading CosyVoice2-0.5B\"\n    # see https://github.com/nvidia-china-sae/mair-hub/blob/main/rl-tutorial/cosyvoice_llm/pretrained_to_huggingface.py\n    huggingface-cli download --local-dir $huggingface_model_local_dir yuekai/cosyvoice2_llm\n    modelscope download --model iic/CosyVoice2-0.5B --local_dir $model_scope_model_local_dir\n    # download spk2info.pt to directly use cached speech tokens, speech feats, and embeddings\n    wget https://raw.githubusercontent.com/qi-hua/async_cosyvoice/main/CosyVoice2-0.5B/spk2info.pt -O $model_scope_model_local_dir/spk2info.pt\nfi\n\n\nif [ $stage -le 1 ] && [ $stop_stage -ge 1 ]; then\n    echo \"Converting checkpoint to TensorRT weights\"\n    python3 scripts/convert_checkpoint.py --model_dir $huggingface_model_local_dir \\\n                                --output_dir $trt_weights_dir \\\n                                --dtype $trt_dtype || exit 1\n\n    echo \"Building TensorRT engines\"\n    trtllm-build --checkpoint_dir $trt_weights_dir \\\n                --output_dir $trt_engines_dir \\\n                --max_batch_size 16 \\\n                --max_num_tokens 32768 \\\n                --gemm_plugin $trt_dtype || exit 1\n\n    echo \"Testing TensorRT engines\"\n    python3 ./scripts/test_llm.py --input_text \"你好，请问你叫什么？\" \\\n                    --tokenizer_dir $huggingface_model_local_dir \\\n                    --top_k 50 --top_p 0.95 --temperature 0.8 \\\n                    --engine_dir=$trt_engines_dir  || exit 1\nfi\n\nif [ $stage -le 2 ] && [ $stop_stage -ge 2 ]; then\n    echo \"Creating model repository\"\n    rm -rf $model_repo\n    mkdir -p $model_repo\n    cosyvoice2_dir=\"cosyvoice2\"\n\n    cp -r ./model_repo/${cosyvoice2_dir} $model_repo\n    cp -r ./model_repo/tensorrt_llm $model_repo\n    cp -r ./model_repo/token2wav $model_repo\n    if [ $use_spk2info_cache == \"False\" ]; then\n        cp -r ./model_repo/audio_tokenizer $model_repo\n        cp -r ./model_repo/speaker_embedding $model_repo\n    fi\n\n    ENGINE_PATH=$trt_engines_dir\n    MAX_QUEUE_DELAY_MICROSECONDS=0\n    MODEL_DIR=$model_scope_model_local_dir\n    LLM_TOKENIZER_DIR=$huggingface_model_local_dir\n    BLS_INSTANCE_NUM=4\n    TRITON_MAX_BATCH_SIZE=16\n    DECOUPLED_MODE=True # True for streaming, False for offline\n\n    python3 scripts/fill_template.py -i ${model_repo}/token2wav/config.pbtxt model_dir:${MODEL_DIR},triton_max_batch_size:${TRITON_MAX_BATCH_SIZE},max_queue_delay_microseconds:${MAX_QUEUE_DELAY_MICROSECONDS}\n    python3 scripts/fill_template.py -i ${model_repo}/${cosyvoice2_dir}/config.pbtxt model_dir:${MODEL_DIR},bls_instance_num:${BLS_INSTANCE_NUM},llm_tokenizer_dir:${LLM_TOKENIZER_DIR},triton_max_batch_size:${TRITON_MAX_BATCH_SIZE},decoupled_mode:${DECOUPLED_MODE},max_queue_delay_microseconds:${MAX_QUEUE_DELAY_MICROSECONDS}\n    python3 scripts/fill_template.py -i ${model_repo}/tensorrt_llm/config.pbtxt triton_backend:tensorrtllm,triton_max_batch_size:${TRITON_MAX_BATCH_SIZE},decoupled_mode:${DECOUPLED_MODE},max_beam_width:1,engine_dir:${ENGINE_PATH},max_tokens_in_paged_kv_cache:2560,max_attention_window_size:2560,kv_cache_free_gpu_mem_fraction:0.5,exclude_input_in_output:True,enable_kv_cache_reuse:False,batching_strategy:inflight_fused_batching,max_queue_delay_microseconds:${MAX_QUEUE_DELAY_MICROSECONDS},encoder_input_features_data_type:TYPE_FP16,logits_datatype:TYPE_FP32\n    if [ $use_spk2info_cache == \"False\" ]; then\n        python3 scripts/fill_template.py -i ${model_repo}/audio_tokenizer/config.pbtxt model_dir:${MODEL_DIR},triton_max_batch_size:${TRITON_MAX_BATCH_SIZE},max_queue_delay_microseconds:${MAX_QUEUE_DELAY_MICROSECONDS}\n        python3 scripts/fill_template.py -i ${model_repo}/speaker_embedding/config.pbtxt model_dir:${MODEL_DIR},triton_max_batch_size:${TRITON_MAX_BATCH_SIZE},max_queue_delay_microseconds:${MAX_QUEUE_DELAY_MICROSECONDS}\n    fi\nfi\n\nif [ $stage -le 3 ] && [ $stop_stage -ge 3 ]; then\n   echo \"Starting Triton server\"\n   tritonserver --model-repository $model_repo\nfi\n\nif [ $stage -le 4 ] && [ $stop_stage -ge 4 ]; then\n    echo \"Single request test http, only work for offline TTS mode\"\n    python3 client_http.py \\\n        --reference-audio ./assets/prompt_audio.wav \\\n        --reference-text \"吃燕窝就选燕之屋，本节目由26年专注高品质燕窝的燕之屋冠名播出。豆奶牛奶换着喝，营养更均衡，本节目由豆本豆豆奶特约播出。\" \\\n        --target-text \"身临其境，换新体验。塑造开源语音合成新范式，让智能语音更自然。\" \\\n        --model-name cosyvoice2\nfi\n\nif [ $stage -le 5 ] && [ $stop_stage -ge 5 ]; then\n    echo \"Running benchmark client grpc\"\n    num_task=4\n\n    mode=streaming\n    BLS_INSTANCE_NUM=4\n\n    python3 client_grpc.py \\\n        --server-addr localhost \\\n        --model-name cosyvoice2 \\\n        --num-tasks $num_task \\\n        --mode $mode \\\n        --use-spk2info-cache $use_spk2info_cache \\\n        --huggingface-dataset yuekai/seed_tts_cosy2 \\\n        --log-dir ./log_concurrent_tasks_${num_task}_${mode}_bls_${BLS_INSTANCE_NUM}_spk_cache_${use_spk2info_cache}\nfi\n\nif [ $stage -le 6 ] && [ $stop_stage -ge 6 ]; then\n  echo \"stage 6: Offline inference benchmark\"\n  n_gpus=1\n  datasets=(wenetspeech4tts) # wenetspeech4tts, test_zh, zero_shot_zh\n  backend=trtllm # hf, trtllm, vllm\n\n  batch_sizes=(16 8 4 2 1)\n  token2wav_batch_size=1\n  for batch_size in ${batch_sizes[@]}; do\n    for dataset in ${datasets[@]}; do\n    output_dir=./${dataset}_${backend}_llm_batch_size_${batch_size}_token2wav_batch_size_${token2wav_batch_size}\n    CUDA_VISIBLE_DEVICES=0 \\\n        python3 offline_inference.py \\\n            --output-dir $output_dir \\\n            --llm-model-name-or-path $huggingface_model_local_dir \\\n            --token2wav-path $model_scope_model_local_dir \\\n            --backend $backend \\\n            --batch-size $batch_size --token2wav-batch-size $token2wav_batch_size \\\n            --engine-dir $trt_engines_dir \\\n            --split-name ${dataset} || exit 1\n    done\n  done\nfi\n"
  },
  {
    "path": "runtime/triton_trtllm/run_cosyvoice3.sh",
    "content": "#!/bin/bash\n# Copyright (c) 2026 NVIDIA (authors: Yuekai Zhang)\nexport CUDA_VISIBLE_DEVICES=0\ncosyvoice_path=/workspace/CosyVoice\n\nexport PYTHONPATH=${cosyvoice_path}:$PYTHONPATH\nexport PYTHONPATH=${cosyvoice_path}/third_party/Matcha-TTS:$PYTHONPATH\n\nstage=$1\nstop_stage=$2\n\nhuggingface_llm_local_dir=$cosyvoice_path/runtime/triton_trtllm/hf_cosyvoice3_llm\ncosyvoice3_official_model_dir=$cosyvoice_path/runtime/triton_trtllm/Fun-CosyVoice3-0.5B-2512\n\ntrt_dtype=bfloat16\ntrt_weights_dir=$cosyvoice_path/runtime/triton_trtllm/trt_weights_${trt_dtype}\ntrt_engines_dir=$cosyvoice_path/runtime/triton_trtllm/trt_engines_${trt_dtype}\n\nmodel_repo_src=$cosyvoice_path/runtime/triton_trtllm/model_repo_cosyvoice3\nmodel_repo=$cosyvoice_path/runtime/triton_trtllm/model_repo_cosyvoice3_copy\nbls_instance_num=10\n\nif [ $stage -le -1 ] && [ $stop_stage -ge -1 ]; then\n\n    echo \"Cloning CosyVoice\"\n    git clone --recursive https://github.com/FunAudioLLM/CosyVoice.git $cosyvoice_path\n    cd $cosyvoice_path\n    git submodule update --init --recursive\n    cd runtime/triton_trtllm\nfi\n\nif [ $stage -le 0 ] && [ $stop_stage -ge 0 ]; then\n    echo \"Downloading CosyVoice3 Checkpoints\"\n    # if s3 tokenizer version is not 0.3.0\n    if [ $(pip3 show s3tokenizer | grep -o \"0\\.2\\.[0-9]\") != \"0.3.0\" ]; then\n        pip3 install --upgrade x_transformers s3tokenizer\n    fi\n    huggingface-cli download --local-dir $huggingface_llm_local_dir yuekai/Fun-CosyVoice3-0.5B-2512-LLM-HF\n    huggingface-cli download --local-dir $cosyvoice3_official_model_dir yuekai/Fun-CosyVoice3-0.5B-2512-FP16-ONNX\n    huggingface-cli download --local-dir $cosyvoice3_official_model_dir FunAudioLLM/Fun-CosyVoice3-0.5B-2512\nfi\n\n\nif [ $stage -le 1 ] && [ $stop_stage -ge 1 ]; then\n    echo \"Converting checkpoint to TensorRT weights\"\n    python3 scripts/convert_checkpoint.py --model_dir $huggingface_llm_local_dir \\\n                                --output_dir $trt_weights_dir \\\n                                --dtype $trt_dtype || exit 1\n\n    echo \"Building TensorRT engines\"\n    trtllm-build --checkpoint_dir $trt_weights_dir \\\n                --output_dir $trt_engines_dir \\\n                --max_batch_size 64 \\\n                --max_num_tokens 32768 \\\n                --gemm_plugin $trt_dtype || exit 1\n\n    echo \"Testing TensorRT engines\"\n    python3 ./scripts/test_llm.py --input_text \"你好，请问你叫什么？\" \\\n                    --tokenizer_dir $huggingface_llm_local_dir \\\n                    --top_k 50 --top_p 0.95 --temperature 0.8 \\\n                    --engine_dir=$trt_engines_dir  || exit 1\nfi\n\nif [ $stage -le 2 ] && [ $stop_stage -ge 2 ]; then\n    echo \"Creating CosyVoice3 model repository\"\n    rm -rf $model_repo\n    mkdir -p $model_repo\n\n    # Copy all modules from template source\n    cp -r ${model_repo_src}/cosyvoice3 $model_repo/\n    cp -r ${model_repo_src}/token2wav $model_repo/\n    cp -r ${model_repo_src}/vocoder $model_repo/\n    cp -r ${model_repo_src}/audio_tokenizer $model_repo/\n    cp -r ${model_repo_src}/speaker_embedding $model_repo/\n\n    MAX_QUEUE_DELAY_MICROSECONDS=0\n    MODEL_DIR=$cosyvoice3_official_model_dir\n    LLM_TOKENIZER_DIR=$huggingface_llm_local_dir\n    BLS_INSTANCE_NUM=$bls_instance_num\n    TRITON_MAX_BATCH_SIZE=1\n    DECOUPLED_MODE=True # False for offline TTS\n\n    python3 scripts/fill_template.py -i ${model_repo}/cosyvoice3/config.pbtxt model_dir:${MODEL_DIR},bls_instance_num:${BLS_INSTANCE_NUM},llm_tokenizer_dir:${LLM_TOKENIZER_DIR},triton_max_batch_size:${TRITON_MAX_BATCH_SIZE},decoupled_mode:${DECOUPLED_MODE},max_queue_delay_microseconds:${MAX_QUEUE_DELAY_MICROSECONDS}\n    python3 scripts/fill_template.py -i ${model_repo}/token2wav/config.pbtxt model_dir:${MODEL_DIR},triton_max_batch_size:${TRITON_MAX_BATCH_SIZE},max_queue_delay_microseconds:${MAX_QUEUE_DELAY_MICROSECONDS}\n    python3 scripts/fill_template.py -i ${model_repo}/vocoder/config.pbtxt model_dir:${MODEL_DIR},triton_max_batch_size:${TRITON_MAX_BATCH_SIZE},max_queue_delay_microseconds:${MAX_QUEUE_DELAY_MICROSECONDS}\n    python3 scripts/fill_template.py -i ${model_repo}/audio_tokenizer/config.pbtxt model_dir:${MODEL_DIR},triton_max_batch_size:${TRITON_MAX_BATCH_SIZE},max_queue_delay_microseconds:${MAX_QUEUE_DELAY_MICROSECONDS}\n    python3 scripts/fill_template.py -i ${model_repo}/speaker_embedding/config.pbtxt model_dir:${MODEL_DIR},triton_max_batch_size:${TRITON_MAX_BATCH_SIZE},max_queue_delay_microseconds:${MAX_QUEUE_DELAY_MICROSECONDS}\n\nfi\n\nif [ $stage -le 3 ] && [ $stop_stage -ge 3 ]; then\n   echo \"Starting CosyVoice3 Triton server and LLM using trtllm-serve\"\n   CUDA_VISIBLE_DEVICES=0 mpirun -np 1 --allow-run-as-root --oversubscribe trtllm-serve serve --tokenizer $huggingface_llm_local_dir $trt_engines_dir --max_batch_size 64  --kv_cache_free_gpu_memory_fraction 0.4 &\n   CUDA_VISIBLE_DEVICES=0 tritonserver --model-repository $model_repo --http-port 18000 --grpc-port 18001 --metrics-port 18002 &\n   wait\nfi\n\nif [ $stage -le 4 ] && [ $stop_stage -ge 4 ]; then\n    echo \"Running benchmark client for CosyVoice3\"\n    num_task=4\n    mode=streaming\n    BLS_INSTANCE_NUM=$bls_instance_num\n\n    python3 client_grpc.py \\\n        --server-addr localhost \\\n        --server-port 18001 \\\n        --model-name cosyvoice3 \\\n        --num-tasks $num_task \\\n        --mode $mode \\\n        --huggingface-dataset yuekai/seed_tts_cosy2 \\\n        --log-dir ./log_cosyvoice3_concurrent_tasks_${num_task}_${mode}_bls_${BLS_INSTANCE_NUM}\n\nfi\n\nif [ $stage -le 5 ] && [ $stop_stage -ge 5 ]; then\n    echo \"stage 5: Python script CosyVoice3 TTS (LLM + CosyVoice3 Token2Wav) inference\"\n\n    datasets=(wenetspeech4tts) # wenetspeech4tts\n    backend=trtllm  # hf, trtllm, vllm, trtllm-serve\n\n    batch_sizes=(16 8 4 2 1)\n    token2wav_batch_size=1 # Only support 1 for now\n\n    for batch_size in ${batch_sizes[@]}; do\n      for dataset in ${datasets[@]}; do\n        output_dir=./cosyvoice3_${dataset}_${backend}_llm_batch_size_${batch_size}_token2wav_batch_size_${token2wav_batch_size}_offline_tts_trt\n        CUDA_VISIBLE_DEVICES=0 \\\n            python3 infer_cosyvoice3.py \\\n                --output-dir $output_dir \\\n                --llm-model-name-or-path $huggingface_llm_local_dir \\\n                --token2wav-path $cosyvoice3_official_model_dir \\\n                --backend $backend \\\n                --batch-size $batch_size --token2wav-batch-size $token2wav_batch_size \\\n                --engine-dir $trt_engines_dir \\\n                --enable-trt \\\n                --epoch 3 \\\n                --split-name ${dataset} || exit 1\n      done\n    done\nfi"
  },
  {
    "path": "runtime/triton_trtllm/run_stepaudio2_dit_token2wav.sh",
    "content": "#!/bin/bash\n# Copyright (c) 2025 NVIDIA (authors: Yuekai Zhang)\nexport CUDA_VISIBLE_DEVICES=0\ncosyvoice_path=/workspace/CosyVoice\nstepaudio2_path=/workspace/Step-Audio2\n\nexport PYTHONPATH=${stepaudio2_path}:$PYTHONPATH\nexport PYTHONPATH=${cosyvoice_path}:$PYTHONPATH\nexport PYTHONPATH=${cosyvoice_path}/third_party/Matcha-TTS:$PYTHONPATH\n\nstage=$1\nstop_stage=$2\n\nhuggingface_model_local_dir=./cosyvoice2_llm\nmodel_scope_model_local_dir=./CosyVoice2-0.5B\nstep_audio_model_dir=./Step-Audio-2-mini\n\ntrt_dtype=bfloat16\ntrt_weights_dir=./trt_weights_${trt_dtype}\ntrt_engines_dir=./trt_engines_${trt_dtype}\n\nmodel_repo=./model_repo_cosyvoice2_dit\nbls_instance_num=10\n\nif [ $stage -le -1 ] && [ $stop_stage -ge -1 ]; then\n\n    echo \"Cloning Step-Audio2-mini\"\n    git clone https://github.com/yuekaizhang/Step-Audio2.git -b trt $stepaudio2_path\n\n    echo \"Cloning CosyVoice\"\n    git clone --recursive https://github.com/FunAudioLLM/CosyVoice.git $cosyvoice_path\n    cd $cosyvoice_path\n    git submodule update --init --recursive\n    cd runtime/triton_trtllm\nfi\n\nif [ $stage -le 0 ] && [ $stop_stage -ge 0 ]; then\n    echo \"Downloading CosyVoice2-0.5B\"\n    # see https://github.com/nvidia-china-sae/mair-hub/blob/main/rl-tutorial/cosyvoice_llm/pretrained_to_huggingface.py\n    huggingface-cli download --local-dir $huggingface_model_local_dir yuekai/cosyvoice2_llm\n    modelscope download --model iic/CosyVoice2-0.5B --local_dir $model_scope_model_local_dir\n\n    echo \"Step-Audio2-mini\"\n    huggingface-cli download --local-dir $step_audio_model_dir stepfun-ai/Step-Audio-2-mini\n    cd $step_audio_model_dir/token2wav\n    wget https://huggingface.co/yuekai/cosyvoice2_dit_flow_matching_onnx/resolve/main/flow.decoder.estimator.fp32.dynamic_batch.onnx -O flow.decoder.estimator.fp32.dynamic_batch.onnx\n    wget https://huggingface.co/yuekai/cosyvoice2_dit_flow_matching_onnx/resolve/main/flow.decoder.estimator.chunk.fp32.dynamic_batch.simplify.onnx -O flow.decoder.estimator.chunk.fp32.dynamic_batch.simplify.onnx\n    cd -\nfi\n\n\nif [ $stage -le 1 ] && [ $stop_stage -ge 1 ]; then\n    echo \"Converting checkpoint to TensorRT weights\"\n    python3 scripts/convert_checkpoint.py --model_dir $huggingface_model_local_dir \\\n                                --output_dir $trt_weights_dir \\\n                                --dtype $trt_dtype || exit 1\n\n    echo \"Building TensorRT engines\"\n    trtllm-build --checkpoint_dir $trt_weights_dir \\\n                --output_dir $trt_engines_dir \\\n                --max_batch_size 64 \\\n                --max_num_tokens 32768 \\\n                --gemm_plugin $trt_dtype || exit 1\n\n    echo \"Testing TensorRT engines\"\n    python3 ./scripts/test_llm.py --input_text \"你好，请问你叫什么？\" \\\n                    --tokenizer_dir $huggingface_model_local_dir \\\n                    --top_k 50 --top_p 0.95 --temperature 0.8 \\\n                    --engine_dir=$trt_engines_dir  || exit 1\nfi\n\nif [ $stage -le 2 ] && [ $stop_stage -ge 2 ]; then\n    echo \"Creating model repository async mode\"\n    rm -rf $model_repo\n    mkdir -p $model_repo\n    cosyvoice2_dir=\"cosyvoice2_dit\"\n    token2wav_dir=\"token2wav_dit\"\n\n    cp -r ./model_repo/${cosyvoice2_dir} $model_repo\n    cp -r ./model_repo/${token2wav_dir} $model_repo\n    cp -r ./model_repo/audio_tokenizer $model_repo\n    cp -r ./model_repo/speaker_embedding $model_repo\n\n\n    ENGINE_PATH=$trt_engines_dir\n    MAX_QUEUE_DELAY_MICROSECONDS=0\n    MODEL_DIR=$model_scope_model_local_dir\n    LLM_TOKENIZER_DIR=$huggingface_model_local_dir\n    BLS_INSTANCE_NUM=$bls_instance_num\n    TRITON_MAX_BATCH_SIZE=1\n    DECOUPLED_MODE=True # Only streaming TTS mode is supported using Nvidia Triton for now\n    STEP_AUDIO_MODEL_DIR=$step_audio_model_dir/token2wav\n\n    python3 scripts/fill_template.py -i ${model_repo}/${token2wav_dir}/config.pbtxt model_dir:${STEP_AUDIO_MODEL_DIR},triton_max_batch_size:${TRITON_MAX_BATCH_SIZE},max_queue_delay_microseconds:${MAX_QUEUE_DELAY_MICROSECONDS}\n    python3 scripts/fill_template.py -i ${model_repo}/${cosyvoice2_dir}/config.pbtxt model_dir:${MODEL_DIR},bls_instance_num:${BLS_INSTANCE_NUM},llm_tokenizer_dir:${LLM_TOKENIZER_DIR},triton_max_batch_size:${TRITON_MAX_BATCH_SIZE},decoupled_mode:${DECOUPLED_MODE},max_queue_delay_microseconds:${MAX_QUEUE_DELAY_MICROSECONDS}\n    python3 scripts/fill_template.py -i ${model_repo}/audio_tokenizer/config.pbtxt model_dir:${MODEL_DIR},triton_max_batch_size:${TRITON_MAX_BATCH_SIZE},max_queue_delay_microseconds:${MAX_QUEUE_DELAY_MICROSECONDS}\n    python3 scripts/fill_template.py -i ${model_repo}/speaker_embedding/config.pbtxt model_dir:${MODEL_DIR},triton_max_batch_size:${TRITON_MAX_BATCH_SIZE},max_queue_delay_microseconds:${MAX_QUEUE_DELAY_MICROSECONDS}\n\nfi\n\nif [ $stage -le 3 ] && [ $stop_stage -ge 3 ]; then\n   echo \"Starting Token2wav Triton server and Cosyvoice2 llm using trtllm-serve\"\n   mpirun -np 1 --allow-run-as-root --oversubscribe trtllm-serve serve --tokenizer $huggingface_model_local_dir $trt_engines_dir --max_batch_size 64  --kv_cache_free_gpu_memory_fraction 0.4 &\n   tritonserver --model-repository $model_repo --http-port 18000 &\n   wait\n    # Test using curl\n    # curl http://localhost:8000/v1/chat/completions \\\n    #     -H \"Content-Type: application/json\" \\\n    #     -d '{\n    #         \"model\": \"\",\n    #         \"messages\":[{\"role\": \"user\", \"content\": \"Where is New York?\"},\n    #                     {\"role\": \"assistant\", \"content\": \"<|s_1708|><|s_2050|><|s_2159|>\"}],\n    #         \"max_tokens\": 512,\n    #         \"temperature\": 0.8,\n    #         \"top_p\": 0.95,\n    #         \"top_k\": 50,\n    #         \"stop\": [\"<|eos1|>\"],\n    #         \"repetition_penalty\": 1.2,\n    #         \"stream\": false\n    #     }'\nfi\n\nif [ $stage -le 4 ] && [ $stop_stage -ge 4 ]; then\n    echo \"Running benchmark client\"\n    num_task=4\n    mode=streaming\n    BLS_INSTANCE_NUM=$bls_instance_num\n\n    python3 client_grpc.py \\\n        --server-addr localhost \\\n        --server-port 8001 \\\n        --model-name cosyvoice2_dit \\\n        --num-tasks $num_task \\\n        --mode $mode \\\n        --huggingface-dataset yuekai/seed_tts_cosy2 \\\n        --log-dir ./log_single_gpu_concurrent_tasks_${num_task}_${mode}_bls_${BLS_INSTANCE_NUM}\n\nfi\n\nif [ $stage -le 5 ] && [ $stop_stage -ge 5 ]; then\n  echo \"stage 5: Offline TTS (Cosyvoice2 LLM + Step-Audio2-mini DiT Token2Wav) inference using a single python script\"\n\n  datasets=(wenetspeech4tts) # wenetspeech4tts, test_zh, zero_shot_zh\n  backend=trtllm # hf, trtllm, vllm, trtllm-serve\n\n  batch_sizes=(16)\n  token2wav_batch_size=1\n\n  for batch_size in ${batch_sizes[@]}; do\n    for dataset in ${datasets[@]}; do\n    output_dir=./${dataset}_${backend}_llm_batch_size_${batch_size}_token2wav_batch_size_${token2wav_batch_size}\n    CUDA_VISIBLE_DEVICES=1 \\\n        python3 offline_inference.py \\\n            --output-dir $output_dir \\\n            --llm-model-name-or-path $huggingface_model_local_dir \\\n            --token2wav-path $step_audio_model_dir/token2wav \\\n            --backend $backend \\\n            --batch-size $batch_size --token2wav-batch-size $token2wav_batch_size \\\n            --engine-dir $trt_engines_dir \\\n            --split-name ${dataset} || exit 1\n    done\n  done\nfi\n\nif [ $stage -le 6 ] && [ $stop_stage -ge 6 ]; then\n   echo \"Running Step-Audio2-mini DiT Token2Wav inference using a single python script\"\n   export CUDA_VISIBLE_DEVICES=1\n   # Note: Using pre-computed cosyvoice2 tokens\n   python3 streaming_inference.py --enable-trt --strategy equal # equal, exponential\n   # Offline Token2wav inference\n   python3 token2wav_dit.py --enable-trt\nfi\n\n\nif [ $stage -le 7 ] && [ $stop_stage -ge 7 ]; then\n   echo \"Disaggregated Server: LLM and Token2wav on different GPUs\"\n   echo \"Starting LLM server on GPU 0\"\n   export CUDA_VISIBLE_DEVICES=0\n   mpirun -np 1 --allow-run-as-root --oversubscribe trtllm-serve serve --tokenizer $huggingface_model_local_dir $trt_engines_dir --max_batch_size 64  --kv_cache_free_gpu_memory_fraction 0.4 &\n   echo \"Starting Token2wav server on GPUs 1-3\"\n   Token2wav_num_gpus=3\n   http_port=17000\n   grpc_port=18000\n   metrics_port=16000\n   for i in $(seq 0 $(($Token2wav_num_gpus - 1))); do\n       echo \"Starting server on GPU $i\"\n       http_port=$((http_port + 1))\n       grpc_port=$((grpc_port + 1))\n       metrics_port=$((metrics_port + 1))\n       # Two instances of Token2wav server on the same GPU\n       CUDA_VISIBLE_DEVICES=$(($i + 1)) tritonserver --model-repository $model_repo --http-port $http_port --grpc-port $grpc_port --metrics-port $metrics_port &\n       http_port=$((http_port + 1))\n       grpc_port=$((grpc_port + 1))\n       metrics_port=$((metrics_port + 1))\n       CUDA_VISIBLE_DEVICES=$(($i + 1)) tritonserver --model-repository $model_repo --http-port $http_port --grpc-port $grpc_port --metrics-port $metrics_port &\n   done\n   wait\nfi\n\nif [ $stage -le 8 ] && [ $stop_stage -ge 8 ]; then\n    echo \"Running benchmark client for Disaggregated Server\"\n    per_gpu_instances=2\n    mode=streaming\n    BLS_INSTANCE_NUM=$bls_instance_num\n    Token2wav_num_gpus=(1 2 3)\n    concurrent_tasks=(1 2 3 4 5 6)\n    for n_gpu in ${Token2wav_num_gpus[@]}; do\n        echo \"Test 1 GPU for LLM server and $n_gpu GPUs for Token2wav servers\"\n        for concurrent_task in ${concurrent_tasks[@]}; do\n            num_instances=$((per_gpu_instances * n_gpu))\n            for i in $(seq 1 $num_instances); do\n                port=$(($i + 18000))\n                python3 client_grpc.py \\\n                    --server-addr localhost \\\n                    --server-port $port \\\n                    --model-name cosyvoice2_dit \\\n                    --num-tasks $concurrent_task \\\n                    --mode $mode \\\n                    --huggingface-dataset yuekai/seed_tts_cosy2 \\\n                    --log-dir ./log_disagg_concurrent_tasks_${concurrent_task}_per_instance_total_token2wav_instances_${num_instances}_port_${port} &\n            done\n            wait\n        done\n    done\nfi"
  },
  {
    "path": "runtime/triton_trtllm/scripts/convert_checkpoint.py",
    "content": "import argparse\nimport os\nimport time\nimport traceback\nfrom concurrent.futures import ThreadPoolExecutor, as_completed\n\nfrom transformers import AutoConfig\n\nimport tensorrt_llm\nfrom tensorrt_llm._utils import release_gc\nfrom tensorrt_llm.logger import logger\nfrom tensorrt_llm.mapping import Mapping\nfrom tensorrt_llm.models import QWenForCausalLM\nfrom tensorrt_llm.models.modeling_utils import QuantConfig\nfrom tensorrt_llm.quantization import QuantAlgo\n\n\ndef parse_arguments():\n    parser = argparse.ArgumentParser()\n    parser.add_argument('--model_dir', type=str, default=None, required=True)\n    parser.add_argument('--tp_size',\n                        type=int,\n                        default=1,\n                        help='N-way tensor parallelism size')\n    parser.add_argument('--pp_size',\n                        type=int,\n                        default=1,\n                        help='N-way pipeline parallelism size')\n    parser.add_argument('--cp_size',\n                        type=int,\n                        default=1,\n                        help='N-way context parallelism size')\n    parser.add_argument(\n        '--dtype',\n        type=str,\n        default='auto',\n        choices=['auto', 'float16', 'bfloat16', 'float32'],\n        help=\"The data type for the model weights and activations if not quantized. \"\n        \"If 'auto', the data type is automatically inferred from the source model; \"\n        \"however, if the source dtype is float32, it is converted to float16.\")\n    parser.add_argument(\n        '--use_weight_only',\n        default=False,\n        action=\"store_true\",\n        help='Quantize weights for the various GEMMs to INT4/INT8.'\n        'See --weight_only_precision to set the precision')\n    parser.add_argument(\n        '--disable_weight_only_quant_plugin',\n        default=False,\n        action=\"store_true\",\n        help='By default, using plugin implementation for weight quantization. Enabling disable_weight_only_quant_plugin flag will use ootb implementation instead of plugin.'\n        'You must also use --use_weight_only for that argument to have an impact.'\n    )\n    parser.add_argument(\n        '--weight_only_precision',\n        const='int8',\n        type=str,\n        nargs='?',\n        default='int8',\n        choices=['int8', 'int4', 'int4_gptq'],\n        help='Define the precision for the weights when using weight-only quantization.'\n        'You must also use --use_weight_only for that argument to have an impact.'\n    )\n    parser.add_argument(\n        '--calib_dataset',\n        type=str,\n        default='ccdv/cnn_dailymail',\n        help=\"The huggingface dataset name or the local directory of the dataset for calibration.\"\n    )\n    parser.add_argument(\n        \"--smoothquant\",\n        \"-sq\",\n        type=float,\n        default=None,\n        help=\"Set the α parameter (see https://arxiv.org/pdf/2211.10438.pdf)\"\n        \" to Smoothquant the model, and output int8 weights.\"\n        \" A good first try is 0.5. Must be in [0, 1]\")\n    parser.add_argument(\n        '--per_channel',\n        action=\"store_true\",\n        default=False,\n        help='By default, we use a single static scaling factor for the GEMM\\'s result. '\n        'per_channel instead uses a different static scaling factor for each channel. '\n        'The latter is usually more accurate, but a little slower.')\n    parser.add_argument(\n        '--per_token',\n        action=\"store_true\",\n        default=False,\n        help='By default, we use a single static scaling factor to scale activations in the int8 range. '\n        'per_token chooses at run time, and for each token, a custom scaling factor. '\n        'The latter is usually more accurate, but a little slower.')\n    parser.add_argument(\n        '--int8_kv_cache',\n        default=False,\n        action=\"store_true\",\n        help='By default, we use dtype for KV cache. int8_kv_cache chooses int8 quantization for KV'\n    )\n    parser.add_argument(\n        '--per_group',\n        default=False,\n        action=\"store_true\",\n        help='By default, we use a single static scaling factor to scale weights in the int4 range. '\n        'per_group chooses at run time, and for each group, a custom scaling factor. '\n        'The flag is built for GPTQ/AWQ quantization.')\n\n    parser.add_argument('--group_size',\n                        type=int,\n                        default=128,\n                        help='Group size used in GPTQ quantization.')\n\n    parser.add_argument(\"--load_model_on_cpu\", action=\"store_true\")\n    parser.add_argument(\n        '--use_parallel_embedding',\n        action=\"store_true\",\n        default=False,\n        help='By default embedding parallelism is disabled. By setting this flag, embedding parallelism is enabled'\n    )\n    parser.add_argument(\n        '--embedding_sharding_dim',\n        type=int,\n        default=0,\n        choices=[0, 1],\n        help='By default the embedding lookup table is sharded along vocab dimension (embedding_sharding_dim=0). '\n        'To shard it along hidden dimension, set embedding_sharding_dim=1'\n        'Note: embedding sharing is only enabled when embedding_sharding_dim = 0'\n    )\n    parser.add_argument('--output_dir',\n                        type=str,\n                        default='tllm_checkpoint',\n                        help='The path to save the TensorRT-LLM checkpoint')\n    parser.add_argument(\n        '--workers',\n        type=int,\n        default=1,\n        help='The number of workers for converting checkpoint in parallel')\n    parser.add_argument(\n        '--moe_tp_size',\n        type=int,\n        default=-1,\n        help='N-way tensor parallelism size for MOE, default is tp_size, which will do tp-only for MoE'\n    )\n    parser.add_argument(\n        '--moe_ep_size',\n        type=int,\n        default=-1,\n        help='N-way expert parallelism size for MOE, default is 1, which will do tp-only for MoE'\n    )\n    args = parser.parse_args()\n    return args\n\n\ndef args_to_quant_config(args: argparse.Namespace) -> QuantConfig:\n    '''return config dict with quantization info based on the command line args\n    '''\n    quant_config = QuantConfig()\n    if args.use_weight_only:\n        if args.weight_only_precision == 'int8':\n            quant_config.quant_algo = QuantAlgo.W8A16\n        elif args.weight_only_precision == 'int4':\n            quant_config.quant_algo = QuantAlgo.W4A16\n    elif args.smoothquant:\n        quant_config.smoothquant_val = args.smoothquant\n        if args.per_channel:\n            if args.per_token:\n                quant_config.quant_algo = QuantAlgo.W8A8_SQ_PER_CHANNEL_PER_TOKEN_PLUGIN\n            else:\n                quant_config.quant_algo = QuantAlgo.W8A8_SQ_PER_CHANNEL_PER_TENSOR_PLUGIN\n        else:\n            if args.per_token:\n                quant_config.quant_algo = QuantAlgo.W8A8_SQ_PER_TENSOR_PER_TOKEN_PLUGIN\n            else:\n                quant_config.quant_algo = QuantAlgo.W8A8_SQ_PER_TENSOR_PLUGIN\n\n    if args.int8_kv_cache:\n        quant_config.kv_cache_quant_algo = QuantAlgo.INT8\n\n    if args.weight_only_precision == 'int4_gptq':\n        quant_config.group_size = args.group_size\n        quant_config.has_zero_point = True\n        quant_config.pre_quant_scale = False\n        quant_config.quant_algo = QuantAlgo.W4A16_GPTQ\n\n    return quant_config\n\n\ndef update_quant_config_from_hf(quant_config, hf_config,\n                                override_fields) -> tuple[QuantConfig, dict]:\n    hf_config_dict = hf_config.to_dict()\n    if hf_config_dict.get('quantization_config'):\n        # update the quant_algo, and clamp_val.\n        if hf_config_dict['quantization_config'].get('quant_method') == 'awq':\n            logger.info(\n                \"Load quantization configs from huggingface model_config.\")\n            quant_config.quant_algo = QuantAlgo.W4A16_GPTQ\n            quant_config.group_size = hf_config_dict['quantization_config'].get(\n                'group_size', 128)\n            quant_config.has_zero_point = hf_config_dict[\n                'quantization_config'].get('zero_point', False)\n            override_fields.update({\"use_autoawq\": True})\n        elif hf_config_dict['quantization_config'].get(\n                'quant_method') == 'gptq':\n            logger.info(\n                \"Load quantization configs from huggingface model_config.\")\n            desc_act = hf_config_dict['quantization_config'].get(\n                'desc_act', False)\n            if desc_act:\n                raise ValueError(\"GPTQ with desc_act=True is not implemented!\")\n            quant_config.quant_algo = QuantAlgo.W4A16_GPTQ\n            quant_config.group_size = hf_config_dict['quantization_config'].get(\n                'group_size', 128)\n            quant_config.has_zero_point = hf_config_dict[\n                'quantization_config'].get('sym', False)\n    return quant_config, override_fields\n\n\ndef args_to_build_options(args):\n    return {\n        'use_parallel_embedding': args.use_parallel_embedding,\n        'embedding_sharding_dim': args.embedding_sharding_dim,\n        'disable_weight_only_quant_plugin':\n        args.disable_weight_only_quant_plugin\n    }\n\n\ndef convert_and_save_hf(args):\n    model_dir = args.model_dir\n    world_size = args.tp_size * args.pp_size\n    # Need to convert the cli args to the kay-value pairs and override them in the generate config dict.\n    # Ideally these fields will be moved out of the config and pass them into build API, keep them here for compatibility purpose for now,\n    # before the refactor is done.\n    override_fields = {}\n    override_fields.update(args_to_build_options(args))\n    quant_config = args_to_quant_config(args)\n\n    try:\n        hf_config = AutoConfig.from_pretrained(model_dir,\n                                               trust_remote_code=True)\n        quant_config, override_fields = update_quant_config_from_hf(\n            quant_config, hf_config, override_fields)\n    except BaseException:\n        logger.warning(\"AutoConfig cannot load the huggingface config.\")\n\n    if args.smoothquant is not None or args.int8_kv_cache:\n        mapping = Mapping(world_size=world_size,\n                          tp_size=args.tp_size,\n                          pp_size=args.pp_size,\n                          moe_tp_size=args.moe_tp_size,\n                          moe_ep_size=args.moe_ep_size,\n                          cp_size=args.cp_size)\n        QWenForCausalLM.quantize(args.model_dir,\n                                 args.output_dir,\n                                 dtype=args.dtype,\n                                 mapping=mapping,\n                                 quant_config=quant_config,\n                                 calib_dataset=args.calib_dataset,\n                                 **override_fields)\n    else:\n\n        def convert_and_save_rank(args, rank):\n            mapping = Mapping(world_size=world_size,\n                              rank=rank,\n                              tp_size=args.tp_size,\n                              pp_size=args.pp_size,\n                              moe_tp_size=args.moe_tp_size,\n                              moe_ep_size=args.moe_ep_size)\n            qwen = QWenForCausalLM.from_hugging_face(model_dir,\n                                                     args.dtype,\n                                                     mapping=mapping,\n                                                     quant_config=quant_config,\n                                                     **override_fields)\n            qwen.config.mapping.cp_size = args.cp_size\n            qwen.config.mapping.attn_tp_size = -1\n            qwen.config.mapping.attn_cp_size = -1\n            qwen.config.mapping.world_size *= args.cp_size\n            qwen.save_checkpoint(args.output_dir, save_config=(rank == 0))\n            del qwen\n\n        execute(args.workers, [convert_and_save_rank] * world_size, args)\n        release_gc()\n\n\ndef execute(workers, func, args):\n    if workers == 1:\n        for rank, f in enumerate(func):\n            f(args, rank)\n    else:\n        with ThreadPoolExecutor(max_workers=workers) as p:\n            futures = [p.submit(f, args, rank) for rank, f in enumerate(func)]\n            exceptions = []\n            for future in as_completed(futures):\n                try:\n                    future.result()\n                except Exception as e:\n                    traceback.print_exc()\n                    exceptions.append(e)\n            assert len(\n                exceptions\n            ) == 0, \"Checkpoint conversion failed, please check error log.\"\n\n\ndef main():\n    print(tensorrt_llm.__version__)\n    args = parse_arguments()\n\n    if (args.moe_tp_size == -1 and args.moe_ep_size == -1):\n        # moe default to tp-only\n        args.moe_tp_size = args.tp_size\n        args.moe_ep_size = 1\n    elif (args.moe_tp_size == -1):\n        args.moe_tp_size = args.tp_size // args.moe_ep_size\n    elif (args.moe_ep_size == -1):\n        args.moe_ep_size = args.tp_size // args.moe_tp_size\n    assert (args.moe_tp_size * args.moe_ep_size == args.tp_size\n            ), \"moe_tp_size * moe_ep_size must equal to tp_size\"\n\n    tik = time.time()\n\n    if not os.path.exists(args.output_dir):\n        os.makedirs(args.output_dir)\n\n    assert args.model_dir is not None\n    convert_and_save_hf(args)\n\n    tok = time.time()\n    t = time.strftime('%H:%M:%S', time.gmtime(tok - tik))\n    print(f'Total time of converting checkpoints: {t}')\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "runtime/triton_trtllm/scripts/convert_cosyvoice3_to_hf.py",
    "content": "#!/usr/bin/env python3\n# Copyright 2025 CosyVoice3 TRT-LLM Integration\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\"\"\"\nConvert CosyVoice3 LLM to HuggingFace format with merged embeddings.\n\nThis script:\n1. Loads CosyVoice3 model\n2. Extends tokenizer vocab with speech tokens\n3. Merges speech_embedding into embed_tokens of Qwen2\n4. Replaces lm_head with llm_decoder using extended vocab\n5. Saves model in HuggingFace format for TRT-LLM conversion\n\nUsage:\n    python scripts/convert_cosyvoice3_to_hf.py \\\n        --model-dir pretrained_models/Fun-CosyVoice3-0.5B \\\n        --output-dir pretrained_models/Fun-CosyVoice3-0.5B/hf_merged\n\nThen convert to TRT-LLM:\n    trtllm-build --checkpoint_dir <output_dir> --output_dir <trt_engines_dir> ...\n\"\"\"\nimport argparse\nimport os\nimport sys\nimport logging\n\nimport torch\nfrom transformers import AutoTokenizer, AutoModelForCausalLM, AutoConfig\n\nsys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))\nsys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'third_party/Matcha-TTS'))\n\nlogging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')\nlogger = logging.getLogger(__name__)\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser(description=\"Convert CosyVoice3 to HuggingFace format with merged embeddings\")\n    parser.add_argument(\n        \"--model-dir\",\n        type=str,\n        default=\"pretrained_models/Fun-CosyVoice3-0.5B\",\n        help=\"Path to CosyVoice3 model directory\",\n    )\n    parser.add_argument(\n        \"--output-dir\",\n        type=str,\n        default=None,\n        help=\"Output directory for HuggingFace model (default: <model-dir>/hf_merged)\",\n    )\n    parser.add_argument(\n        \"--dtype\",\n        type=str,\n        default=\"bfloat16\",\n        choices=[\"float16\", \"bfloat16\", \"float32\"],\n        help=\"Output dtype for the model\",\n    )\n    return parser.parse_args()\n\n\ndef load_cosyvoice3_model(model_dir: str):\n    \"\"\"Load CosyVoice3 model for weight extraction.\"\"\"\n    from hyperpyyaml import load_hyperpyyaml\n    from cosyvoice.utils.class_utils import get_model_type\n\n    hyper_yaml_path = os.path.join(model_dir, 'cosyvoice3.yaml')\n    hf_llm_dir = os.path.join(model_dir, 'CosyVoice-BlankEN')\n\n    if not os.path.exists(hyper_yaml_path):\n        raise ValueError(f'{hyper_yaml_path} not found!')\n\n    with open(hyper_yaml_path, 'r') as f:\n        configs = load_hyperpyyaml(\n            f,\n            overrides={'qwen_pretrain_path': hf_llm_dir}\n        )\n\n    # Load LLM only\n    llm = configs['llm']\n    llm_weights_path = os.path.join(model_dir, 'llm.pt')\n    llm.load_state_dict(torch.load(llm_weights_path, map_location='cpu'), strict=True)\n    llm.eval()\n\n    logger.info(f\"Loaded CosyVoice3 LLM from {model_dir}\")\n\n    return llm, hf_llm_dir, configs\n\n\ndef get_speech_token_size(llm) -> int:\n    \"\"\"Determine speech token vocabulary size from the model.\"\"\"\n    # CosyVoice3LM has: speech_token_size + 200 in llm_decoder\n    # speech_embedding has: speech_token_size + 200\n    speech_embedding_size = llm.speech_embedding.num_embeddings\n    # Use full embedding size (includes speech special tokens)\n    return speech_embedding_size\n\n\ndef convert_cosyvoice3_to_hf(\n    model_dir: str,\n    output_dir: str,\n    dtype: str = \"bfloat16\",\n):\n    \"\"\"\n    Convert CosyVoice3 LLM to HuggingFace format with merged embeddings.\n\n    Merging architecture:\n    - embed_tokens[0:original_vocab_size] = original text embeddings\n    - embed_tokens[original_vocab_size:original_vocab_size+speech_token_size] = speech_embedding\n    - lm_head[original_vocab_size:original_vocab_size+speech_token_size] = llm_decoder\n\n    Args:\n        model_dir: Path to CosyVoice3 model\n        output_dir: Path to save HF model\n        dtype: Data type for saving\n    \"\"\"\n    logger.info(f\"Loading CosyVoice3 model from {model_dir}\")\n\n    # 1. Load CosyVoice3 components\n    cosyvoice3_llm, hf_llm_dir, configs = load_cosyvoice3_model(model_dir)\n\n    # Extract key components\n    qwen_model = cosyvoice3_llm.llm.model  # Qwen2ForCausalLM\n    speech_embedding = cosyvoice3_llm.speech_embedding  # Embedding for speech tokens\n    llm_decoder = cosyvoice3_llm.llm_decoder  # Linear for decoding to speech tokens\n\n    speech_token_size = get_speech_token_size(cosyvoice3_llm)\n    logger.info(f\"Speech token size: {speech_token_size}\")\n\n    # 2. Load tokenizer and add CosyVoice3 text special tokens + speech tokens\n    tokenizer = AutoTokenizer.from_pretrained(hf_llm_dir, trust_remote_code=True)\n    base_vocab_size = len(tokenizer)\n    logger.info(f\"Base tokenizer vocab size: {base_vocab_size}\")\n\n    # IMPORTANT:\n    # - In CosyVoice3, LLM speech special tokens (sos/eos/task_id/fill) are INSIDE speech_embedding,\n    #   i.e. represented as <|s_6561|>, <|s_6562|>, <|s_6563|>, <|s_6564|>.\n    # - But text-level special tokens like [cough]/[laughter] MUST exist in tokenizer\n    #   (mirrors `CosyVoice3Tokenizer` from `cosyvoice/tokenizer/tokenizer.py`).\n    special_tokens = {\n        'eos_token': '<|endoftext|>',\n        'pad_token': '<|endoftext|>',\n        'additional_special_tokens': [\n            '<|im_start|>', '<|im_end|>', '<|endofprompt|>',\n            '[breath]', '<strong>', '</strong>', '[noise]',\n            '[laughter]', '[cough]', '[clucking]', '[accent]',\n            '[quick_breath]',\n            \"<laughter>\", \"</laughter>\",\n            \"[hissing]\", \"[sigh]\", \"[vocalized-noise]\",\n            \"[lipsmack]\", \"[mn]\", \"<|endofsystem|>\",\n            # Phoneme tokens (kept consistent with CosyVoice3Tokenizer)\n            \"[AA]\", \"[AA0]\", \"[AA1]\", \"[AA2]\", \"[AE]\", \"[AE0]\", \"[AE1]\", \"[AE2]\", \"[AH]\", \"[AH0]\", \"[AH1]\", \"[AH2]\",\n            \"[AO]\", \"[AO0]\", \"[AO1]\", \"[AO2]\", \"[AW]\", \"[AW0]\", \"[AW1]\", \"[AW2]\", \"[AY]\", \"[AY0]\", \"[AY1]\", \"[AY2]\",\n            \"[B]\", \"[CH]\", \"[D]\", \"[DH]\", \"[EH]\", \"[EH0]\", \"[EH1]\", \"[EH2]\", \"[ER]\", \"[ER0]\", \"[ER1]\", \"[ER2]\", \"[EY]\",\n            \"[EY0]\", \"[EY1]\", \"[EY2]\", \"[F]\", \"[G]\", \"[HH]\", \"[IH]\", \"[IH0]\", \"[IH1]\", \"[IH2]\", \"[IY]\", \"[IY0]\", \"[IY1]\",\n            \"[IY2]\", \"[JH]\", \"[K]\", \"[L]\", \"[M]\", \"[N]\", \"[NG]\", \"[OW]\", \"[OW0]\", \"[OW1]\", \"[OW2]\", \"[OY]\", \"[OY0]\",\n            \"[OY1]\", \"[OY2]\", \"[P]\", \"[R]\", \"[S]\", \"[SH]\", \"[T]\", \"[TH]\", \"[UH]\", \"[UH0]\", \"[UH1]\", \"[UH2]\", \"[UW]\",\n            \"[UW0]\", \"[UW1]\", \"[UW2]\", \"[V]\", \"[W]\", \"[Y]\", \"[Z]\", \"[ZH]\",\n            \"[a]\", \"[ai]\", \"[an]\", \"[ang]\", \"[ao]\", \"[b]\", \"[c]\", \"[ch]\", \"[d]\", \"[e]\", \"[ei]\", \"[en]\", \"[eng]\", \"[f]\",\n            \"[g]\", \"[h]\", \"[i]\", \"[ian]\", \"[in]\", \"[ing]\", \"[iu]\", \"[ià]\", \"[iàn]\", \"[iàng]\", \"[iào]\", \"[iá]\", \"[ián]\",\n            \"[iáng]\", \"[iáo]\", \"[iè]\", \"[ié]\", \"[iòng]\", \"[ióng]\", \"[iù]\", \"[iú]\", \"[iā]\", \"[iān]\", \"[iāng]\", \"[iāo]\",\n            \"[iē]\", \"[iě]\", \"[iōng]\", \"[iū]\", \"[iǎ]\", \"[iǎn]\", \"[iǎng]\", \"[iǎo]\", \"[iǒng]\", \"[iǔ]\", \"[j]\", \"[k]\", \"[l]\",\n            \"[m]\", \"[n]\", \"[o]\", \"[ong]\", \"[ou]\", \"[p]\", \"[q]\", \"[r]\",\n            \"[s]\", \"[sh]\", \"[t]\", \"[u]\", \"[uang]\", \"[ue]\",\n            \"[un]\", \"[uo]\", \"[uà]\", \"[uài]\", \"[uàn]\", \"[uàng]\", \"[uá]\", \"[uái]\", \"[uán]\", \"[uáng]\", \"[uè]\", \"[ué]\", \"[uì]\",\n            \"[uí]\", \"[uò]\", \"[uó]\", \"[uā]\", \"[uāi]\", \"[uān]\", \"[uāng]\", \"[uē]\", \"[uě]\", \"[uī]\", \"[uō]\", \"[uǎ]\", \"[uǎi]\",\n            \"[uǎn]\", \"[uǎng]\", \"[uǐ]\", \"[uǒ]\", \"[vè]\", \"[w]\", \"[x]\", \"[y]\", \"[z]\", \"[zh]\", \"[à]\", \"[ài]\", \"[àn]\", \"[àng]\",\n            \"[ào]\", \"[á]\", \"[ái]\", \"[án]\", \"[áng]\", \"[áo]\", \"[è]\", \"[èi]\", \"[èn]\", \"[èng]\", \"[èr]\", \"[é]\", \"[éi]\", \"[én]\",\n            \"[éng]\", \"[ér]\", \"[ì]\", \"[ìn]\", \"[ìng]\", \"[í]\", \"[ín]\", \"[íng]\", \"[ò]\", \"[òng]\", \"[òu]\", \"[ó]\", \"[óng]\", \"[óu]\",\n            \"[ù]\", \"[ùn]\", \"[ú]\", \"[ún]\", \"[ā]\", \"[āi]\", \"[ān]\", \"[āng]\", \"[āo]\", \"[ē]\", \"[ēi]\", \"[ēn]\", \"[ēng]\", \"[ě]\",\n            \"[ěi]\", \"[ěn]\", \"[ěng]\", \"[ěr]\", \"[ī]\", \"[īn]\", \"[īng]\", \"[ō]\", \"[ōng]\", \"[ōu]\", \"[ū]\", \"[ūn]\", \"[ǎ]\", \"[ǎi]\",\n            \"[ǎn]\", \"[ǎng]\", \"[ǎo]\", \"[ǐ]\", \"[ǐn]\", \"[ǐng]\", \"[ǒ]\", \"[ǒng]\", \"[ǒu]\", \"[ǔ]\", \"[ǔn]\", \"[ǘ]\", \"[ǚ]\", \"[ǜ]\"\n        ]\n    }\n    tokenizer.add_special_tokens(special_tokens)\n    text_vocab_size = len(tokenizer)\n    logger.info(f\"Tokenizer vocab after CosyVoice3 text special tokens: {text_vocab_size}\")\n\n    # Add speech tokens: <|s_0|>, <|s_1|>, ..., <|s_{embedding_size-1}|>\n    # IMPORTANT: This range must match speech_embedding.num_embeddings (includes speech special tokens).\n    actual_speech_tokens = speech_token_size  # Full embedding size (with speech special tokens)\n\n    # replace <s_6561> to <|sos|>\n    # replace <s_6562> to <|eos1|>\n    # replace <s_6563> to <|task_id|>\n    # replace <s_6564> to <|fill|>\n    speech_tokens = [f\"<|s_{i}|>\" for i in range(actual_speech_tokens)]\n    speech_tokens[6561] = \"<|sos|>\"\n    speech_tokens[6562] = \"<|eos1|>\"\n    speech_tokens[6563] = \"<|task_id|>\"\n    speech_tokens[6564] = \"<|fill|>\"\n    assert \"<s_6561>\" not in speech_tokens\n    assert \"<s_6562>\" not in speech_tokens\n    assert \"<s_6563>\" not in speech_tokens\n    assert \"<s_6564>\" not in speech_tokens\n    tokenizer.add_tokens(speech_tokens)\n\n    new_vocab_size = len(tokenizer)\n    logger.info(f\"New tokenizer vocab size: {new_vocab_size}\")\n    logger.info(f\"Added {new_vocab_size - base_vocab_size} tokens total (text special + speech tokens)\")\n\n    # 3. Resize embeddings in Qwen model\n    # Align to 128 for TensorRT efficiency\n    padded_vocab_size = ((new_vocab_size + 127) // 128) * 128\n    qwen_model.resize_token_embeddings(padded_vocab_size)\n    logger.info(f\"Resized embeddings to: {padded_vocab_size}\")\n\n    # Speech tokens start after text vocab (base + CosyVoice3 text special tokens)\n    speech_token_offset = text_vocab_size\n\n    # 4. Copy speech_embedding into extended embed_tokens\n    input_embeddings = qwen_model.get_input_embeddings()\n    hidden_size = input_embeddings.weight.shape[1]\n\n    logger.info(f\"Hidden size: {hidden_size}\")\n    logger.info(f\"speech_embedding shape: {speech_embedding.weight.shape}\")\n    logger.info(f\"llm_decoder shape: {llm_decoder.weight.shape}\")\n\n    with torch.no_grad():\n        # Copy speech_embedding weights into embed_tokens\n        # Indices: [speech_token_offset, speech_token_offset + speech_token_size)\n        src_size = min(speech_embedding.weight.shape[0], actual_speech_tokens)\n        input_embeddings.weight[speech_token_offset:speech_token_offset + src_size] = \\\n            speech_embedding.weight[:src_size].to(input_embeddings.weight.dtype)\n\n    logger.info(f\"Copied speech_embedding to embed_tokens[{speech_token_offset}:{speech_token_offset + src_size}]\")\n\n    # 5. Create new lm_head with extended vocab and copy llm_decoder\n    # Original lm_head: hidden_size -> original_vocab_size\n    # New lm_head: hidden_size -> padded_vocab_size\n    # llm_decoder: hidden_size -> speech_token_size\n\n    # Create new lm_head\n    has_bias = llm_decoder.bias is not None\n    new_lm_head = torch.nn.Linear(\n        in_features=hidden_size,\n        out_features=padded_vocab_size,\n        bias=has_bias\n    )\n\n    with torch.no_grad():\n        # Initialize weights:\n        # - Text part: copy from original lm_head (or zeros)\n        # - Speech part: copy from llm_decoder\n        # - Padding: zeros\n\n        # Fill with zeros and -inf in bias (so text tokens are not generated)\n        new_lm_head.weight.data.zero_()\n        if has_bias:\n            new_lm_head.bias.data.fill_(-float('inf'))\n\n        # Copy original lm_head for text tokens (optional)\n        original_lm_head = qwen_model.lm_head\n        if original_lm_head is not None and original_lm_head.weight.shape[0] >= text_vocab_size:\n            new_lm_head.weight[:text_vocab_size] = original_lm_head.weight[:text_vocab_size]\n            if has_bias and original_lm_head.bias is not None:\n                new_lm_head.bias[:text_vocab_size] = original_lm_head.bias[:text_vocab_size]\n\n        # Copy llm_decoder for speech tokens\n        decoder_size = min(llm_decoder.weight.shape[0], actual_speech_tokens)\n        new_lm_head.weight[speech_token_offset:speech_token_offset + decoder_size] = \\\n            llm_decoder.weight[:decoder_size].to(new_lm_head.weight.dtype)\n\n        if has_bias:\n            new_lm_head.bias[speech_token_offset:speech_token_offset + decoder_size] = \\\n                llm_decoder.bias[:decoder_size].to(new_lm_head.bias.dtype)\n        else:\n            # If llm_decoder has no bias but we want it for text tokens\n            pass\n\n    # Replace lm_head\n    qwen_model.lm_head = new_lm_head\n\n    logger.info(f\"Created new lm_head with shape: {new_lm_head.weight.shape}\")\n    logger.info(f\"Copied llm_decoder to lm_head[{speech_token_offset}:{speech_token_offset + decoder_size}]\")\n\n    # 6. Update model configuration\n    qwen_model.config.vocab_size = padded_vocab_size\n    qwen_model.config.tie_word_embeddings = False  # Embeddings and lm_head are now different!\n\n    # Set EOS token for generation (speech EOS lives inside speech_embedding as <|s_{base_speech_token_size+1}|>)\n    base_speech_token_size = getattr(cosyvoice3_llm, \"speech_token_size\", 6561)\n    eos_speech_idx = base_speech_token_size + 1\n    eos_id = speech_token_offset + eos_speech_idx\n    qwen_model.config.eos_token_id = eos_id\n\n    # Generation settings\n    qwen_model.generation_config.eos_token_id = eos_id\n    qwen_model.generation_config.pad_token_id = eos_id\n    qwen_model.generation_config.temperature = 0.8\n    qwen_model.generation_config.top_p = 0.95\n    qwen_model.generation_config.top_k = 25\n    qwen_model.generation_config.repetition_penalty = 1.1\n    qwen_model.generation_config.max_new_tokens = 2048\n\n    # 7. Convert to target dtype\n    dtype_map = {\n        \"float16\": torch.float16,\n        \"bfloat16\": torch.bfloat16,\n        \"float32\": torch.float32,\n    }\n    target_dtype = dtype_map[dtype]\n    qwen_model.to(target_dtype)\n\n    # 8. Save model and tokenizer\n    os.makedirs(output_dir, exist_ok=True)\n\n    qwen_model.save_pretrained(output_dir)\n\n    TEMPLATE = \"{%- for message in messages %}{%- if message['role'] == 'user' %}{{- '<|sos|>' + message['content'] + '<|task_id|>' }}{%- elif message['role'] == 'assistant' %}{{- message['content']}}{%- endif %}{%- endfor %}\"\n    tokenizer.chat_template = TEMPLATE\n    tokenizer.save_pretrained(output_dir)\n\n    # Save metadata for TRT-LLM inference\n    metadata = {\n        \"original_vocab_size\": base_vocab_size,\n        \"text_vocab_size\": text_vocab_size,\n        \"base_speech_token_size\": base_speech_token_size,\n        \"embedding_size\": actual_speech_tokens,\n        \"padded_vocab_size\": padded_vocab_size,\n        \"eos_token_id\": eos_id,\n        \"speech_token_offset\": speech_token_offset,\n        \"dtype\": dtype,\n    }\n\n    import json\n    with open(os.path.join(output_dir, \"cosyvoice3_metadata.json\"), \"w\") as f:\n        json.dump(metadata, f, indent=2)\n\n    logger.info(f\"Saved HuggingFace model to {output_dir}\")\n    logger.info(f\"Metadata: {metadata}\")\n\n    return output_dir, metadata\n\n\ndef main():\n    args = parse_args()\n\n    output_dir = args.output_dir\n    if output_dir is None:\n        output_dir = os.path.join(args.model_dir, \"hf_merged\")\n\n    convert_cosyvoice3_to_hf(\n        model_dir=args.model_dir,\n        output_dir=output_dir,\n        dtype=args.dtype,\n    )\n\n    print(\"\\n\" + \"=\" * 70)\n    print(\"✅ Conversion complete!\")\n    print(\"=\" * 70)\n    print(f\"\\nHuggingFace model saved to: {output_dir}\")\n    print(\"\\nNext steps:\")\n    print(\"1. Convert to TRT-LLM weights:\")\n    print(f\"   python -c \\\"from tensorrt_llm.models import QWenForCausalLM; ...\")\n    print(\"\\n2. Build TRT-LLM engines:\")\n    print(f\"   trtllm-build --checkpoint_dir <trt_weights_dir> --output_dir <trt_engines_dir> ...\")\n    print(\"=\" * 70)\n\n\nif __name__ == \"__main__\":\n    main()"
  },
  {
    "path": "runtime/triton_trtllm/scripts/fill_template.py",
    "content": "# /usr/bin/env python3\nfrom argparse import ArgumentParser\nfrom string import Template\n\n\ndef split(string, delimiter):\n    \"\"\"Split a string using delimiter. Supports escaping.\n\n    Args:\n        string (str): The string to split.\n        delimiter (str): The delimiter to split the string with.\n\n    Returns:\n        list: A list of strings.\n    \"\"\"\n    result = []\n    current = \"\"\n    escape = False\n    for char in string:\n        if escape:\n            current += char\n            escape = False\n        elif char == delimiter:\n            result.append(current)\n            current = \"\"\n        elif char == \"\\\\\":\n            escape = True\n        else:\n            current += char\n    result.append(current)\n    return result\n\n\ndef main(file_path, substitutions, in_place):\n    with open(file_path) as f:\n        pbtxt = Template(f.read())\n\n    sub_dict = {\n        \"max_queue_size\": 0,\n        'max_queue_delay_microseconds': 0,\n    }\n    for sub in split(substitutions, \",\"):\n        key, value = split(sub, \":\")\n        sub_dict[key] = value\n\n        assert key in pbtxt.template, f\"key '{key}' does not exist in the file {file_path}.\"\n\n    pbtxt = pbtxt.safe_substitute(sub_dict)\n\n    if in_place:\n        with open(file_path, \"w\") as f:\n            f.write(pbtxt)\n    else:\n        print(pbtxt)\n\n\nif __name__ == \"__main__\":\n    parser = ArgumentParser()\n    parser.add_argument(\"file_path\", help=\"path of the .pbtxt to modify\")\n    parser.add_argument(\n        \"substitutions\",\n        help=\"substitutions to perform, in the format variable_name_1:value_1,variable_name_2:value_2...\"\n    )\n    parser.add_argument(\"--in_place\",\n                        \"-i\",\n                        action=\"store_true\",\n                        help=\"do the operation in-place\")\n    args = parser.parse_args()\n    main(**vars(args))\n"
  },
  {
    "path": "runtime/triton_trtllm/scripts/test_llm.py",
    "content": "\n# SPDX-FileCopyrightText: Copyright (c) 2022-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-Identifier: Apache-2.0\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\nimport argparse\n\nimport numpy as np\nimport torch\n\nimport tensorrt_llm\nfrom tensorrt_llm.logger import logger\n\nfrom tensorrt_llm.runtime import ModelRunnerCpp\nfrom transformers import AutoTokenizer\n\n\ndef parse_arguments(args=None):\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\n        '--input_text',\n        type=str,\n        nargs='+',\n        default=[\"Born in north-east France, Soyer trained as a\"])\n    parser.add_argument('--tokenizer_dir', type=str, default=\"meta-llama/Meta-Llama-3-8B-Instruct\")\n    parser.add_argument('--engine_dir', type=str, default=\"meta-llama/Meta-Llama-3-8B-Instruct\")\n    parser.add_argument('--log_level', type=str, default=\"debug\")\n    parser.add_argument('--kv_cache_free_gpu_memory_fraction', type=float, default=0.6)\n    parser.add_argument('--temperature', type=float, default=0.8)\n    parser.add_argument('--top_k', type=int, default=50)\n    parser.add_argument('--top_p', type=float, default=0.95)\n\n    return parser.parse_args(args=args)\n\n\ndef parse_input(tokenizer,\n                input_text=None,\n                prompt_template=None):\n    batch_input_ids = []\n    for curr_text in input_text:\n        if prompt_template is not None:\n            curr_text = prompt_template.format(input_text=curr_text)\n        input_ids = tokenizer.encode(\n            curr_text)\n        batch_input_ids.append(input_ids)\n\n    batch_input_ids = [\n        torch.tensor(x, dtype=torch.int32) for x in batch_input_ids\n    ]\n\n    logger.debug(f\"Input token ids (batch_size = {len(batch_input_ids)}):\")\n    for i, input_ids in enumerate(batch_input_ids):\n        logger.debug(f\"Request {i}: {input_ids.tolist()}\")\n\n    return batch_input_ids\n\n\ndef main(args):\n    runtime_rank = tensorrt_llm.mpi_rank()\n    logger.set_level(args.log_level)\n\n    tokenizer = AutoTokenizer.from_pretrained(args.tokenizer_dir)\n    prompt_template = \"<|sos|>{input_text}<|task_id|>\"\n    end_id = tokenizer.convert_tokens_to_ids(\"<|eos1|>\")\n\n    batch_input_ids = parse_input(tokenizer=tokenizer,\n                                  input_text=args.input_text,\n                                  prompt_template=prompt_template)\n\n    input_lengths = [x.size(0) for x in batch_input_ids]\n\n    runner_kwargs = dict(\n        engine_dir=args.engine_dir,\n        rank=runtime_rank,\n        max_output_len=1024,\n        enable_context_fmha_fp32_acc=False,\n        max_batch_size=len(batch_input_ids),\n        max_input_len=max(input_lengths),\n        kv_cache_free_gpu_memory_fraction=args.kv_cache_free_gpu_memory_fraction,\n        cuda_graph_mode=False,\n        gather_generation_logits=False,\n    )\n\n    runner = ModelRunnerCpp.from_dir(**runner_kwargs)\n\n    with torch.no_grad():\n        outputs = runner.generate(\n            batch_input_ids=batch_input_ids,\n            max_new_tokens=1024,\n            end_id=end_id,\n            pad_id=end_id,\n            temperature=args.temperature,\n            top_k=args.top_k,\n            top_p=args.top_p,\n            num_return_sequences=1,\n            repetition_penalty=1.1,\n            random_seed=42,\n            streaming=False,\n            output_sequence_lengths=True,\n            output_generation_logits=False,\n            return_dict=True,\n            return_all_generated_tokens=False)\n        torch.cuda.synchronize()\n        output_ids, sequence_lengths = outputs[\"output_ids\"], outputs[\"sequence_lengths\"]\n        num_output_sents, num_beams, _ = output_ids.size()\n        assert num_beams == 1\n        beam = 0\n        batch_size = len(input_lengths)\n        num_return_sequences = num_output_sents // batch_size\n        assert num_return_sequences == 1\n        for i in range(batch_size * num_return_sequences):\n            batch_idx = i // num_return_sequences\n            seq_idx = i % num_return_sequences\n            inputs = output_ids[i][0][:input_lengths[batch_idx]].tolist()\n            input_text = tokenizer.decode(inputs)\n            print(f'Input [Text {batch_idx}]: \\\"{input_text}\\\"')\n            output_begin = input_lengths[batch_idx]\n            output_end = sequence_lengths[i][beam]\n            outputs = output_ids[i][beam][output_begin:output_end].tolist()\n            output_text = tokenizer.decode(outputs)\n            print(f'Output [Text {batch_idx}]: \\\"{output_text}\\\"')\n            logger.debug(str(outputs))\n\n\nif __name__ == '__main__':\n    args = parse_arguments()\n    main(args)\n"
  },
  {
    "path": "runtime/triton_trtllm/streaming_inference.py",
    "content": "import torch\nimport os\nimport argparse\nfrom datasets import load_dataset\nfrom torch.utils.data import DataLoader\nimport numpy as np\nimport torchaudio\nimport time\nfrom token2wav_dit import CosyVoice2_Token2Wav\nimport soundfile as sf\n\n\ndef collate_fn(batch):\n    ids, generated_speech_tokens_list, prompt_audios_list, prompt_audios_sample_rate = [], [], [], []\n    prompt_speech_tokens_list, prompt_text_list = [], []\n    for item in batch:\n        generated_speech_tokens_list.append(item['target_audio_cosy2_tokens'])\n        audio = torch.from_numpy(item['prompt_audio']['array']).float()\n        prompt_audios_list.append(audio)\n        prompt_audios_sample_rate.append(item['prompt_audio']['sampling_rate'])\n        ids.append(item['id'])\n        prompt_speech_tokens_list.append(item['prompt_audio_cosy2_tokens'])\n        prompt_text_list.append(item['prompt_text'])\n\n    return ids, generated_speech_tokens_list, prompt_audios_list, prompt_audios_sample_rate, prompt_speech_tokens_list, prompt_text_list\n\n\ndef get_args():\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"--enable-trt\", action=\"store_true\")\n    parser.add_argument(\"--model-dir\", type=str, default=\"./Step-Audio-2-mini/token2wav\")\n    parser.add_argument(\"--batch-size\", type=int, default=1)\n    parser.add_argument(\"--output-dir\", type=str, default=\"generated_wavs\")\n    parser.add_argument(\"--huggingface-dataset-split\", type=str, default=\"wenetspeech4tts\")\n    parser.add_argument(\"--dataset-name\", type=str, default=\"yuekai/seed_tts_cosy2\")\n    parser.add_argument(\"--strategy\", type=str, default=\"equal\", choices=[\"equal\", \"exponential\"])\n    return parser.parse_args()\n\n\nif __name__ == \"__main__\":\n    args = get_args()\n\n    if not os.path.exists(args.output_dir):\n        os.makedirs(args.output_dir)\n\n    dataset_name = args.dataset_name\n    dataset = load_dataset(dataset_name, split=args.huggingface_dataset_split, trust_remote_code=True)\n    data_loader = DataLoader(dataset, batch_size=args.batch_size, shuffle=False, collate_fn=collate_fn, num_workers=0)\n\n    token2wav_model = CosyVoice2_Token2Wav(model_dir=args.model_dir, enable_trt=args.enable_trt, streaming=True)\n\n    CHUNK_SIZE = 25\n    token_frame_rate = 25\n    OVERLAP_SIZE = 0\n\n    warmup_times = 3\n    for _ in range(warmup_times):\n        start_time = time.time()\n        total_forward_count = 0\n        for batch in data_loader:\n            tts_speech_list = []\n            ids, generated_speech_tokens_list, prompt_audios_list, prompt_audios_sample_rate, prompt_speech_tokens_list, prompt_text_list = batch\n\n            id, generated_speech_tokens, prompt_audio, prompt_audio_sample_rate = ids[0], generated_speech_tokens_list[0], prompt_audios_list[0], prompt_audios_sample_rate[0]\n\n            assert prompt_audio_sample_rate == 16000\n\n            prompt_text = prompt_text_list[0]\n            prompt_speech_tokens = prompt_speech_tokens_list[0]\n\n            semantic_token_ids_arr, token_offset = [], 0\n            flow_prompt_speech_token_len = len(prompt_speech_tokens)\n\n            buffer = generated_speech_tokens\n            output_wavs = []\n            chunk_index = 0\n            while True:\n                if args.strategy == \"equal\":\n                    this_chunk_size = CHUNK_SIZE\n                elif args.strategy == \"exponential\":\n                    this_chunk_size = token_frame_rate * (2 ** chunk_index)\n\n                if len(buffer) >= this_chunk_size + token2wav_model.flow.pre_lookahead_len:\n                    wavs = token2wav_model.forward_streaming(\n                        buffer[:this_chunk_size + token2wav_model.flow.pre_lookahead_len],\n                        False, request_id=id, speaker_id=f\"{id}\", prompt_audio=prompt_audio,\n                        prompt_audio_sample_rate=prompt_audio_sample_rate\n                    )\n                    buffer = buffer[this_chunk_size - OVERLAP_SIZE:]\n\n                    output_wavs.append(wavs)\n                    total_forward_count += 1\n                    chunk_index += 1\n\n                else:\n                    wavs = token2wav_model.forward_streaming(\n                        buffer, True, request_id=id, speaker_id=f\"{id}\",\n                        prompt_audio=prompt_audio, prompt_audio_sample_rate=prompt_audio_sample_rate\n                    )\n                    output_wavs.append(wavs)\n                    total_forward_count += 1\n                    # chunk_index += 1\n                    break\n\n            for i, wav in enumerate(output_wavs):\n                output_wavs[i] = wav.cpu().numpy().squeeze()\n\n            audios = output_wavs\n            reconstructed_audio = np.concatenate(audios)\n            sf.write(os.path.join(args.output_dir, f\"{id}.wav\"), reconstructed_audio, 24000, \"PCM_16\")\n\n        end_time = time.time()\n\n        if _ == 0:\n            token2wav_model.speaker_cache = {}\n            print(f\"Warmup time: {end_time - start_time} seconds\")\n            print(\"clear speaker cache\")\n        elif _ == 1:\n            print(f\"Cost time without speaker cache: {end_time - start_time} seconds\")\n        else:\n            print(f\"Cost time with speaker cache: {end_time - start_time} seconds\")\n            print(f\"Total flow matching forward calls: {total_forward_count}\")\n"
  },
  {
    "path": "runtime/triton_trtllm/token2wav.py",
    "content": "# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION.  All rights reserved.\n# SPDX-License-Identifier: Apache-2.0\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\"\"\" Example Usage\n    CUDA_VISIBLE_DEVICES=0 \\\n        python3 token2wav.py --enable-trt || exit 1\n\"\"\"\nimport torch\nfrom flashcosyvoice.modules.flow import CausalMaskedDiffWithXvec\nfrom flashcosyvoice.modules.hifigan import HiFTGenerator\nfrom flashcosyvoice.utils.audio import mel_spectrogram\nimport torchaudio.compliance.kaldi as kaldi\nimport onnxruntime\nimport s3tokenizer\nfrom torch.utils.data import DataLoader\nfrom datasets import load_dataset\nimport torchaudio\nimport os\nimport logging\nimport argparse\nimport queue\nimport time\n\n\ndef convert_onnx_to_trt(trt_model, trt_kwargs, onnx_model, fp16):\n    import tensorrt as trt\n    logging.info(\"Converting onnx to trt...\")\n    network_flags = 1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)\n    logger = trt.Logger(trt.Logger.INFO)\n    builder = trt.Builder(logger)\n    network = builder.create_network(network_flags)\n    parser = trt.OnnxParser(network, logger)\n    config = builder.create_builder_config()\n    # config.set_memory_pool_limit(trt.MemoryPoolType.WORKSPACE, 1 << 32)  # 4GB\n    if fp16:\n        config.set_flag(trt.BuilderFlag.FP16)\n    profile = builder.create_optimization_profile()\n    # load onnx model\n    with open(onnx_model, \"rb\") as f:\n        if not parser.parse(f.read()):\n            for error in range(parser.num_errors):\n                print(parser.get_error(error))\n            raise ValueError('failed to parse {}'.format(onnx_model))\n    # set input shapes\n    for i in range(len(trt_kwargs['input_names'])):\n        profile.set_shape(trt_kwargs['input_names'][i], trt_kwargs['min_shape'][i], trt_kwargs['opt_shape'][i], trt_kwargs['max_shape'][i])\n    tensor_dtype = trt.DataType.HALF if fp16 else trt.DataType.FLOAT\n    # set input and output data type\n    for i in range(network.num_inputs):\n        input_tensor = network.get_input(i)\n        input_tensor.dtype = tensor_dtype\n    for i in range(network.num_outputs):\n        output_tensor = network.get_output(i)\n        output_tensor.dtype = tensor_dtype\n    config.add_optimization_profile(profile)\n    engine_bytes = builder.build_serialized_network(network, config)\n    # save trt engine\n    with open(trt_model, \"wb\") as f:\n        f.write(engine_bytes)\n    logging.info(\"Succesfully convert onnx to trt...\")\n\n\nclass TrtContextWrapper:\n    def __init__(self, trt_engine, trt_concurrent=1, device='cuda:0'):\n        self.trt_context_pool = queue.Queue(maxsize=trt_concurrent)\n        self.trt_engine = trt_engine\n        self.device = device\n        for _ in range(trt_concurrent):\n            trt_context = trt_engine.create_execution_context()\n            trt_stream = torch.cuda.stream(torch.cuda.Stream(torch.device(device)))\n            assert trt_context is not None, 'failed to create trt context, maybe not enough CUDA memory, try reduce current trt concurrent {}'.format(trt_concurrent)\n            self.trt_context_pool.put([trt_context, trt_stream])\n        assert self.trt_context_pool.empty() is False, 'no avaialbe estimator context'\n\n    def acquire_estimator(self):\n        return self.trt_context_pool.get(), self.trt_engine\n\n    def release_estimator(self, context, stream):\n        self.trt_context_pool.put([context, stream])\n\n\nclass CosyVoice2_Token2Wav(torch.nn.Module):\n    def __init__(self, model_dir: str = \"./CosyVoice2-0.5B\", enable_trt: bool = False, device_id: int = 0):\n        super().__init__()\n        self.device_id = device_id\n        self.device = f\"cuda:{device_id}\"\n\n        self.flow = CausalMaskedDiffWithXvec()\n        self.flow.half()\n        self.flow.load_state_dict(torch.load(f\"{model_dir}/flow.pt\", map_location=\"cpu\", weights_only=True), strict=True)\n        self.flow.to(self.device).eval()\n\n        self.hift = HiFTGenerator()\n        hift_state_dict = {k.replace('generator.', ''): v for k, v in torch.load(f\"{model_dir}/hift.pt\", map_location=\"cpu\", weights_only=True).items()}\n        self.hift.load_state_dict(hift_state_dict, strict=True)\n        self.hift.to(self.device).eval()\n\n        option = onnxruntime.SessionOptions()\n        option.graph_optimization_level = onnxruntime.GraphOptimizationLevel.ORT_ENABLE_ALL\n        option.intra_op_num_threads = 1\n        self.spk_model = onnxruntime.InferenceSession(f\"{model_dir}/campplus.onnx\", sess_options=option, providers=[\"CPUExecutionProvider\"])\n\n        self.audio_tokenizer = s3tokenizer.load_model(f\"{model_dir}/speech_tokenizer_v2.onnx\").to(self.device).eval()\n\n        gpu = \"l20\"\n        if enable_trt:\n            self.load_trt(f'{model_dir}/flow.decoder.estimator.fp16.dynamic_batch.{gpu}.plan',\n                          f'{model_dir}/flow.decoder.estimator.fp32.dynamic_batch.onnx',\n                          1,\n                          True)\n            self.load_spk_trt(f'{model_dir}/campplus.{gpu}.fp32.trt',\n                              f'{model_dir}/campplus.onnx',\n                              1,\n                              False)\n\n    def forward_spk_embedding(self, spk_feat):\n        if isinstance(self.spk_model, onnxruntime.InferenceSession):\n            return self.spk_model.run(\n                None, {self.spk_model.get_inputs()[0].name: spk_feat.unsqueeze(dim=0).cpu().numpy()}\n            )[0].flatten().tolist()\n        else:\n            [spk_model, stream], trt_engine = self.spk_model.acquire_estimator()\n            # NOTE need to synchronize when switching stream\n            with torch.cuda.device(self.device_id):\n                torch.cuda.current_stream().synchronize()\n                spk_feat = spk_feat.unsqueeze(dim=0).to(self.device)\n                batch_size = spk_feat.size(0)\n\n                with stream:\n                    spk_model.set_input_shape('input', (batch_size, spk_feat.size(1), 80))\n                    output_tensor = torch.empty((batch_size, 192), device=spk_feat.device)\n\n                    data_ptrs = [spk_feat.contiguous().data_ptr(),\n                                 output_tensor.contiguous().data_ptr()]\n                    for i, j in enumerate(data_ptrs):\n\n                        spk_model.set_tensor_address(trt_engine.get_tensor_name(i), j)\n                    # run trt engine\n                    assert spk_model.execute_async_v3(torch.cuda.current_stream().cuda_stream) is True\n                    torch.cuda.current_stream().synchronize()\n                self.spk_model.release_estimator(spk_model, stream)\n\n            return output_tensor.cpu().numpy().flatten().tolist()\n\n    def load_spk_trt(self, spk_model, spk_onnx_model, trt_concurrent=1, fp16=True):\n        if not os.path.exists(spk_model) or os.path.getsize(spk_model) == 0:\n            trt_kwargs = self.get_spk_trt_kwargs()\n            convert_onnx_to_trt(spk_model, trt_kwargs, spk_onnx_model, fp16)\n        import tensorrt as trt\n        with open(spk_model, 'rb') as f:\n            spk_engine = trt.Runtime(trt.Logger(trt.Logger.INFO)).deserialize_cuda_engine(f.read())\n        assert spk_engine is not None, 'failed to load trt {}'.format(spk_model)\n        self.spk_model = TrtContextWrapper(spk_engine, trt_concurrent=trt_concurrent, device=self.device)\n\n    def get_spk_trt_kwargs(self):\n        min_shape = [(1, 4, 80)]\n        opt_shape = [(1, 500, 80)]\n        max_shape = [(1, 3000, 80)]\n        input_names = [\"input\"]\n        return {'min_shape': min_shape, 'opt_shape': opt_shape, 'max_shape': max_shape, 'input_names': input_names}\n\n    def load_trt(self, flow_decoder_estimator_model, flow_decoder_onnx_model, trt_concurrent=1, fp16=True):\n        assert torch.cuda.is_available(), 'tensorrt only supports gpu!'\n        if not os.path.exists(flow_decoder_estimator_model) or os.path.getsize(flow_decoder_estimator_model) == 0:\n            trt_kwargs = self.get_trt_kwargs_dynamic_batch(opt_bs=2, max_batch_size=16)\n            convert_onnx_to_trt(flow_decoder_estimator_model, trt_kwargs, flow_decoder_onnx_model, fp16)\n        del self.flow.decoder.estimator\n        import tensorrt as trt\n        with open(flow_decoder_estimator_model, 'rb') as f:\n            estimator_engine = trt.Runtime(trt.Logger(trt.Logger.INFO)).deserialize_cuda_engine(f.read())\n        assert estimator_engine is not None, 'failed to load trt {}'.format(flow_decoder_estimator_model)\n        self.flow.decoder.estimator = TrtContextWrapper(estimator_engine, trt_concurrent=trt_concurrent, device=self.device)\n\n    def get_trt_kwargs_dynamic_batch(self, opt_bs=2, max_batch_size=64):\n        min_shape = [(2, 80, 4), (2, 1, 4), (2, 80, 4), (2, 80, 4), (2,), (2, 80)]\n        opt_shape = [(opt_bs * 2, 80, 500), (opt_bs * 2, 1, 500), (opt_bs * 2, 80, 500), (opt_bs * 2, 80, 500), (opt_bs * 2,), (opt_bs * 2, 80)]\n        max_shape = [(max_batch_size * 2, 80, 3000), (max_batch_size * 2, 1, 3000), (max_batch_size * 2, 80, 3000), (max_batch_size * 2, 80, 3000), (max_batch_size * 2,),\n                     (max_batch_size * 2, 80)]\n        input_names = [\"x\", \"mask\", \"mu\", \"cond\", \"t\", \"spks\"]\n        return {'min_shape': min_shape, 'opt_shape': opt_shape, 'max_shape': max_shape, 'input_names': input_names}\n\n    def prompt_audio_tokenization(self, prompt_audios_list: list[torch.Tensor]) -> list[list[int]]:\n        prompt_speech_tokens_list, prompt_speech_mels_list = [], []\n        for audio in prompt_audios_list:\n            assert len(audio.shape) == 1\n            log_mel = s3tokenizer.log_mel_spectrogram(audio)  # [num_mels, T]\n            prompt_speech_mels_list.append(log_mel)\n        prompt_mels_for_llm, prompt_mels_lens_for_llm = s3tokenizer.padding(prompt_speech_mels_list)\n        prompt_speech_tokens, prompt_speech_tokens_lens = self.audio_tokenizer.quantize(\n            prompt_mels_for_llm.to(self.device), prompt_mels_lens_for_llm.to(self.device)\n        )\n        for i in range(len(prompt_speech_tokens)):\n            speech_tokens_i = prompt_speech_tokens[i, :prompt_speech_tokens_lens[i].item()].tolist()\n            prompt_speech_tokens_list.append(speech_tokens_i)\n        return prompt_speech_tokens_list\n\n    def get_spk_emb(self, prompt_audios_list: list[torch.Tensor]) -> torch.Tensor:\n        spk_emb_for_flow = []\n        for audio in prompt_audios_list:\n            assert len(audio.shape) == 1\n            spk_feat = kaldi.fbank(audio.unsqueeze(0), num_mel_bins=80, dither=0, sample_frequency=16000)\n            spk_feat = spk_feat - spk_feat.mean(dim=0, keepdim=True)\n            spk_emb = self.forward_spk_embedding(spk_feat)\n\n            spk_emb_for_flow.append(spk_emb)\n        spk_emb_for_flow = torch.tensor(spk_emb_for_flow)\n        return spk_emb_for_flow\n\n    def get_prompt_mels(self, prompt_audios_list: list[torch.Tensor], prompt_audios_sample_rate: list[int]):\n        prompt_mels_for_flow = []\n        prompt_mels_lens_for_flow = []\n        for audio, sample_rate in zip(prompt_audios_list, prompt_audios_sample_rate):\n            assert len(audio.shape) == 1\n            audio = audio.unsqueeze(0)\n            if sample_rate != 24000:\n                audio = torchaudio.transforms.Resample(orig_freq=sample_rate, new_freq=24000)(audio)\n            mel = mel_spectrogram(audio).transpose(1, 2).squeeze(0)  # [T, num_mels]\n            mel_len = mel.shape[0]\n            prompt_mels_for_flow.append(mel)\n            prompt_mels_lens_for_flow.append(mel_len)\n        prompt_mels_for_flow = torch.nn.utils.rnn.pad_sequence(prompt_mels_for_flow, batch_first=True, padding_value=0)  # [B, T', num_mels=80]\n        prompt_mels_lens_for_flow = torch.tensor(prompt_mels_lens_for_flow)\n        return prompt_mels_for_flow, prompt_mels_lens_for_flow\n\n    def forward_flow(self, prompt_speech_tokens_list: list[list[int]], generated_speech_tokens_list: list[list[int]], prompt_mels_for_flow: torch.Tensor,\n                     prompt_mels_lens_for_flow: torch.Tensor, spk_emb_for_flow: torch.Tensor):\n        batch_size = prompt_mels_for_flow.shape[0]\n        flow_inputs = []\n        flow_inputs_lens = []\n        for prompt_speech_tokens, generated_speech_tokens in zip(prompt_speech_tokens_list, generated_speech_tokens_list):\n            flow_inputs.append(torch.tensor(prompt_speech_tokens + generated_speech_tokens))\n            flow_inputs_lens.append(len(prompt_speech_tokens) + len(generated_speech_tokens))\n\n        flow_inputs = torch.nn.utils.rnn.pad_sequence(flow_inputs, batch_first=True, padding_value=0)\n        flow_inputs_lens = torch.tensor(flow_inputs_lens)\n\n        with torch.amp.autocast(self.device, dtype=torch.float16):\n            generated_mels, generated_mels_lens = self.flow(\n                flow_inputs.to(self.device), flow_inputs_lens.to(self.device),\n                prompt_mels_for_flow.to(self.device), prompt_mels_lens_for_flow.to(self.device), spk_emb_for_flow.to(self.device),\n                streaming=False, finalize=True\n            )\n\n        return generated_mels, generated_mels_lens\n\n    def forward_hift(self, generated_mels: torch.Tensor, generated_mels_lens: torch.Tensor, prompt_mels_lens_for_flow: torch.Tensor):\n        batch_size = generated_mels.shape[0]\n        generated_wavs = []\n        for i in range(batch_size):\n            mel = generated_mels[i, :, prompt_mels_lens_for_flow[i].item():generated_mels_lens[i].item()].unsqueeze(0)\n            wav, _ = self.hift(speech_feat=mel)\n            generated_wavs.append(wav)\n        return generated_wavs\n\n    @torch.inference_mode()\n    def forward(\n        self, generated_speech_tokens_list: list[list[int]], prompt_audios_list: list[torch.Tensor], prompt_audios_sample_rate: list[int]\n    ):\n        # assert all item in prompt_audios_sample_rate is 16000\n        assert all(sample_rate == 16000 for sample_rate in prompt_audios_sample_rate)\n\n        prompt_speech_tokens_list = self.prompt_audio_tokenization(prompt_audios_list)\n\n        prompt_mels_for_flow, prompt_mels_lens_for_flow = self.get_prompt_mels(prompt_audios_list, prompt_audios_sample_rate)\n\n        spk_emb_for_flow = self.get_spk_emb(prompt_audios_list)\n\n        generated_mels, generated_mels_lens = self.forward_flow(\n            prompt_speech_tokens_list, generated_speech_tokens_list, prompt_mels_for_flow, prompt_mels_lens_for_flow, spk_emb_for_flow)\n\n        generated_wavs = self.forward_hift(generated_mels, generated_mels_lens, prompt_mels_lens_for_flow)\n\n        return generated_wavs\n\n\ndef collate_fn(batch):\n    ids, generated_speech_tokens_list, prompt_audios_list, prompt_audios_sample_rate = [], [], [], []\n    for _, item in enumerate(batch):\n        generated_speech_tokens_list.append(item['target_audio_cosy2_tokens'])\n        audio = torch.from_numpy(item['prompt_audio']['array']).float()\n        prompt_audios_list.append(audio)\n        prompt_audios_sample_rate.append(item['prompt_audio']['sampling_rate'])\n        ids.append(item['id'])\n\n    return ids, generated_speech_tokens_list, prompt_audios_list, prompt_audios_sample_rate\n\n\ndef get_args():\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"--enable-trt\", action=\"store_true\")\n    parser.add_argument(\"--model-dir\", type=str, default=\"./CosyVoice2-0.5B\")\n    parser.add_argument(\"--batch-size\", type=int, default=4)\n    parser.add_argument(\"--output-dir\", type=str, default=\"generated_wavs\")\n    parser.add_argument(\"--huggingface-dataset-split\", type=str, default=\"wenetspeech4tts\")\n    parser.add_argument(\"--warmup\", type=int, default=3, help=\"Number of warmup epochs, performance statistics will only be collected from the last epoch\")\n    return parser.parse_args()\n\n\nif __name__ == \"__main__\":\n    args = get_args()\n    model = CosyVoice2_Token2Wav(model_dir=args.model_dir, enable_trt=args.enable_trt)\n    # mkdir output_dir if not exists\n    if not os.path.exists(args.output_dir):\n        os.makedirs(args.output_dir)\n    dataset_name = \"yuekai/seed_tts_cosy2\"\n\n    dataset = load_dataset(dataset_name, split=args.huggingface_dataset_split, trust_remote_code=True)\n\n    data_loader = DataLoader(dataset, batch_size=args.batch_size, shuffle=False, collate_fn=collate_fn, num_workers=0)\n\n    for _ in range(args.warmup):\n        start_time = time.time()\n\n        for batch in data_loader:\n            ids, generated_speech_tokens_list, prompt_audios_list, prompt_audios_sample_rate = batch\n\n            generated_wavs = model(generated_speech_tokens_list, prompt_audios_list, prompt_audios_sample_rate)\n\n            for id, wav in zip(ids, generated_wavs):\n                torchaudio.save(f\"{args.output_dir}/{id}.wav\", wav.cpu(), 24000)\n\n        end_time = time.time()\n        epoch_time = end_time - start_time\n        print(f\"Measurement epoch time taken: {epoch_time:.4f} seconds\")\n"
  },
  {
    "path": "runtime/triton_trtllm/token2wav_cosyvoice3.py",
    "content": "\"\"\" Example Usage\n    CUDA_VISIBLE_DEVICES=0 \\\n        python3 token2wav_cosyvoice3.py --enable-trt || exit 1\n\"\"\"\nimport torch\nimport torchaudio\nimport torchaudio.compliance.kaldi as kaldi\nimport onnxruntime\nimport s3tokenizer\nimport os\nimport logging\nimport argparse\nimport queue\nimport time\nimport numpy as np\nfrom functools import partial\nfrom hyperpyyaml import load_hyperpyyaml\nfrom matcha.utils.audio import mel_spectrogram as matcha_mel_spectrogram\nfrom torch.utils.data import DataLoader\nfrom datasets import load_dataset\n\nlogging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')\nlogger = logging.getLogger(__name__)\n\n# CosyVoice3 mel params from cosyvoice3.yaml (fmax=None, NOT 8000)\nmel_spectrogram = partial(matcha_mel_spectrogram,\n    n_fft=1920, num_mels=80, sampling_rate=24000,\n    hop_size=480, win_size=1920, fmin=0, fmax=None, center=False)\n\n\ndef convert_onnx_to_trt(trt_model, trt_kwargs, onnx_model, fp16, autocast_mode=False):\n    import tensorrt as trt\n    logging.info(\"Converting onnx to trt...\")\n    if autocast_mode:\n        network_flags = 1 << int(trt.NetworkDefinitionCreationFlag.STRONGLY_TYPED)\n    else:\n        network_flags = 1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)\n    logger = trt.Logger(trt.Logger.INFO)\n    builder = trt.Builder(logger)\n    network = builder.create_network(network_flags)\n    parser = trt.OnnxParser(network, logger)\n    config = builder.create_builder_config()\n    config.set_memory_pool_limit(trt.MemoryPoolType.WORKSPACE, 1 << 32)  # 4GB\n    if not autocast_mode:\n        if fp16:\n            config.set_flag(trt.BuilderFlag.FP16)\n    profile = builder.create_optimization_profile()\n    # load onnx model\n    with open(onnx_model, \"rb\") as f:\n        if not parser.parse(f.read()):\n            for error in range(parser.num_errors):\n                print(parser.get_error(error))\n            raise ValueError('failed to parse {}'.format(onnx_model))\n    # set input shapes\n    for i in range(len(trt_kwargs['input_names'])):\n        profile.set_shape(trt_kwargs['input_names'][i], trt_kwargs['min_shape'][i], trt_kwargs['opt_shape'][i], trt_kwargs['max_shape'][i])\n    tensor_dtype = trt.DataType.HALF if fp16 else trt.DataType.FLOAT\n    # set input and output data type\n    for i in range(network.num_inputs):\n        input_tensor = network.get_input(i)\n        input_tensor.dtype = tensor_dtype\n    for i in range(network.num_outputs):\n        output_tensor = network.get_output(i)\n        output_tensor.dtype = tensor_dtype\n    config.add_optimization_profile(profile)\n    engine_bytes = builder.build_serialized_network(network, config)\n    # save trt engine\n    with open(trt_model, \"wb\") as f:\n        f.write(engine_bytes)\n    logging.info(\"Succesfully convert onnx to trt...\")\n\n\nclass TrtContextWrapper:\n    def __init__(self, trt_engine, trt_concurrent=1, device='cuda:0'):\n        self.trt_context_pool = queue.Queue(maxsize=trt_concurrent)\n        self.trt_engine = trt_engine\n        self.device = device\n        for _ in range(trt_concurrent):\n            trt_context = trt_engine.create_execution_context()\n            trt_stream = torch.cuda.stream(torch.cuda.Stream(torch.device(device)))\n            assert trt_context is not None, 'failed to create trt context, maybe not enough CUDA memory, try reduce current trt concurrent {}'.format(trt_concurrent)\n            self.trt_context_pool.put([trt_context, trt_stream])\n        assert self.trt_context_pool.empty() is False, 'no avaialbe estimator context'\n\n    def acquire_estimator(self):\n        return self.trt_context_pool.get(), self.trt_engine\n\n    def release_estimator(self, context, stream):\n        self.trt_context_pool.put([context, stream])\n\n\nclass CosyVoice3_Token2Wav(torch.nn.Module):\n    def __init__(self, model_dir, enable_trt=False, device_id=0, autocast_mode=True, streaming=False):\n        super().__init__()\n        self.device_id = device_id\n        self.device = f\"cuda:{device_id}\"\n        self.autocast_mode = autocast_mode\n        self.streaming = streaming\n\n        # Load flow and hift from cosyvoice3.yaml\n        with open(f\"{model_dir}/cosyvoice3.yaml\", \"r\") as f:\n            configs = load_hyperpyyaml(f, overrides={\n                'qwen_pretrain_path': os.path.join(model_dir, 'CosyVoice-BlankEN')\n            })\n        self.flow = configs['flow']\n        self.flow.load_state_dict(\n            torch.load(f\"{model_dir}/flow.pt\", map_location=\"cpu\", weights_only=True),\n            strict=True\n        )\n        self.flow.to(self.device).eval()\n\n        self.hift = configs['hift']\n        hift_state_dict = {\n            k.replace('generator.', ''): v\n            for k, v in torch.load(f\"{model_dir}/hift.pt\", map_location=\"cpu\", weights_only=True).items()\n        }\n        self.hift.load_state_dict(hift_state_dict, strict=True)\n        self.hift.to(self.device).eval()\n\n        # Speaker embedding model (campplus)\n        option = onnxruntime.SessionOptions()\n        option.graph_optimization_level = onnxruntime.GraphOptimizationLevel.ORT_ENABLE_ALL\n        option.intra_op_num_threads = 1\n        self.spk_model = onnxruntime.InferenceSession(\n            f\"{model_dir}/campplus.onnx\", sess_options=option,\n            providers=[\"CPUExecutionProvider\"]\n        )\n\n        # Audio tokenizer v3\n        self.audio_tokenizer = s3tokenizer.load_model(\n            f\"{model_dir}/speech_tokenizer_v3.onnx\"\n        ).to(self.device).eval()\n\n        self.fp16 = enable_trt\n        if enable_trt:\n            self.flow.half()\n            self.load_trt(model_dir)\n            self.load_spk_trt(model_dir)\n\n    def load_trt(self, model_dir, trt_concurrent=1):\n        streaming_prefix = 'streaming.' if self.streaming else ''\n        if self.autocast_mode:\n            onnx_path = f'{model_dir}/flow.decoder.estimator.{streaming_prefix}autocast_fp16.onnx'\n            trt_path = f'{model_dir}/flow.decoder.estimator.{streaming_prefix}autocast_fp16.{self.device_id}.plan'\n        else:\n            onnx_path = f'{model_dir}/flow.decoder.estimator.{streaming_prefix}fp32.onnx'\n            trt_path = f'{model_dir}/flow.decoder.estimator.{streaming_prefix}fp32.{self.device_id}.plan'\n\n        if not os.path.exists(trt_path) or os.path.getsize(trt_path) == 0:\n            trt_kwargs = self.get_trt_kwargs()\n            convert_onnx_to_trt(trt_path, trt_kwargs, onnx_path,\n                               fp16=True, autocast_mode=self.autocast_mode)\n        del self.flow.decoder.estimator\n        import tensorrt as trt\n        with open(trt_path, 'rb') as f:\n            estimator_engine = trt.Runtime(trt.Logger(trt.Logger.INFO)).deserialize_cuda_engine(f.read())\n        assert estimator_engine is not None, 'failed to load trt {}'.format(trt_path)\n        self.flow.decoder.estimator = TrtContextWrapper(\n            estimator_engine, trt_concurrent=trt_concurrent, device=self.device\n        )\n\n    def get_trt_kwargs(self):\n        # CosyVoice3 DiT estimator has 6 inputs: x, mask, mu, t, spks, cond\n        # Only inputs with dynamic dims need optimization profiles.\n        # t=[2(fixed)] and spks=[2(fixed),80(fixed)] are fully fixed, TRT infers from ONNX.\n        min_shape = [(2, 80, 4), (2, 1, 4), (2, 80, 4), (2, 80, 4)]\n        opt_shape = [(2, 80, 500), (2, 1, 500), (2, 80, 500), (2, 80, 500)]\n        max_shape = [(2, 80, 3000), (2, 1, 3000), (2, 80, 3000), (2, 80, 3000)]\n        input_names = [\"x\", \"mask\", \"mu\", \"cond\"]\n        return {'min_shape': min_shape, 'opt_shape': opt_shape,\n                'max_shape': max_shape, 'input_names': input_names}\n\n    def load_spk_trt(self, model_dir, trt_concurrent=1, fp16=False):\n        spk_trt_path = f'{model_dir}/campplus.{self.device_id}.fp32.plan'\n        spk_onnx_path = f'{model_dir}/campplus.onnx'\n        if not os.path.exists(spk_trt_path) or os.path.getsize(spk_trt_path) == 0:\n            trt_kwargs = self.get_spk_trt_kwargs()\n            convert_onnx_to_trt(spk_trt_path, trt_kwargs, spk_onnx_path, fp16)\n        import tensorrt as trt\n        with open(spk_trt_path, 'rb') as f:\n            spk_engine = trt.Runtime(trt.Logger(trt.Logger.INFO)).deserialize_cuda_engine(f.read())\n        assert spk_engine is not None, 'failed to load trt {}'.format(spk_trt_path)\n        self.spk_model = TrtContextWrapper(spk_engine, trt_concurrent=trt_concurrent, device=self.device)\n\n    def get_spk_trt_kwargs(self):\n        min_shape = [(1, 4, 80)]\n        opt_shape = [(1, 500, 80)]\n        max_shape = [(1, 3000, 80)]\n        input_names = [\"input\"]\n        return {'min_shape': min_shape, 'opt_shape': opt_shape,\n                'max_shape': max_shape, 'input_names': input_names}\n\n    def forward_spk_embedding(self, spk_feat):\n        if isinstance(self.spk_model, onnxruntime.InferenceSession):\n            return self.spk_model.run(\n                None, {self.spk_model.get_inputs()[0].name: spk_feat.unsqueeze(dim=0).cpu().numpy()}\n            )[0].flatten().tolist()\n        else:\n            [spk_model, stream], trt_engine = self.spk_model.acquire_estimator()\n            with torch.cuda.device(self.device_id):\n                torch.cuda.current_stream().synchronize()\n                spk_feat = spk_feat.unsqueeze(dim=0).to(self.device)\n                batch_size = spk_feat.size(0)\n\n                with stream:\n                    spk_model.set_input_shape('input', (batch_size, spk_feat.size(1), 80))\n                    output_tensor = torch.empty((batch_size, 192), device=spk_feat.device)\n\n                    data_ptrs = [spk_feat.contiguous().data_ptr(),\n                                 output_tensor.contiguous().data_ptr()]\n                    for i, j in enumerate(data_ptrs):\n                        spk_model.set_tensor_address(trt_engine.get_tensor_name(i), j)\n                    assert spk_model.execute_async_v3(torch.cuda.current_stream().cuda_stream) is True\n                    torch.cuda.current_stream().synchronize()\n                self.spk_model.release_estimator(spk_model, stream)\n\n            return output_tensor.cpu().numpy().flatten().tolist()\n\n    def prompt_audio_tokenization(self, prompt_audios_list):\n        prompt_speech_tokens_list, prompt_speech_mels_list = [], []\n        for audio in prompt_audios_list:\n            assert len(audio.shape) == 1\n            log_mel = s3tokenizer.log_mel_spectrogram(audio)\n            prompt_speech_mels_list.append(log_mel)\n        prompt_mels_for_llm, prompt_mels_lens_for_llm = s3tokenizer.padding(prompt_speech_mels_list)\n        prompt_speech_tokens, prompt_speech_tokens_lens = self.audio_tokenizer.quantize(\n            prompt_mels_for_llm.to(self.device), prompt_mels_lens_for_llm.to(self.device)\n        )\n        for i in range(len(prompt_speech_tokens)):\n            speech_tokens_i = prompt_speech_tokens[i, :prompt_speech_tokens_lens[i].item()].tolist()\n            prompt_speech_tokens_list.append(speech_tokens_i)\n        return prompt_speech_tokens_list\n\n    def get_spk_emb(self, prompt_audios_list):\n        spk_emb_for_flow = []\n        for audio in prompt_audios_list:\n            assert len(audio.shape) == 1\n            spk_feat = kaldi.fbank(audio.unsqueeze(0), num_mel_bins=80, dither=0, sample_frequency=16000)\n            spk_feat = spk_feat - spk_feat.mean(dim=0, keepdim=True)\n            spk_emb = self.forward_spk_embedding(spk_feat)\n            spk_emb_for_flow.append(spk_emb)\n        spk_emb_for_flow = torch.tensor(spk_emb_for_flow)\n        return spk_emb_for_flow\n\n    def get_prompt_mels(self, prompt_audios_list, prompt_audios_sample_rate):\n        prompt_mels_for_flow = []\n        prompt_mels_lens_for_flow = []\n        for audio, sample_rate in zip(prompt_audios_list, prompt_audios_sample_rate):\n            assert len(audio.shape) == 1\n            audio = audio.unsqueeze(0)\n            if sample_rate != 24000:\n                audio = torchaudio.transforms.Resample(\n                    orig_freq=sample_rate, new_freq=24000)(audio)\n            # CosyVoice3: fmax=None (Nyquist), matching cosyvoice3.yaml\n            mel = mel_spectrogram(audio).transpose(1, 2).squeeze(0)  # [T, 80]\n            prompt_mels_for_flow.append(mel)\n            prompt_mels_lens_for_flow.append(mel.shape[0])\n        prompt_mels_for_flow = torch.nn.utils.rnn.pad_sequence(\n            prompt_mels_for_flow, batch_first=True, padding_value=0)  # [B, T', 80]\n        prompt_mels_lens_for_flow = torch.tensor(prompt_mels_lens_for_flow)\n        return prompt_mels_for_flow, prompt_mels_lens_for_flow\n\n    def forward_flow(self, prompt_speech_tokens_list, generated_speech_tokens_list,\n                     prompt_mels_for_flow, prompt_mels_lens_for_flow,\n                     spk_emb_for_flow):\n        batch_size = len(generated_speech_tokens_list)\n        generated_mels_list = []\n\n        # CausalMaskedDiffWithDiT.inference asserts batch_size==1, so iterate per-sample\n        for i in range(batch_size):\n            token = torch.tensor([generated_speech_tokens_list[i]]).to(self.device)\n            token_len = torch.tensor([len(generated_speech_tokens_list[i])]).to(self.device)\n            prompt_token = torch.tensor([prompt_speech_tokens_list[i]]).to(self.device)\n            prompt_token_len = torch.tensor([len(prompt_speech_tokens_list[i])]).to(self.device)\n            prompt_feat = prompt_mels_for_flow[i:i+1, :prompt_mels_lens_for_flow[i]].to(self.device)\n            prompt_feat_len = prompt_mels_lens_for_flow[i:i+1].to(self.device)\n            embedding = spk_emb_for_flow[i:i+1].to(self.device)\n\n            # CausalMaskedDiffWithDiT.inference returns mel already without prompt portion\n            with torch.cuda.amp.autocast(self.fp16):\n                mel, _ = self.flow.inference(\n                    token=token,\n                    token_len=token_len,\n                    prompt_token=prompt_token,\n                    prompt_token_len=prompt_token_len,\n                    prompt_feat=prompt_feat,\n                    prompt_feat_len=prompt_feat_len,\n                    embedding=embedding,\n                    streaming=False,\n                    finalize=True\n                )\n            generated_mels_list.append(mel)\n\n        return generated_mels_list\n\n    def forward_hift(self, generated_mels_list):\n        generated_wavs = []\n        for mel in generated_mels_list:\n            # CausalHiFTGenerator.inference with finalize=True\n            wav, _ = self.hift.inference(speech_feat=mel, finalize=True)\n            generated_wavs.append(wav)\n        return generated_wavs\n\n    def forward_stream(self, generated_speech_tokens, prompt_speech_tokens,\n                        prompt_feat, embedding,\n                        token_hop_len=25, stream_scale_factor=2, token_max_hop_len=100):\n        \"\"\"Streaming token2wav for a single sample: process tokens in chunks.\"\"\"\n        prompt_token = torch.tensor([prompt_speech_tokens]).to(self.device)\n        prompt_token_len = torch.tensor([len(prompt_speech_tokens)]).to(self.device)\n        prompt_feat = prompt_feat.to(self.device)\n        prompt_feat_len = torch.tensor([prompt_feat.shape[1]]).to(self.device)\n        embedding = embedding.to(self.device)\n\n        pre_lookahead_len = self.flow.pre_lookahead_len\n        token_mel_ratio = self.flow.token_mel_ratio\n\n        # Align first chunk with hop_len boundary\n        prompt_token_pad = int(\n            np.ceil(prompt_token.shape[1] / token_hop_len) * token_hop_len\n            - prompt_token.shape[1]\n        )\n\n        total_tokens = len(generated_speech_tokens)\n        token_offset = 0\n        current_hop = token_hop_len\n        hift_cache_mel = None\n        speech_offset = 0\n        audio_chunks = []\n\n        while token_offset < total_tokens:\n            this_hop = current_hop + prompt_token_pad if token_offset == 0 else current_hop\n            remaining = total_tokens - token_offset\n\n            if remaining >= this_hop + pre_lookahead_len:\n                end_idx = token_offset + this_hop + pre_lookahead_len\n                this_token = torch.tensor([generated_speech_tokens[:end_idx]]).to(self.device)\n                finalize = False\n            else:\n                this_token = torch.tensor([generated_speech_tokens]).to(self.device)\n                finalize = True\n\n            with torch.cuda.amp.autocast(self.fp16):\n                mel, _ = self.flow.inference(\n                    token=this_token,\n                    token_len=torch.tensor([this_token.shape[1]]).to(self.device),\n                    prompt_token=prompt_token,\n                    prompt_token_len=prompt_token_len,\n                    prompt_feat=prompt_feat,\n                    prompt_feat_len=prompt_feat_len,\n                    embedding=embedding,\n                    streaming=True,\n                    finalize=finalize,\n                )\n\n            mel = mel[:, :, token_offset * token_mel_ratio:]\n\n            if hift_cache_mel is not None:\n                mel = torch.concat([hift_cache_mel, mel], dim=2)\n            hift_cache_mel = mel\n\n            tts_speech, _ = self.hift.inference(speech_feat=mel, finalize=finalize)\n            tts_speech = tts_speech[:, speech_offset:]\n            speech_offset += tts_speech.shape[1]\n\n            logger.info(f\"[stream] token_offset={token_offset}, this_hop={this_hop}, \"\n                        f\"mel_shape={mel.shape}, speech_len={tts_speech.shape[1]}, finalize={finalize}\")\n\n            audio_chunks.append(tts_speech)\n\n            token_offset += this_hop\n            if not finalize:\n                current_hop = min(token_max_hop_len, current_hop * stream_scale_factor)\n            else:\n                break\n\n        return torch.cat(audio_chunks, dim=1)\n\n    @torch.inference_mode()\n    def forward(self, generated_speech_tokens_list, prompt_audios_list,\n                prompt_audios_sample_rate, streaming=False):\n        assert all(sr == 16000 for sr in prompt_audios_sample_rate)\n\n        prompt_speech_tokens_list = self.prompt_audio_tokenization(prompt_audios_list)\n        prompt_mels_for_flow, prompt_mels_lens_for_flow = self.get_prompt_mels(\n            prompt_audios_list, prompt_audios_sample_rate)\n        spk_emb_for_flow = self.get_spk_emb(prompt_audios_list)\n\n        # Align prompt_speech_feat and prompt_speech_token to exact 2:1 ratio\n        # (matches frontend.frontend_zero_shot logic)\n        for i in range(len(prompt_speech_tokens_list)):\n            token_len = min(int(prompt_mels_lens_for_flow[i].item() / 2),\n                            len(prompt_speech_tokens_list[i]))\n            prompt_speech_tokens_list[i] = prompt_speech_tokens_list[i][:token_len]\n            prompt_mels_lens_for_flow[i] = 2 * token_len\n\n        if streaming:\n            generated_wavs = []\n            for i in range(len(generated_speech_tokens_list)):\n                prompt_feat = prompt_mels_for_flow[i:i+1, :prompt_mels_lens_for_flow[i]]\n                embedding = spk_emb_for_flow[i:i+1]\n                wav = self.forward_stream(\n                    generated_speech_tokens_list[i],\n                    prompt_speech_tokens_list[i],\n                    prompt_feat, embedding,\n                )\n                generated_wavs.append(wav)\n            return generated_wavs\n\n        generated_mels_list = self.forward_flow(\n            prompt_speech_tokens_list, generated_speech_tokens_list,\n            prompt_mels_for_flow, prompt_mels_lens_for_flow, spk_emb_for_flow)\n\n        generated_wavs = self.forward_hift(generated_mels_list)\n        return generated_wavs\n"
  },
  {
    "path": "tools/extract_embedding.py",
    "content": "#!/usr/bin/env python3\n# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu)\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.\nimport argparse\nfrom concurrent.futures import ThreadPoolExecutor, as_completed\nimport onnxruntime\nimport torch\nimport torchaudio\nimport torchaudio.compliance.kaldi as kaldi\nfrom tqdm import tqdm\n\n\ndef single_job(utt):\n    audio, sample_rate = torchaudio.load(utt2wav[utt])\n    if sample_rate != 16000:\n        audio = torchaudio.transforms.Resample(orig_freq=sample_rate, new_freq=16000)(audio)\n    feat = kaldi.fbank(audio,\n                       num_mel_bins=80,\n                       dither=0,\n                       sample_frequency=16000)\n    feat = feat - feat.mean(dim=0, keepdim=True)\n    embedding = ort_session.run(None, {ort_session.get_inputs()[0].name: feat.unsqueeze(dim=0).cpu().numpy()})[0].flatten().tolist()\n    return utt, embedding\n\n\ndef main(args):\n    all_task = [executor.submit(single_job, utt) for utt in utt2wav.keys()]\n    utt2embedding, spk2embedding = {}, {}\n    for future in tqdm(as_completed(all_task)):\n        utt, embedding = future.result()\n        utt2embedding[utt] = embedding\n        spk = utt2spk[utt]\n        if spk not in spk2embedding:\n            spk2embedding[spk] = []\n        spk2embedding[spk].append(embedding)\n    for k, v in spk2embedding.items():\n        spk2embedding[k] = torch.tensor(v).mean(dim=0).tolist()\n    torch.save(utt2embedding, \"{}/utt2embedding.pt\".format(args.dir))\n    torch.save(spk2embedding, \"{}/spk2embedding.pt\".format(args.dir))\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"--dir\", type=str)\n    parser.add_argument(\"--onnx_path\", type=str)\n    parser.add_argument(\"--num_thread\", type=int, default=8)\n    args = parser.parse_args()\n\n    utt2wav, utt2spk = {}, {}\n    with open('{}/wav.scp'.format(args.dir)) as f:\n        for l in f:\n            l = l.replace('\\n', '').split()\n            utt2wav[l[0]] = l[1]\n    with open('{}/utt2spk'.format(args.dir)) as f:\n        for l in f:\n            l = l.replace('\\n', '').split()\n            utt2spk[l[0]] = l[1]\n\n    option = onnxruntime.SessionOptions()\n    option.graph_optimization_level = onnxruntime.GraphOptimizationLevel.ORT_ENABLE_ALL\n    option.intra_op_num_threads = 1\n    providers = [\"CPUExecutionProvider\"]\n    ort_session = onnxruntime.InferenceSession(args.onnx_path, sess_options=option, providers=providers)\n    executor = ThreadPoolExecutor(max_workers=args.num_thread)\n\n    main(args)\n"
  },
  {
    "path": "tools/extract_speech_token.py",
    "content": "#!/usr/bin/env python3\n# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu)\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.\nimport argparse\nfrom concurrent.futures import ThreadPoolExecutor, as_completed\nimport logging\nimport torch\nfrom tqdm import tqdm\nimport onnxruntime\nimport numpy as np\nimport torchaudio\nimport whisper\n\n\ndef single_job(utt):\n    audio, sample_rate = torchaudio.load(utt2wav[utt], backend='soundfile')\n    if sample_rate != 16000:\n        audio = torchaudio.transforms.Resample(orig_freq=sample_rate, new_freq=16000)(audio)\n    # Convert audio to mono\n    if audio.shape[0] > 1:\n        audio = audio.mean(dim=0, keepdim=True)\n    if audio.shape[1] / 16000 > 30:\n        logging.warning('do not support extract speech token for audio longer than 30s')\n        speech_token = []\n    else:\n        feat = whisper.log_mel_spectrogram(audio, n_mels=128)\n        speech_token = ort_session.run(None, {ort_session.get_inputs()[0].name: feat.detach().cpu().numpy(),\n                                              ort_session.get_inputs()[1].name: np.array([feat.shape[2]], dtype=np.int32)})[0].flatten().tolist()\n    return utt, speech_token\n\n\ndef main(args):\n    all_task = [executor.submit(single_job, utt) for utt in utt2wav.keys()]\n    utt2speech_token = {}\n    for future in tqdm(as_completed(all_task)):\n        utt, speech_token = future.result()\n        utt2speech_token[utt] = speech_token\n    torch.save(utt2speech_token, '{}/utt2speech_token.pt'.format(args.dir))\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"--dir\", type=str)\n    parser.add_argument(\"--onnx_path\", type=str)\n    parser.add_argument(\"--num_thread\", type=int, default=8)\n    args = parser.parse_args()\n\n    utt2wav = {}\n    with open('{}/wav.scp'.format(args.dir)) as f:\n        for l in f:\n            l = l.replace('\\n', '').split()\n            utt2wav[l[0]] = l[1]\n\n    option = onnxruntime.SessionOptions()\n    option.graph_optimization_level = onnxruntime.GraphOptimizationLevel.ORT_ENABLE_ALL\n    option.intra_op_num_threads = 1\n    providers = [\"CUDAExecutionProvider\"]\n    ort_session = onnxruntime.InferenceSession(args.onnx_path, sess_options=option, providers=providers)\n    executor = ThreadPoolExecutor(max_workers=args.num_thread)\n\n    main(args)\n"
  },
  {
    "path": "tools/make_parquet_list.py",
    "content": "#!/usr/bin/env python3\n# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu)\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.\nimport argparse\nimport logging\nimport os\nimport json\nfrom tqdm import tqdm\nimport pandas as pd\nimport multiprocessing\nimport time\nimport torch\n\n\ndef job(utt_list, parquet_file, utt2parquet_file, spk2parquet_file):\n    start_time = time.time()\n    data_list = []\n    for utt in tqdm(utt_list):\n        data = open(utt2wav[utt], 'rb').read()\n        data_list.append(data)\n\n    # 保存到parquet,utt2parquet_file,spk2parquet_file\n    df = pd.DataFrame()\n    df['utt'] = utt_list\n    df['audio_data'] = data_list\n    df['wav'] = [utt2wav[utt] for utt in utt_list]\n    df['text'] = [utt2text[utt] for utt in utt_list]\n    df['spk'] = [utt2spk[utt] for utt in utt_list]\n    if utt2embedding is not None:\n        df['utt_embedding'] = [utt2embedding[utt] for utt in utt_list]\n    if spk2embedding is not None:\n        df['spk_embedding'] = [spk2embedding[utt2spk[utt]] for utt in utt_list]\n    if utt2speech_token is not None:\n        df['speech_token'] = [utt2speech_token[utt] for utt in utt_list]\n    if utt2instruct is not None:\n        df['instruct'] = [utt2instruct[utt] for utt in utt_list]\n    if args.dpo:\n        df['reject_speech_token'] = [utt2reject_speech_token.get(utt, None) for utt in utt_list]\n    df.to_parquet(parquet_file)\n    with open(utt2parquet_file, 'w') as f:\n        json.dump({k: parquet_file for k in utt_list}, f, ensure_ascii=False, indent=2)\n    with open(spk2parquet_file, 'w') as f:\n        json.dump({k: parquet_file for k in list(set(spk_list))}, f, ensure_ascii=False, indent=2)\n    logging.info('spend time {}'.format(time.time() - start_time))\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser()\n    parser.add_argument('--num_utts_per_parquet',\n                        type=int,\n                        default=1000,\n                        help='num utts per parquet')\n    parser.add_argument('--num_processes',\n                        type=int,\n                        default=1,\n                        help='num processes for make parquets')\n    parser.add_argument('--src_dir',\n                        type=str)\n    parser.add_argument('--des_dir',\n                        type=str)\n    parser.add_argument('--dpo',\n                        action='store_true',\n                        default=False,\n                        help='Use Direct Preference Optimization')\n    args = parser.parse_args()\n\n    utt2wav, utt2text, utt2spk = {}, {}, {}\n    with open('{}/wav.scp'.format(args.src_dir)) as f:\n        for l in f:\n            l = l.replace('\\n', '').split()\n            utt2wav[l[0]] = l[1]\n    with open('{}/text'.format(args.src_dir)) as f:\n        for l in f:\n            l = l.replace('\\n', '').split()\n            utt2text[l[0]] = ' '.join(l[1:])\n    with open('{}/utt2spk'.format(args.src_dir)) as f:\n        for l in f:\n            l = l.replace('\\n', '').split()\n            utt2spk[l[0]] = l[1]\n    if os.path.exists('{}/instruct'.format(args.src_dir)):\n        utt2instruct = {}\n        with open('{}/instruct'.format(args.src_dir)) as f:\n            for l in f:\n                l = l.replace('\\n', '').split()\n                utt2instruct[l[0]] = ' '.join(l[1:])\n    else:\n        utt2instruct = None\n    utt2embedding = torch.load('{}/utt2embedding.pt'.format(args.src_dir)) if os.path.exists('{}/utt2embedding.pt'.format(args.src_dir)) else None\n    spk2embedding = torch.load('{}/spk2embedding.pt'.format(args.src_dir)) if os.path.exists('{}/spk2embedding.pt'.format(args.src_dir)) else None\n    utt2speech_token = torch.load('{}/utt2speech_token.pt'.format(args.src_dir)) if os.path.exists('{}/utt2speech_token.pt'.format(args.src_dir)) else None\n    if args.dpo:\n        utt2reject_speech_token = torch.load('{}_reject/utt2speech_token.pt'.format(args.src_dir)) if os.path.exists('{}_reject/utt2speech_token.pt'.format(args.src_dir)) else {}\n    utts = list(utt2wav.keys())\n\n    # Using process pool to speedup\n    pool = multiprocessing.Pool(processes=args.num_processes)\n    parquet_list, utt2parquet_list, spk2parquet_list = [], [], []\n    for i, j in enumerate(range(0, len(utts), args.num_utts_per_parquet)):\n        parquet_file = os.path.join(args.des_dir, 'parquet_{:09d}.tar'.format(i))\n        utt2parquet_file = os.path.join(args.des_dir, 'utt2parquet_{:09d}.json'.format(i))\n        spk2parquet_file = os.path.join(args.des_dir, 'spk2parquet_{:09d}.json'.format(i))\n        parquet_list.append(parquet_file)\n        utt2parquet_list.append(utt2parquet_file)\n        spk2parquet_list.append(spk2parquet_file)\n        pool.apply_async(job, (utts[j: j + args.num_utts_per_parquet], parquet_file, utt2parquet_file, spk2parquet_file))\n    pool.close()\n    pool.join()\n\n    with open('{}/data.list'.format(args.des_dir), 'w', encoding='utf8') as f1, \\\n            open('{}/utt2data.list'.format(args.des_dir), 'w', encoding='utf8') as f2, \\\n            open('{}/spk2data.list'.format(args.des_dir), 'w', encoding='utf8') as f3:\n        for name in parquet_list:\n            f1.write(name + '\\n')\n        for name in utt2parquet_list:\n            f2.write(name + '\\n')\n        for name in spk2parquet_list:\n            f3.write(name + '\\n')\n"
  },
  {
    "path": "vllm_example.py",
    "content": "import sys\nsys.path.append('third_party/Matcha-TTS')\nfrom vllm import ModelRegistry\nfrom cosyvoice.vllm.cosyvoice2 import CosyVoice2ForCausalLM\nModelRegistry.register_model(\"CosyVoice2ForCausalLM\", CosyVoice2ForCausalLM)\n\nfrom cosyvoice.cli.cosyvoice import AutoModel\nfrom cosyvoice.utils.common import set_all_random_seed\nfrom tqdm import tqdm\n\n\ndef cosyvoice2_example():\n    \"\"\" CosyVoice2 vllm usage\n    \"\"\"\n    cosyvoice = AutoModel(model_dir='pretrained_models/CosyVoice2-0.5B', load_jit=True, load_trt=True, load_vllm=True, fp16=True)\n    for i in tqdm(range(100)):\n        set_all_random_seed(i)\n        for _, _ in enumerate(cosyvoice.inference_zero_shot('收到好友从远方寄来的生日礼物，那份意外的惊喜与深深的祝福让我心中充满了甜蜜的快乐，笑容如花儿般绽放。', '希望你以后能够做的比我还好呦。', './asset/zero_shot_prompt.wav', stream=False)):\n            continue\n\n\ndef cosyvoice3_example():\n    \"\"\" CosyVoice3 vllm usage\n    \"\"\"\n    cosyvoice = AutoModel(model_dir='pretrained_models/Fun-CosyVoice3-0.5B', load_trt=True, load_vllm=True, fp16=False)\n    for i in tqdm(range(100)):\n        set_all_random_seed(i)\n        for _, _ in enumerate(cosyvoice.inference_zero_shot('收到好友从远方寄来的生日礼物，那份意外的惊喜与深深的祝福让我心中充满了甜蜜的快乐，笑容如花儿般绽放。', 'You are a helpful assistant.<|endofprompt|>希望你以后能够做的比我还好呦。',\n                                                            './asset/zero_shot_prompt.wav', stream=False)):\n            continue\n\n\ndef main():\n    # cosyvoice2_example()\n    cosyvoice3_example()\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "webui.py",
    "content": "# Copyright (c) 2024 Alibaba Inc (authors: Xiang Lyu, Liu Yue)\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.\nimport os\nimport sys\nimport argparse\nimport gradio as gr\nimport numpy as np\nimport torch\nimport torchaudio\nimport random\nimport librosa\nROOT_DIR = os.path.dirname(os.path.abspath(__file__))\nsys.path.append('{}/third_party/Matcha-TTS'.format(ROOT_DIR))\nfrom cosyvoice.cli.cosyvoice import AutoModel\nfrom cosyvoice.utils.file_utils import logging\nfrom cosyvoice.utils.common import set_all_random_seed\n\ninference_mode_list = ['预训练音色', '3s极速复刻', '跨语种复刻', '自然语言控制']\ninstruct_dict = {'预训练音色': '1. 选择预训练音色\\n2. 点击生成音频按钮',\n                 '3s极速复刻': '1. 选择prompt音频文件，或录入prompt音频，注意不超过30s，若同时提供，优先选择prompt音频文件\\n2. 输入prompt文本\\n3. 点击生成音频按钮',\n                 '跨语种复刻': '1. 选择prompt音频文件，或录入prompt音频，注意不超过30s，若同时提供，优先选择prompt音频文件\\n2. 点击生成音频按钮',\n                 '自然语言控制': '1. 选择预训练音色\\n2. 输入instruct文本\\n3. 点击生成音频按钮'}\nstream_mode_list = [('否', False), ('是', True)]\nmax_val = 0.8\n\n\ndef generate_seed():\n    seed = random.randint(1, 100000000)\n    return {\n        \"__type__\": \"update\",\n        \"value\": seed\n    }\n\n\ndef change_instruction(mode_checkbox_group):\n    return instruct_dict[mode_checkbox_group]\n\n\ndef generate_audio(tts_text, mode_checkbox_group, sft_dropdown, prompt_text, prompt_wav_upload, prompt_wav_record, instruct_text,\n                   seed, stream, speed):\n    if prompt_wav_upload is not None:\n        prompt_wav = prompt_wav_upload\n    elif prompt_wav_record is not None:\n        prompt_wav = prompt_wav_record\n    else:\n        prompt_wav = None\n    # if instruct mode, please make sure that model is iic/CosyVoice-300M-Instruct and not cross_lingual mode\n    if mode_checkbox_group in ['自然语言控制']:\n        if instruct_text == '':\n            gr.Warning('您正在使用自然语言控制模式, 请输入instruct文本')\n            yield (cosyvoice.sample_rate, default_data)\n        if prompt_wav is not None or prompt_text != '':\n            gr.Info('您正在使用自然语言控制模式, prompt音频/prompt文本会被忽略')\n    # if cross_lingual mode, please make sure that model is iic/CosyVoice-300M and tts_text prompt_text are different language\n    if mode_checkbox_group in ['跨语种复刻']:\n        if instruct_text != '':\n            gr.Info('您正在使用跨语种复刻模式, instruct文本会被忽略')\n        if prompt_wav is None:\n            gr.Warning('您正在使用跨语种复刻模式, 请提供prompt音频')\n            yield (cosyvoice.sample_rate, default_data)\n        gr.Info('您正在使用跨语种复刻模式, 请确保合成文本和prompt文本为不同语言')\n    # if in zero_shot cross_lingual, please make sure that prompt_text and prompt_wav meets requirements\n    if mode_checkbox_group in ['3s极速复刻', '跨语种复刻']:\n        if prompt_wav is None:\n            gr.Warning('prompt音频为空，您是否忘记输入prompt音频？')\n            yield (cosyvoice.sample_rate, default_data)\n        if torchaudio.info(prompt_wav).sample_rate < prompt_sr:\n            gr.Warning('prompt音频采样率{}低于{}'.format(torchaudio.info(prompt_wav).sample_rate, prompt_sr))\n            yield (cosyvoice.sample_rate, default_data)\n    # sft mode only use sft_dropdown\n    if mode_checkbox_group in ['预训练音色']:\n        if instruct_text != '' or prompt_wav is not None or prompt_text != '':\n            gr.Info('您正在使用预训练音色模式，prompt文本/prompt音频/instruct文本会被忽略！')\n        if sft_dropdown == '':\n            gr.Warning('没有可用的预训练音色！')\n            yield (cosyvoice.sample_rate, default_data)\n    # zero_shot mode only use prompt_wav prompt text\n    if mode_checkbox_group in ['3s极速复刻']:\n        if prompt_text == '':\n            gr.Warning('prompt文本为空，您是否忘记输入prompt文本？')\n            yield (cosyvoice.sample_rate, default_data)\n        if instruct_text != '':\n            gr.Info('您正在使用3s极速复刻模式，预训练音色/instruct文本会被忽略！')\n\n    if mode_checkbox_group == '预训练音色':\n        logging.info('get sft inference request')\n        set_all_random_seed(seed)\n        for i in cosyvoice.inference_sft(tts_text, sft_dropdown, stream=stream, speed=speed):\n            yield (cosyvoice.sample_rate, i['tts_speech'].numpy().flatten())\n    elif mode_checkbox_group == '3s极速复刻':\n        logging.info('get zero_shot inference request')\n        set_all_random_seed(seed)\n        for i in cosyvoice.inference_zero_shot(tts_text, prompt_text, prompt_wav, stream=stream, speed=speed):\n            yield (cosyvoice.sample_rate, i['tts_speech'].numpy().flatten())\n    elif mode_checkbox_group == '跨语种复刻':\n        logging.info('get cross_lingual inference request')\n        set_all_random_seed(seed)\n        for i in cosyvoice.inference_cross_lingual(tts_text, prompt_wav, stream=stream, speed=speed):\n            yield (cosyvoice.sample_rate, i['tts_speech'].numpy().flatten())\n    else:\n        logging.info('get instruct inference request')\n        set_all_random_seed(seed)\n        for i in cosyvoice.inference_instruct(tts_text, sft_dropdown, instruct_text, stream=stream, speed=speed):\n            yield (cosyvoice.sample_rate, i['tts_speech'].numpy().flatten())\n\n\ndef main():\n    with gr.Blocks() as demo:\n        gr.Markdown(\"### 代码库 [CosyVoice](https://github.com/FunAudioLLM/CosyVoice) \\\n                    预训练模型 [CosyVoice-300M](https://www.modelscope.cn/models/iic/CosyVoice-300M) \\\n                    [CosyVoice-300M-Instruct](https://www.modelscope.cn/models/iic/CosyVoice-300M-Instruct) \\\n                    [CosyVoice-300M-SFT](https://www.modelscope.cn/models/iic/CosyVoice-300M-SFT)\")\n        gr.Markdown(\"#### 请输入需要合成的文本，选择推理模式，并按照提示步骤进行操作\")\n\n        tts_text = gr.Textbox(label=\"输入合成文本\", lines=1, value=\"我是通义实验室语音团队全新推出的生成式语音大模型，提供舒适自然的语音合成能力。\")\n        with gr.Row():\n            mode_checkbox_group = gr.Radio(choices=inference_mode_list, label='选择推理模式', value=inference_mode_list[0])\n            instruction_text = gr.Text(label=\"操作步骤\", value=instruct_dict[inference_mode_list[0]], scale=0.5)\n            sft_dropdown = gr.Dropdown(choices=sft_spk, label='选择预训练音色', value=sft_spk[0], scale=0.25)\n            stream = gr.Radio(choices=stream_mode_list, label='是否流式推理', value=stream_mode_list[0][1])\n            speed = gr.Number(value=1, label=\"速度调节(仅支持非流式推理)\", minimum=0.5, maximum=2.0, step=0.1)\n            with gr.Column(scale=0.25):\n                seed_button = gr.Button(value=\"\\U0001F3B2\")\n                seed = gr.Number(value=0, label=\"随机推理种子\")\n\n        with gr.Row():\n            prompt_wav_upload = gr.Audio(sources='upload', type='filepath', label='选择prompt音频文件，注意采样率不低于16khz')\n            prompt_wav_record = gr.Audio(sources='microphone', type='filepath', label='录制prompt音频文件')\n        prompt_text = gr.Textbox(label=\"输入prompt文本\", lines=1, placeholder=\"请输入prompt文本，需与prompt音频内容一致，暂时不支持自动识别...\", value='')\n        instruct_text = gr.Textbox(label=\"输入instruct文本\", lines=1, placeholder=\"请输入instruct文本.\", value='')\n\n        generate_button = gr.Button(\"生成音频\")\n\n        audio_output = gr.Audio(label=\"合成音频\", autoplay=True, streaming=True)\n\n        seed_button.click(generate_seed, inputs=[], outputs=seed)\n        generate_button.click(generate_audio,\n                              inputs=[tts_text, mode_checkbox_group, sft_dropdown, prompt_text, prompt_wav_upload, prompt_wav_record, instruct_text,\n                                      seed, stream, speed],\n                              outputs=[audio_output])\n        mode_checkbox_group.change(fn=change_instruction, inputs=[mode_checkbox_group], outputs=[instruction_text])\n    demo.queue(max_size=4, default_concurrency_limit=2)\n    demo.launch(server_name='0.0.0.0', server_port=args.port)\n\n\nif __name__ == '__main__':\n    parser = argparse.ArgumentParser()\n    parser.add_argument('--port',\n                        type=int,\n                        default=8000)\n    parser.add_argument('--model_dir',\n                        type=str,\n                        default='pretrained_models/CosyVoice2-0.5B',\n                        help='local path or modelscope repo id')\n    args = parser.parse_args()\n    cosyvoice = AutoModel(model_dir=args.model_dir)\n\n    sft_spk = cosyvoice.list_available_spks()\n    if len(sft_spk) == 0:\n        sft_spk = ['']\n    prompt_sr = 16000\n    default_data = np.zeros(cosyvoice.sample_rate)\n    main()\n"
  }
]